@seedprotocol/sdk 0.1.119 → 0.1.121
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/dist/{index-PI7JgtNo.js → index-Bj_ICJrP.js} +3 -3
- package/dist/index-Bj_ICJrP.js.map +1 -0
- package/dist/{index-D9hBdVBw.js → index-CQVtBXqn.js} +63 -15
- package/dist/index-CQVtBXqn.js.map +1 -0
- package/dist/main.js +2 -2
- package/dist/{seed.schema.config-DcbShLHu.js → seed.schema.config-CEyCY7bh.js} +2 -2
- package/dist/{seed.schema.config-DcbShLHu.js.map → seed.schema.config-CEyCY7bh.js.map} +1 -1
- package/dist/src/actors.ts +7 -289
- package/dist/src/files.ts +38 -27
- package/dist/src/index.ts +4 -73
- package/dist/src/migrate.ts +17 -14
- package/dist/src/seed.ts +4 -31
- package/dist/types/src/browser/services/db/actors/migrate.d.ts.map +1 -1
- package/dist/types/src/shared/helpers/files.d.ts +2 -2
- package/dist/types/src/shared/helpers/files.d.ts.map +1 -1
- package/package.json +1 -4
- package/dist/index-D9hBdVBw.js.map +0 -1
- package/dist/index-PI7JgtNo.js.map +0 -1
package/dist/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { j as ImageSrc, I as Item, k as ItemProperty, J as Json, L as List, M as Model, P as Property, R as Relation, T as Text, t as client, v as getCorrectId, s as getGlobalService, n as useCreateItem, p as useDeleteItem, q as useGlobalServiceStatus, l as useItem, m as useItemProperties, o as useItemProperty, u as useItems, r as useServices, w as withSeed } from './index-
|
|
1
|
+
export { j as ImageSrc, I as Item, k as ItemProperty, J as Json, L as List, M as Model, P as Property, R as Relation, T as Text, t as client, v as getCorrectId, s as getGlobalService, n as useCreateItem, p as useDeleteItem, q as useGlobalServiceStatus, l as useItem, m as useItemProperties, o as useItemProperty, u as useItems, r as useServices, w as withSeed } from './index-CQVtBXqn.js';
|
|
2
2
|
import 'immer';
|
|
3
3
|
import 'reflect-metadata';
|
|
4
4
|
import 'tslib';
|
|
@@ -28,8 +28,8 @@ import 'rxjs';
|
|
|
28
28
|
import 'drizzle-orm/sqlite-proxy';
|
|
29
29
|
import 'drizzle-orm/sqlite-proxy/migrator';
|
|
30
30
|
import 'drizzle-orm/migrator';
|
|
31
|
-
import '@zenfs/dom';
|
|
32
31
|
import 'node:fs';
|
|
32
|
+
import '@zenfs/dom';
|
|
33
33
|
import './constants-B6s6tGup.js';
|
|
34
34
|
import '@ethereum-attestation-service/eas-sdk';
|
|
35
35
|
import 'thirdweb';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from 'tslib';
|
|
2
2
|
import 'drizzle-orm';
|
|
3
|
-
import { T as Text, M as Model } from './index-
|
|
3
|
+
import { T as Text, M as Model } from './index-CQVtBXqn.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import 'reflect-metadata';
|
|
6
6
|
import 'xstate';
|
|
@@ -80,4 +80,4 @@ const models = {
|
|
|
80
80
|
};
|
|
81
81
|
|
|
82
82
|
export { models };
|
|
83
|
-
//# sourceMappingURL=seed.schema.config-
|
|
83
|
+
//# sourceMappingURL=seed.schema.config-CEyCY7bh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.schema.config-
|
|
1
|
+
{"version":3,"file":"seed.schema.config-CEyCY7bh.js","sources":["../../src/shared/configs/seed.schema.config.ts"],"sourcesContent":["import { Model, Text } from '@/browser'\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;;;;;"}
|
package/dist/src/actors.ts
CHANGED
|
@@ -1,292 +1,10 @@
|
|
|
1
1
|
import { EventObject, fromCallback } from 'xstate'
|
|
2
|
-
import {
|
|
3
|
-
import { ARWEAVE_HOST } from '@/browser/services/internal/constants'
|
|
4
|
-
import { GET_FILES_METADATA } from '@/browser/schema/file/queries'
|
|
5
|
-
import { getArweave } from '../../../helpers/arweave'
|
|
6
|
-
import { fs } from '@zenfs/core'
|
|
7
|
-
import {
|
|
8
|
-
getDataTypeFromString,
|
|
9
|
-
getMimeType,
|
|
10
|
-
identifyString,
|
|
11
|
-
} from '@/shared/helpers'
|
|
12
|
-
import { appState } from 'src/shared/seedSchema'
|
|
13
|
-
import { eq } from 'drizzle-orm'
|
|
14
|
-
import { easClient, queryClient } from '@/browser/helpers'
|
|
15
|
-
import debug from 'debug'
|
|
16
|
-
import { getAppDb } from '@/browser/db/sqlWasmClient'
|
|
2
|
+
import { uploadMachine } from '@/browser/schema/file/upload/index'
|
|
17
3
|
|
|
18
|
-
|
|
4
|
+
export const uploadBinaryData = fromCallback<EventObject, typeof uploadMachine>(
|
|
5
|
+
({ sendBack, receive, input }) => {},
|
|
6
|
+
)
|
|
19
7
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
mimeType: string
|
|
24
|
-
extension: string
|
|
25
|
-
}
|
|
26
|
-
|
|
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
|
-
}
|
|
35
|
-
|
|
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 { filesMetadata } = await queryClient.fetchQuery({
|
|
44
|
-
queryKey: ['getFilesMetadata', ...addresses],
|
|
45
|
-
queryFn: async () =>
|
|
46
|
-
easClient.request(GET_FILES_METADATA, {
|
|
47
|
-
where: {
|
|
48
|
-
attester: {
|
|
49
|
-
in: addresses,
|
|
50
|
-
},
|
|
51
|
-
schema: {
|
|
52
|
-
is: {
|
|
53
|
-
id: {
|
|
54
|
-
equals:
|
|
55
|
-
'0x55fdefb36fcbbaebeb7d6b41dc3a1a9666e4e42154267c889de064faa7ede517',
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
}),
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
return filesMetadata
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
_fetchAllMetadataRecords().then((filesMetadata) => {
|
|
67
|
-
sendBack({ type: 'fetchingAllMetadataRecordsSuccess', filesMetadata })
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
return () => {}
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
export const fetchAllBinaryData = fromCallback<
|
|
74
|
-
EventObject,
|
|
75
|
-
typeof fetchAllFilesMachine
|
|
76
|
-
>(({ sendBack, input: { context } }) => {
|
|
77
|
-
const { filesMetadata, addresses } = context
|
|
78
|
-
|
|
79
|
-
const _fetchAllBinaryData = async () => {
|
|
80
|
-
if (!(await fs.promises.exists('/files'))) {
|
|
81
|
-
await fs.promises.mkdir('/files', { recursive: true })
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (!(await fs.promises.exists('/files/html'))) {
|
|
85
|
-
await fs.promises.mkdir('/files/html', { recursive: true })
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (!(await fs.promises.exists('/files/json'))) {
|
|
89
|
-
await fs.promises.mkdir('/files/json', { recursive: true })
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (!(await fs.promises.exists('/files/images'))) {
|
|
93
|
-
await fs.promises.mkdir('/files/images', { recursive: true })
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const appDb = getAppDb()
|
|
97
|
-
|
|
98
|
-
if (!appDb) {
|
|
99
|
-
logger('[fetchAll/actors] [fetchAllBinaryData] seedDb not available')
|
|
100
|
-
return []
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
for (const fileMetadata of filesMetadata) {
|
|
104
|
-
const json = JSON.parse(fileMetadata.decodedDataJson)
|
|
105
|
-
const transactionId = json[0].value.value
|
|
106
|
-
|
|
107
|
-
const excludedTransactionsQuery = await appDb
|
|
108
|
-
.select()
|
|
109
|
-
.from(appState)
|
|
110
|
-
.where(eq(appState.key, 'excludedTransactions'))
|
|
111
|
-
|
|
112
|
-
let excludedTransactions = new Set<string>()
|
|
113
|
-
|
|
114
|
-
if (excludedTransactionsQuery && excludedTransactionsQuery.length === 1) {
|
|
115
|
-
const valueString = excludedTransactionsQuery[0].value
|
|
116
|
-
if (valueString) {
|
|
117
|
-
const excludedTransactionsArray = JSON.parse(valueString)
|
|
118
|
-
excludedTransactions = new Set(excludedTransactionsArray)
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (excludedTransactions.has(transactionId)) {
|
|
123
|
-
continue
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const arweave = getArweave()
|
|
127
|
-
|
|
128
|
-
if (!arweave) {
|
|
129
|
-
logger('[fetchAll/actors] [fetchAllBinaryData] arweave not available')
|
|
130
|
-
return []
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
try {
|
|
134
|
-
const res = await fetch(
|
|
135
|
-
`https://${ARWEAVE_HOST}/tx/${transactionId}/status`,
|
|
136
|
-
)
|
|
137
|
-
|
|
138
|
-
if (res.status !== 200) {
|
|
139
|
-
logger(
|
|
140
|
-
`[fetchAll/actors] [fetchAllBinaryData] error fetching transaction data for ${transactionId}`,
|
|
141
|
-
)
|
|
142
|
-
|
|
143
|
-
excludedTransactions.add(transactionId)
|
|
144
|
-
|
|
145
|
-
await saveAppState(
|
|
146
|
-
'excludedTransactions',
|
|
147
|
-
JSON.stringify(Array.from(excludedTransactions)),
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
logger(
|
|
151
|
-
'[fetchAll/actors] [fetchAllBinaryData] updated excludedTransactions:',
|
|
152
|
-
excludedTransactions,
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
continue
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const dataString = await arweave.transactions
|
|
159
|
-
.getData(transactionId, {
|
|
160
|
-
decode: true,
|
|
161
|
-
string: true,
|
|
162
|
-
})
|
|
163
|
-
.catch((error) => {
|
|
164
|
-
logger(
|
|
165
|
-
`[fetchAll/actors] [fetchAllBinaryData] error fetching transaction data for ${transactionId}`,
|
|
166
|
-
error,
|
|
167
|
-
)
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
const dataUint8Array = await arweave.transactions.getData(transactionId)
|
|
171
|
-
// let buffer
|
|
172
|
-
//
|
|
173
|
-
// if (dataUint8Array && dataUint8Array instanceof Uint8Array) {
|
|
174
|
-
// }
|
|
175
|
-
|
|
176
|
-
let contentType = identifyString(dataString)
|
|
177
|
-
if (
|
|
178
|
-
contentType !== 'json' &&
|
|
179
|
-
contentType !== 'base64' &&
|
|
180
|
-
contentType !== 'html'
|
|
181
|
-
) {
|
|
182
|
-
const possibleImageType = getDataTypeFromString(dataString)
|
|
183
|
-
if (!possibleImageType) {
|
|
184
|
-
logger(
|
|
185
|
-
`[fetchAll/actors] [fetchAllBinaryData] transaction ${transactionId} data not in expected format: ${possibleImageType}`,
|
|
186
|
-
)
|
|
187
|
-
continue
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
contentType = possibleImageType
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (contentType === 'url') {
|
|
194
|
-
const url = dataString as string
|
|
195
|
-
const response = await fetch(url)
|
|
196
|
-
if (!response.ok) {
|
|
197
|
-
throw new Error(`Failed to fetch image: ${response.statusText}`)
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Get the image as a Blob
|
|
201
|
-
const blob = await response.blob()
|
|
202
|
-
const buffer = await blob.arrayBuffer()
|
|
203
|
-
const bufferUint8Array = new Uint8Array(buffer)
|
|
204
|
-
|
|
205
|
-
// Extract the file extension from the URL
|
|
206
|
-
const extensionMatch = url.match(
|
|
207
|
-
/\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i,
|
|
208
|
-
)
|
|
209
|
-
if (!extensionMatch) {
|
|
210
|
-
throw new Error(
|
|
211
|
-
'Unable to determine the file extension from the URL.',
|
|
212
|
-
)
|
|
213
|
-
}
|
|
214
|
-
const fileExtension = extensionMatch[0] // e.g., ".jpg"
|
|
215
|
-
|
|
216
|
-
// Set the file name (you can customize this)
|
|
217
|
-
// const fileNameFromUrl = `${transactionId}${fileExtension}`
|
|
218
|
-
|
|
219
|
-
await fs.promises.writeFile(
|
|
220
|
-
`/files/images/${transactionId}`,
|
|
221
|
-
bufferUint8Array,
|
|
222
|
-
{
|
|
223
|
-
encoding: 'binary',
|
|
224
|
-
},
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
continue
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
let mimeType = getMimeType(dataString as string)
|
|
231
|
-
let fileExtension = mimeType
|
|
232
|
-
|
|
233
|
-
if (fileExtension && fileExtension?.startsWith('image')) {
|
|
234
|
-
fileExtension = fileExtension.replace('image/', '')
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
let fileName = transactionId
|
|
238
|
-
|
|
239
|
-
if (contentType === 'base64') {
|
|
240
|
-
if (mimeType) {
|
|
241
|
-
fileName += `.${fileExtension}`
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Remove the Base64 header if it exists (e.g., "data:image/png;base64,")
|
|
245
|
-
const base64Data = dataString.split(',').pop() || ''
|
|
246
|
-
|
|
247
|
-
// Decode the Base64 string to binary
|
|
248
|
-
const binaryString = atob(base64Data)
|
|
249
|
-
const length = binaryString.length
|
|
250
|
-
const binaryData = new Uint8Array(length)
|
|
251
|
-
|
|
252
|
-
for (let i = 0; i < length; i++) {
|
|
253
|
-
binaryData[i] = binaryString.charCodeAt(i)
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
console.log(`attempting to writeFile to /files/images/${fileName}`)
|
|
257
|
-
|
|
258
|
-
await fs.promises.writeFile(`/files/images/${fileName}`, binaryData, {
|
|
259
|
-
encoding: 'binary',
|
|
260
|
-
})
|
|
261
|
-
|
|
262
|
-
// if (dataUint8Array && dataUint8Array instanceof Uint8Array) {
|
|
263
|
-
// await fs.promises.writeFile(
|
|
264
|
-
// `/files/images/${fileName}`,
|
|
265
|
-
// dataUint8Array,
|
|
266
|
-
// )
|
|
267
|
-
// }
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
if (contentType === 'html') {
|
|
271
|
-
fileName += '.html'
|
|
272
|
-
await fs.promises.writeFile(`/files/html/${fileName}`, dataString)
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
if (contentType === 'json') {
|
|
276
|
-
fileName += '.json'
|
|
277
|
-
await fs.promises.writeFile(`/files/json/${fileName}`, dataString)
|
|
278
|
-
}
|
|
279
|
-
} catch (error) {
|
|
280
|
-
logger(error)
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
return []
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
_fetchAllBinaryData().then((binaryData) => {
|
|
288
|
-
sendBack({ type: 'fetchingAllBinaryDataSuccess', binaryData })
|
|
289
|
-
})
|
|
290
|
-
|
|
291
|
-
return () => {}
|
|
292
|
-
})
|
|
8
|
+
export const uploadMetadata = fromCallback<EventObject, typeof uploadMachine>(
|
|
9
|
+
({ sendBack, receive, input }) => {},
|
|
10
|
+
)
|
package/dist/src/files.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { fs } from '@zenfs/core'
|
|
2
|
-
import
|
|
2
|
+
import * as fsNode from 'node:fs'
|
|
3
|
+
// import * as retry from 'async-es/retry'
|
|
3
4
|
|
|
4
5
|
export const listFilesInOPFSRoot = async () => {
|
|
5
6
|
// Get the root directory handle
|
|
@@ -22,38 +23,48 @@ export const listFilesInOPFSRoot = async () => {
|
|
|
22
23
|
* Waits for a file to exist at the specified path.
|
|
23
24
|
* @param {string} filePath - The path of the file to check.
|
|
24
25
|
* @param {number} interval - The interval in milliseconds between checks (default: 500ms).
|
|
25
|
-
* @param {number} timeout - The
|
|
26
|
+
* @param {number} timeout - The timeout in milliseconds to wait for the file to exist (default: 10s).
|
|
26
27
|
* @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.
|
|
27
28
|
*/
|
|
28
29
|
export const waitForFile = (
|
|
29
30
|
filePath: string,
|
|
30
|
-
interval = 500,
|
|
31
|
-
timeout = 10000,
|
|
32
|
-
) => {
|
|
31
|
+
interval: number = 500,
|
|
32
|
+
timeout: number = 10000,
|
|
33
|
+
): Promise<boolean> => {
|
|
33
34
|
return new Promise((resolve, reject) => {
|
|
34
35
|
const startTime = Date.now()
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
)
|
|
37
|
+
const _interval = setInterval(() => {
|
|
38
|
+
if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {
|
|
39
|
+
clearInterval(_interval)
|
|
40
|
+
resolve(true)
|
|
41
|
+
}
|
|
42
|
+
if (Date.now() - startTime >= timeout) {
|
|
43
|
+
clearInterval(_interval)
|
|
44
|
+
reject(new Error('Timeout exceeded while waiting for file'))
|
|
45
|
+
}
|
|
46
|
+
}, interval)
|
|
47
|
+
|
|
48
|
+
// retry(
|
|
49
|
+
// {
|
|
50
|
+
// times: Math.ceil(timeout / interval),
|
|
51
|
+
// interval: interval,
|
|
52
|
+
// },
|
|
53
|
+
// (callback: Function) => {
|
|
54
|
+
// if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {
|
|
55
|
+
// return callback(null, true) // File exists, finish with success
|
|
56
|
+
// }
|
|
57
|
+
// if (Date.now() - startTime >= timeout) {
|
|
58
|
+
// return callback(new Error('Timeout exceeded while waiting for file'))
|
|
59
|
+
// }
|
|
60
|
+
// callback(new Error('File does not exist yet')) // Retry with this error
|
|
61
|
+
// },
|
|
62
|
+
// (err: Error, result: boolean) => {
|
|
63
|
+
// if (err) {
|
|
64
|
+
// return resolve(false) // Resolve as false if timeout or error occurs
|
|
65
|
+
// }
|
|
66
|
+
// resolve(result) // Resolve as true if file exists
|
|
67
|
+
// },
|
|
68
|
+
// )
|
|
58
69
|
})
|
|
59
70
|
}
|
package/dist/src/index.ts
CHANGED
|
@@ -1,73 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from '@/browser/schema/file/fetchAll/actors'
|
|
6
|
-
import { Attestation } from '@/browser/gql/graphql'
|
|
7
|
-
|
|
8
|
-
type FetchAllFilesMachineContext = {
|
|
9
|
-
addresses: string[]
|
|
10
|
-
dbsLoaded: boolean
|
|
11
|
-
filesMetadata?: Attestation[]
|
|
12
|
-
filesBlobData?: any[]
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const fetchAllFilesMachine = setup({
|
|
16
|
-
types: {
|
|
17
|
-
context: {} as FetchAllFilesMachineContext,
|
|
18
|
-
},
|
|
19
|
-
actors: {
|
|
20
|
-
fetchAllMetadataRecords,
|
|
21
|
-
fetchAllBinaryData,
|
|
22
|
-
},
|
|
23
|
-
}).createMachine({
|
|
24
|
-
id: 'fetchAllFiles',
|
|
25
|
-
initial: 'idle',
|
|
26
|
-
context: ({ input }) =>
|
|
27
|
-
({
|
|
28
|
-
...input,
|
|
29
|
-
dbsLoaded: false,
|
|
30
|
-
}) as FetchAllFilesMachineContext,
|
|
31
|
-
on: {
|
|
32
|
-
allDbsLoaded: {
|
|
33
|
-
target: '.fetchingAllMetadataRecords',
|
|
34
|
-
actions: assign({
|
|
35
|
-
dbsLoaded: true,
|
|
36
|
-
}),
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
states: {
|
|
40
|
-
idle: {},
|
|
41
|
-
fetchingAllMetadataRecords: {
|
|
42
|
-
on: {
|
|
43
|
-
fetchingAllMetadataRecordsSuccess: {
|
|
44
|
-
target: 'fetchingAllBinaryData',
|
|
45
|
-
actions: assign({
|
|
46
|
-
filesMetadata: ({ event }) => event.filesMetadata,
|
|
47
|
-
}),
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
invoke: {
|
|
51
|
-
src: 'fetchAllMetadataRecords',
|
|
52
|
-
input: ({ context, event }) => ({ context, event }),
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
fetchingAllBinaryData: {
|
|
56
|
-
on: {
|
|
57
|
-
fetchingAllBinaryDataSuccess: {
|
|
58
|
-
target: 'success',
|
|
59
|
-
actions: assign({
|
|
60
|
-
filesBlobData: ({ event }) => event.filesBlobData,
|
|
61
|
-
}),
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
invoke: {
|
|
65
|
-
src: 'fetchAllBinaryData',
|
|
66
|
-
input: ({ context }) => ({ context }),
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
success: {
|
|
70
|
-
type: 'final',
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
})
|
|
1
|
+
export * from './analyzeInput'
|
|
2
|
+
export * from './saveImageSrc'
|
|
3
|
+
export * from './saveRelation'
|
|
4
|
+
export * from './saveItemStorage'
|
package/dist/src/migrate.ts
CHANGED
|
@@ -7,12 +7,12 @@ import {
|
|
|
7
7
|
import { getSqliteWasmClient, setAppDb } from '@/browser/db/sqlWasmClient'
|
|
8
8
|
import { drizzle } from 'drizzle-orm/sqlite-proxy'
|
|
9
9
|
import { sql } from 'drizzle-orm'
|
|
10
|
-
import {
|
|
10
|
+
import { fs } from '@zenfs/core'
|
|
11
11
|
import debug from 'debug'
|
|
12
12
|
import { migrate as drizzleMigrate } from 'drizzle-orm/sqlite-proxy/migrator'
|
|
13
13
|
import { readMigrationFiles } from 'drizzle-orm/migrator'
|
|
14
|
-
import { WebAccess } from '@zenfs/dom'
|
|
15
14
|
import * as fsNode from 'node:fs'
|
|
15
|
+
import { waitForFile } from '@/shared/helpers/files'
|
|
16
16
|
|
|
17
17
|
const logger = debug('app:services:db:actors:migrate')
|
|
18
18
|
|
|
@@ -123,12 +123,13 @@ export const migrate = fromCallback<
|
|
|
123
123
|
console.log('journalExistsSyncNode', journalExistsSyncNode)
|
|
124
124
|
|
|
125
125
|
if (!journalExists) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
126
|
+
await waitForFile(journalPath)
|
|
127
|
+
// const handle = await navigator.storage.getDirectory()
|
|
128
|
+
//
|
|
129
|
+
// await configureSingle({
|
|
130
|
+
// backend: WebAccess,
|
|
131
|
+
// handle,
|
|
132
|
+
// })
|
|
132
133
|
|
|
133
134
|
// window.location.reload()
|
|
134
135
|
|
|
@@ -229,12 +230,14 @@ export const migrate = fromCallback<
|
|
|
229
230
|
} catch (error) {
|
|
230
231
|
// console.error('Error migrating database: ', error)
|
|
231
232
|
// window.location.reload()
|
|
232
|
-
const handle = await navigator.storage.getDirectory()
|
|
233
|
-
|
|
234
|
-
await configureSingle({
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
})
|
|
233
|
+
// const handle = await navigator.storage.getDirectory()
|
|
234
|
+
//
|
|
235
|
+
// await configureSingle({
|
|
236
|
+
// backend: WebAccess,
|
|
237
|
+
// handle,
|
|
238
|
+
// })
|
|
239
|
+
|
|
240
|
+
await waitForFile(`${pathToDbDir}/meta/_journal.json`)
|
|
238
241
|
|
|
239
242
|
return _migrate()
|
|
240
243
|
}
|
package/dist/src/seed.ts
CHANGED
|
@@ -1,37 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { Subject } from 'rxjs'
|
|
1
|
+
import { SeedConstructorOptions } from '@/types/types'
|
|
2
|
+
import { SeedBase } from '@/shared/seed'
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
abstract class SeedBase {
|
|
8
|
-
private readonly _env: Environment = 'browser'
|
|
9
|
-
protected _subject: Subject<void> = new Subject<void>()
|
|
10
|
-
|
|
11
|
-
constructor(props: { endpoints: Endpoints }) {
|
|
12
|
-
console.log('Seed constructor called')
|
|
13
|
-
if (isNode()) {
|
|
14
|
-
this._env = 'node'
|
|
15
|
-
}
|
|
16
|
-
if (isBrowser()) {
|
|
17
|
-
this._env = 'browser'
|
|
18
|
-
}
|
|
19
|
-
if (isReactNative()) {
|
|
20
|
-
this._env = 'react-native'
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
async initialize() {}
|
|
25
|
-
|
|
26
|
-
subscribe(callback: (event: any) => void) {
|
|
27
|
-
return this._subject.subscribe(callback)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
class SeedSync extends SeedBase {
|
|
4
|
+
class SeedNode extends SeedBase {
|
|
32
5
|
constructor(props: SeedConstructorOptions) {
|
|
33
6
|
super(props)
|
|
34
7
|
}
|
|
35
8
|
}
|
|
36
9
|
|
|
37
|
-
export {
|
|
10
|
+
export { SeedNode }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../../../../src/browser/services/db/actors/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAA;AAiB/E,eAAO,MAAM,MAAM,kFAkElB,CAAA;AAED,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../../../../src/browser/services/db/actors/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAA;AAiB/E,eAAO,MAAM,MAAM,kFAkElB,CAAA;AAED,eAAO,MAAM,OAAO,oGAoOlB,CAAA"}
|
|
@@ -3,8 +3,8 @@ export declare const listFilesInOPFSRoot: () => Promise<any[]>;
|
|
|
3
3
|
* Waits for a file to exist at the specified path.
|
|
4
4
|
* @param {string} filePath - The path of the file to check.
|
|
5
5
|
* @param {number} interval - The interval in milliseconds between checks (default: 500ms).
|
|
6
|
-
* @param {number} timeout - The
|
|
6
|
+
* @param {number} timeout - The timeout in milliseconds to wait for the file to exist (default: 10s).
|
|
7
7
|
* @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.
|
|
8
8
|
*/
|
|
9
|
-
export declare const waitForFile: (filePath: string, interval?: number, timeout?: number) => Promise<
|
|
9
|
+
export declare const waitForFile: (filePath: string, interval?: number, timeout?: number) => Promise<boolean>;
|
|
10
10
|
//# sourceMappingURL=files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/shared/helpers/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/shared/helpers/files.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,sBAe/B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,aACZ,MAAM,aACN,MAAM,YACP,MAAM,KACd,OAAO,CAAC,OAAO,CAqCjB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seedprotocol/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.121",
|
|
4
4
|
"description": "The SDK for Seed Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/types/src/index.d.ts",
|
|
@@ -51,8 +51,6 @@
|
|
|
51
51
|
"@zenfs/core": "^1.6.8",
|
|
52
52
|
"@zenfs/dom": "1.1.0",
|
|
53
53
|
"arweave": "^1.15.5",
|
|
54
|
-
"async": "^3.2.6",
|
|
55
|
-
"async-es": "^3.2.6",
|
|
56
54
|
"better-sqlite3": "^11.7.0",
|
|
57
55
|
"crypto-browserify": "^3.12.1",
|
|
58
56
|
"dayjs": "^1.11.13",
|
|
@@ -111,7 +109,6 @@
|
|
|
111
109
|
"@testing-library/dom": "^10.4.0",
|
|
112
110
|
"@testing-library/react": "^16.1.0",
|
|
113
111
|
"@testing-library/react-hooks": "^8.0.1",
|
|
114
|
-
"@types/async": "^3.2.24",
|
|
115
112
|
"@types/better-sqlite3": "^7.6.12",
|
|
116
113
|
"@types/debug": "^4.1.12",
|
|
117
114
|
"@types/express": "^5.0.0",
|