@seedprotocol/sdk 0.1.117 → 0.1.119

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,6 +1,5 @@
1
- export { g as GET_ALL_PROPERTIES_FOR_ALL_VERSIONS, f as GET_PROPERTIES, G as GET_SCHEMAS, a as GET_SCHEMA_BY_NAME, b as GET_SEEDS, c as GET_SEED_IDS, d as GET_STORAGE_TRANSACTION_ID, e as GET_VERSIONS, I as Item, h as itemMachineAll, i as itemMachineSingle } from './index-Dd6tPdUt.js';
1
+ export { g as GET_ALL_PROPERTIES_FOR_ALL_VERSIONS, f as GET_PROPERTIES, G as GET_SCHEMAS, a as GET_SCHEMA_BY_NAME, b as GET_SEEDS, c as GET_SEED_IDS, d as GET_STORAGE_TRANSACTION_ID, e as GET_VERSIONS, I as Item, h as itemMachineAll, i as itemMachineSingle } from './index-D9hBdVBw.js';
2
2
  import 'tslib';
3
- import 'path';
4
3
  import 'reflect-metadata';
5
4
  import '@sinclair/typebox';
6
5
  import 'xstate';
@@ -16,6 +15,7 @@ import '@tanstack/react-query';
16
15
  import 'graphql-request';
17
16
  import '@tanstack/query-sync-storage-persister';
18
17
  import '@tanstack/react-query-persist-client';
18
+ import 'path';
19
19
  import 'use-immer';
20
20
  import '@xstate/react';
21
21
  import 'eventemitter3';
@@ -28,8 +28,9 @@ import 'drizzle-orm/sqlite-proxy';
28
28
  import 'drizzle-orm/sqlite-proxy/migrator';
29
29
  import 'drizzle-orm/migrator';
30
30
  import '@zenfs/dom';
31
+ import 'node:fs';
31
32
  import 'arweave';
32
33
  import './constants-B6s6tGup.js';
33
34
  import '@ethereum-attestation-service/eas-sdk';
34
35
  import 'thirdweb';
35
- //# sourceMappingURL=index-Dwb6l5UL.js.map
36
+ //# sourceMappingURL=index-PI7JgtNo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-PI7JgtNo.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/main.js CHANGED
@@ -1,11 +1,10 @@
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-Dd6tPdUt.js';
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-D9hBdVBw.js';
2
2
  import 'immer';
3
3
  import 'reflect-metadata';
4
4
  import 'tslib';
5
5
  import 'xstate';
6
6
  import 'arweave';
7
7
  import 'drizzle-orm';
8
- import 'path';
9
8
  import '@sinclair/typebox';
10
9
  import '@zenfs/core';
11
10
  import 'dayjs';
@@ -18,6 +17,7 @@ import '@tanstack/react-query';
18
17
  import 'graphql-request';
19
18
  import '@tanstack/query-sync-storage-persister';
20
19
  import '@tanstack/react-query-persist-client';
20
+ import 'path';
21
21
  import 'use-immer';
22
22
  import '@xstate/react';
23
23
  import 'eventemitter3';
@@ -29,6 +29,7 @@ import 'drizzle-orm/sqlite-proxy';
29
29
  import 'drizzle-orm/sqlite-proxy/migrator';
30
30
  import 'drizzle-orm/migrator';
31
31
  import '@zenfs/dom';
32
+ import 'node:fs';
32
33
  import './constants-B6s6tGup.js';
33
34
  import '@ethereum-attestation-service/eas-sdk';
34
35
  import 'thirdweb';
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,13 +1,12 @@
1
1
  import { __decorate, __metadata } from 'tslib';
2
2
  import 'drizzle-orm';
3
- import { T as Text, M as Model } from './index-Dd6tPdUt.js';
3
+ import { T as Text, M as Model } from './index-D9hBdVBw.js';
4
4
  import 'react';
5
5
  import 'reflect-metadata';
6
6
  import 'xstate';
7
7
  import 'arweave';
8
8
  import '@zenfs/core';
9
9
  import '@zenfs/dom';
10
- import 'path';
11
10
  import '@sinclair/typebox';
12
11
  import 'dayjs';
13
12
  import 'nanoid';
@@ -18,6 +17,7 @@ import '@tanstack/react-query';
18
17
  import 'graphql-request';
19
18
  import '@tanstack/query-sync-storage-persister';
20
19
  import '@tanstack/react-query-persist-client';
20
+ import 'path';
21
21
  import 'use-immer';
22
22
  import '@xstate/react';
23
23
  import 'eventemitter3';
@@ -29,6 +29,7 @@ import 'rxjs';
29
29
  import 'drizzle-orm/sqlite-proxy';
30
30
  import 'drizzle-orm/sqlite-proxy/migrator';
31
31
  import 'drizzle-orm/migrator';
32
+ import 'node:fs';
32
33
  import './constants-B6s6tGup.js';
33
34
  import '@ethereum-attestation-service/eas-sdk';
34
35
  import 'thirdweb';
@@ -79,4 +80,4 @@ const models = {
79
80
  };
80
81
 
81
82
  export { models };
82
- //# sourceMappingURL=seed.schema.config-CPGWVSWI.js.map
83
+ //# sourceMappingURL=seed.schema.config-DcbShLHu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.schema.config-DcbShLHu.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;;;;;"}
@@ -1,10 +1,292 @@
1
1
  import { EventObject, fromCallback } from 'xstate'
2
- import { uploadMachine } from '@/browser/schema/file/upload/index'
2
+ import { fetchAllFilesMachine } from '@/browser/schema/file/fetchAll/index'
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'
3
17
 
4
- export const uploadBinaryData = fromCallback<EventObject, typeof uploadMachine>(
5
- ({ sendBack, receive, input }) => {},
6
- )
18
+ import { saveAppState } from '@/browser/db/write/saveAppState'
7
19
 
8
- export const uploadMetadata = fromCallback<EventObject, typeof uploadMachine>(
9
- ({ sendBack, receive, input }) => {},
10
- )
20
+ const logger = debug('app:file:actors:fetchAll')
21
+
22
+ type FileType = {
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
+ })
package/dist/src/files.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import { fs } from '@zenfs/core'
2
+ import retry from 'async-es/retry'
3
+
1
4
  export const listFilesInOPFSRoot = async () => {
2
5
  // Get the root directory handle
3
6
  const rootDirHandle = await navigator.storage.getDirectory()
@@ -14,3 +17,43 @@ export const listFilesInOPFSRoot = async () => {
14
17
 
15
18
  return fileNames
16
19
  }
20
+
21
+ /**
22
+ * Waits for a file to exist at the specified path.
23
+ * @param {string} filePath - The path of the file to check.
24
+ * @param {number} interval - The interval in milliseconds between checks (default: 500ms).
25
+ * @param {number} timeout - The maximum time in milliseconds to wait (default: 10000ms).
26
+ * @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.
27
+ */
28
+ export const waitForFile = (
29
+ filePath: string,
30
+ interval = 500,
31
+ timeout = 10000,
32
+ ) => {
33
+ return new Promise((resolve, reject) => {
34
+ const startTime = Date.now()
35
+
36
+ retry(
37
+ {
38
+ times: Math.ceil(timeout / interval),
39
+ interval: interval,
40
+ errorFilter: () => !fs.existsSync(filePath), // Retry only if file does not exist
41
+ },
42
+ (callback) => {
43
+ if (fs.existsSync(filePath)) {
44
+ return callback(null, true) // File exists, finish with success
45
+ }
46
+ if (Date.now() - startTime >= timeout) {
47
+ return callback(new Error('Timeout exceeded while waiting for file'))
48
+ }
49
+ callback(new Error('File does not exist yet')) // Retry with this error
50
+ },
51
+ (err, result) => {
52
+ if (err) {
53
+ return resolve(false) // Resolve as false if timeout or error occurs
54
+ }
55
+ resolve(result) // Resolve as true if file exists
56
+ },
57
+ )
58
+ })
59
+ }
package/dist/src/index.ts CHANGED
@@ -1,4 +1,73 @@
1
- export * from './analyzeInput'
2
- export * from './saveImageSrc'
3
- export * from './saveRelation'
4
- export * from './saveItemStorage'
1
+ import { assign, setup } from 'xstate'
2
+ import {
3
+ fetchAllBinaryData,
4
+ fetchAllMetadataRecords,
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
+ })
@@ -7,10 +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 { fs } from '@zenfs/core'
10
+ import { configureSingle, 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
+ import * as fsNode from 'node:fs'
14
16
 
15
17
  const logger = debug('app:services:db:actors:migrate')
16
18
 
@@ -81,6 +83,7 @@ export const dbExec = async (dbId, params, sql, dbName, retries = 2) => {
81
83
 
82
84
  return rowsToReturn || []
83
85
  }
86
+
84
87
  export const migrate = fromCallback<
85
88
  EventObject,
86
89
  FromCallbackInput<DbServiceContext>
@@ -105,12 +108,30 @@ export const migrate = fromCallback<
105
108
  // _initFs()
106
109
 
107
110
  const _checkForFiles = async (): Promise<void> => {
108
- journalExists = await fs.promises.exists(
109
- `/${pathToDbDir}/meta/_journal.json`,
110
- )
111
+ const journalPath = `/${pathToDbDir}/meta/_journal.json`
112
+
113
+ journalExists = await fs.promises.exists(journalPath)
114
+
115
+ const journalExistsAsync = journalExists
116
+
117
+ const journalExistsSync = fs.existsSync(journalPath)
118
+
119
+ const journalExistsSyncNode = fsNode.existsSync(journalPath)
120
+
121
+ console.log('journalExistsAsync', journalExistsAsync)
122
+ console.log('journalExistsSync', journalExistsSync)
123
+ console.log('journalExistsSyncNode', journalExistsSyncNode)
111
124
 
112
125
  if (!journalExists) {
113
- window.location.reload()
126
+ const handle = await navigator.storage.getDirectory()
127
+
128
+ await configureSingle({
129
+ backend: WebAccess,
130
+ handle,
131
+ })
132
+
133
+ // window.location.reload()
134
+
114
135
  // setTimeout(() => {
115
136
  // _checkForFiles().then(() => {
116
137
  // return
@@ -206,8 +227,16 @@ export const migrate = fromCallback<
206
227
  },
207
228
  )
208
229
  } catch (error) {
209
- console.error('Error migrating database: ', error)
210
- window.location.reload()
230
+ // console.error('Error migrating database: ', error)
231
+ // window.location.reload()
232
+ const handle = await navigator.storage.getDirectory()
233
+
234
+ await configureSingle({
235
+ backend: WebAccess,
236
+ handle,
237
+ })
238
+
239
+ return _migrate()
211
240
  }
212
241
 
213
242
  setAppDb(drizzleDb)
@@ -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;AAe/E,eAAO,MAAM,MAAM,kFAkElB,CAAA;AACD,eAAO,MAAM,OAAO,oGAuMlB,CAAA"}
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,oGAiOlB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/node/webpack/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,WAAY,GAAG,WAAW,GAAG,YAAY,OAAO,QAqEpE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/node/webpack/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,WAAY,GAAG,WAAW,GAAG,YAAY,OAAO,QA0EpE,CAAA"}
@@ -1,2 +1,10 @@
1
1
  export declare const listFilesInOPFSRoot: () => Promise<any[]>;
2
+ /**
3
+ * Waits for a file to exist at the specified path.
4
+ * @param {string} filePath - The path of the file to check.
5
+ * @param {number} interval - The interval in milliseconds between checks (default: 500ms).
6
+ * @param {number} timeout - The maximum time in milliseconds to wait (default: 10000ms).
7
+ * @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.
8
+ */
9
+ export declare const waitForFile: (filePath: string, interval?: number, timeout?: number) => Promise<unknown>;
2
10
  //# sourceMappingURL=files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/shared/helpers/files.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,sBAe/B,CAAA"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/shared/helpers/files.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,sBAe/B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,aACZ,MAAM,0DA8BjB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedprotocol/sdk",
3
- "version": "0.1.117",
3
+ "version": "0.1.119",
4
4
  "description": "The SDK for Seed Protocol",
5
5
  "type": "module",
6
6
  "types": "./dist/types/src/index.d.ts",