@seedprotocol/sdk 0.4.4 → 0.4.5
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/README.md +38 -348
- package/dist/{ArweaveClient-DkNLWiSZ.js → ArweaveClient-CgWK-JgT.js} +8 -8
- package/dist/{ArweaveClient-DkNLWiSZ.js.map → ArweaveClient-CgWK-JgT.js.map} +1 -1
- package/dist/{ArweaveClient-CczHvccG.js → ArweaveClient-WcG8CZAE.js} +8 -8
- package/dist/{ArweaveClient-CczHvccG.js.map → ArweaveClient-WcG8CZAE.js.map} +1 -1
- package/dist/{Db-DJvjXVlp.js → Db-DjFdIdR9.js} +9 -9
- package/dist/{Db-DJvjXVlp.js.map → Db-DjFdIdR9.js.map} +1 -1
- package/dist/{Db-BzQR2KX9.js → Db-DjofXdeU.js} +9 -9
- package/dist/{Db-BzQR2KX9.js.map → Db-DjofXdeU.js.map} +1 -1
- package/dist/{EasClient-CHQYmjj2.js → EasClient-Aojewp6P.js} +8 -8
- package/dist/{EasClient-CodrIgW-.js.map → EasClient-Aojewp6P.js.map} +1 -1
- package/dist/{EasClient-CodrIgW-.js → EasClient-BVFXp2O6.js} +8 -8
- package/dist/{EasClient-CHQYmjj2.js.map → EasClient-BVFXp2O6.js.map} +1 -1
- package/dist/{FileManager-BbvkZJCH.js → FileManager-C9zr4AJe.js} +8 -8
- package/dist/{FileManager-BbvkZJCH.js.map → FileManager-C9zr4AJe.js.map} +1 -1
- package/dist/{FileManager-BIVsDnMu.js → FileManager-CxGJLw5C.js} +8 -8
- package/dist/{FileManager-BIVsDnMu.js.map → FileManager-CxGJLw5C.js.map} +1 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/ItemProperty/ItemProperty.d.ts.map +1 -1
- package/dist/Model/Model.d.ts.map +1 -1
- package/dist/ModelProperty/ModelProperty.d.ts.map +1 -1
- package/dist/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +1 -1
- package/dist/ModelProperty/service/actors/saveToSchema.d.ts.map +1 -1
- package/dist/{ModelProperty-gjcA83Mq.js → ModelProperty-CGdkocQ8.js} +31 -766
- package/dist/ModelProperty-CGdkocQ8.js.map +1 -0
- package/dist/{PathResolver-kGzba-zC.js → PathResolver-CX6GHoTS.js} +8 -8
- package/dist/{PathResolver-kGzba-zC.js.map → PathResolver-CX6GHoTS.js.map} +1 -1
- package/dist/{PathResolver-9zAzPhee.js → PathResolver-z_WX47_o.js} +8 -8
- package/dist/{PathResolver-9zAzPhee.js.map → PathResolver-z_WX47_o.js.map} +1 -1
- package/dist/{QueryClient-C7ZkTT0z.js → QueryClient-ByKPdRmE.js} +8 -8
- package/dist/{QueryClient-C7ZkTT0z.js.map → QueryClient-ByKPdRmE.js.map} +1 -1
- package/dist/{QueryClient-CEtsek7Q.js → QueryClient-Cb1iJO-x.js} +8 -8
- package/dist/{QueryClient-CEtsek7Q.js.map → QueryClient-Cb1iJO-x.js.map} +1 -1
- package/dist/Schema/Schema.d.ts.map +1 -1
- package/dist/Schema/service/actors/writePropertiesToDb.d.ts.map +1 -1
- package/dist/Schema/service/addModelsMachine.d.ts.map +1 -1
- package/dist/{Schema-ClTcpgbt.js → Schema-D1eqDHyt.js} +758 -60
- package/dist/Schema-D1eqDHyt.js.map +1 -0
- package/dist/{SchemaValidationService-BfoEiHNr.js → SchemaValidationService-DyttFaV_.js} +7 -7
- package/dist/{SchemaValidationService-BfoEiHNr.js.map → SchemaValidationService-DyttFaV_.js.map} +1 -1
- package/dist/cjs/{ModelProperty-BRKRREYP.js → ModelProperty-BeJvgKMw.js} +62 -436
- package/dist/cjs/ModelProperty-BeJvgKMw.js.map +1 -0
- package/dist/cjs/{Schema-CV9hMg8m.js → Schema-CVs9J6eP.js} +426 -91
- package/dist/cjs/Schema-CVs9J6eP.js.map +1 -0
- package/dist/cjs/{SchemaValidationService-DUtQUerg.js → SchemaValidationService-CDKcVRFQ.js} +3 -3
- package/dist/cjs/{SchemaValidationService-DUtQUerg.js.map → SchemaValidationService-CDKcVRFQ.js.map} +1 -1
- package/dist/cjs/{getItem-BThT-UOt.js → getItem-B5RYPvrG.js} +3 -3
- package/dist/cjs/{getItem-BThT-UOt.js.map → getItem-B5RYPvrG.js.map} +1 -1
- package/dist/cjs/{getPublishPayload-CKZ7rVbU.js → getPublishPayload-BD1qRob1.js} +6 -6
- package/dist/cjs/getPublishPayload-BD1qRob1.js.map +1 -0
- package/dist/cjs/{getPublishUploads-CuGIvV-Q.js → getPublishUploads-CnC9aYxs.js} +4 -4
- package/dist/cjs/{getPublishUploads-CuGIvV-Q.js.map → getPublishUploads-CnC9aYxs.js.map} +1 -1
- package/dist/cjs/{getSegmentedItemProperties-BCJXJlTR.js → getSegmentedItemProperties-B_njnntx.js} +2 -2
- package/dist/cjs/{getSegmentedItemProperties-BCJXJlTR.js.map → getSegmentedItemProperties-B_njnntx.js.map} +1 -1
- package/dist/cjs/{index-C3j3m34a.js → index-BeKPbbk0.js} +11466 -11546
- package/dist/cjs/index-BeKPbbk0.js.map +1 -0
- package/dist/cjs/{index-CbTBDqTJ.js → index-Dnywap_P.js} +3 -3
- package/dist/cjs/index-Dnywap_P.js.map +1 -0
- package/dist/client/actors/platformClassesInit.d.ts.map +1 -1
- package/dist/client/actors/saveAppState.d.ts.map +1 -1
- package/dist/eas.d.ts.map +1 -1
- package/dist/{getItem-BWPo8wd0.js → getItem-BB5HBCbK.js} +8 -8
- package/dist/{getItem-BWPo8wd0.js.map → getItem-BB5HBCbK.js.map} +1 -1
- package/dist/{getPublishPayload-Caw2laZM.js → getPublishPayload-uLm0AqN_.js} +10 -10
- package/dist/getPublishPayload-uLm0AqN_.js.map +1 -0
- package/dist/{getPublishUploads-MlyBuoXh.js → getPublishUploads-Dc-HqhO8.js} +9 -9
- package/dist/{getPublishUploads-MlyBuoXh.js.map → getPublishUploads-Dc-HqhO8.js.map} +1 -1
- package/dist/{getSegmentedItemProperties-COLLdDo4.js → getSegmentedItemProperties-BrIqFNfD.js} +2 -2
- package/dist/{getSegmentedItemProperties-COLLdDo4.js.map → getSegmentedItemProperties-BrIqFNfD.js.map} +1 -1
- package/dist/helpers/schema.d.ts.map +1 -1
- package/dist/helpers/updateSchema.d.ts.map +1 -1
- package/dist/imports/json.d.ts.map +1 -1
- package/dist/{index-D2OGsG4v.js → index-2FcQHgKp.js} +2 -2
- package/dist/index-2FcQHgKp.js.map +1 -0
- package/dist/{ClientManager-DoHUt8tU.js → index-DPll6EAp.js} +11460 -11538
- package/dist/index-DPll6EAp.js.map +1 -0
- package/dist/{index-B9i_mXXp.js → index-LEY0Og1p.js} +9 -9
- package/dist/index-LEY0Og1p.js.map +1 -0
- package/dist/main.cjs +2 -2
- package/dist/main.js +13 -13
- package/dist/main.js.map +1 -1
- package/dist/node.js +15 -15
- package/dist/{property-fK7tSUDX.js → property-B15X7jLX.js} +4 -4
- package/dist/property-B15X7jLX.js.map +1 -0
- package/dist/{queries-DGOk16cd.js → queries-BPDSpiEX.js} +2 -2
- package/dist/{queries-DGOk16cd.js.map → queries-BPDSpiEX.js.map} +1 -1
- package/dist/services/write/actors/writeToDatabase.d.ts.map +1 -1
- package/package.json +6 -2
- package/dist/ClientManager-DoHUt8tU.js.map +0 -1
- package/dist/ModelProperty-gjcA83Mq.js.map +0 -1
- package/dist/Schema-ClTcpgbt.js.map +0 -1
- package/dist/cjs/ModelProperty-BRKRREYP.js.map +0 -1
- package/dist/cjs/Schema-CV9hMg8m.js.map +0 -1
- package/dist/cjs/getPublishPayload-CKZ7rVbU.js.map +0 -1
- package/dist/cjs/index-C3j3m34a.js.map +0 -1
- package/dist/cjs/index-CbTBDqTJ.js.map +0 -1
- package/dist/getPublishPayload-Caw2laZM.js.map +0 -1
- package/dist/index-B9i_mXXp.js.map +0 -1
- package/dist/index-D2OGsG4v.js.map +0 -1
- package/dist/property-fK7tSUDX.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,377 +1,67 @@
|
|
|
1
1
|
# Seed Protocol SDK
|
|
2
2
|
|
|
3
|
-
The official SDK for [Seed Protocol](https://seedprotocol.io
|
|
3
|
+
The official JavaScript/TypeScript SDK for [Seed Protocol](https://seedprotocol.io)—a local-first, decentralized data layer.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
user data
|
|
7
|
-
is fetched from, or written to, the Ethereum Attestation Service (EAS) and Arweave (More attestation services
|
|
8
|
-
and decentralized storage providers will be supported in the future).
|
|
5
|
+
**[→ Full documentation at seedprotocol.io](https://seedprotocol.io)**
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
The hope is that this local-first and distributed approach will make it easier for developers to build apps with Seed
|
|
13
|
-
Protocol
|
|
14
|
-
without ever custodying user data on their own infrastructure.
|
|
15
|
-
|
|
16
|
-
The SDK is currently used and developed by [PermaPress](https://permapress.xyz), the first client for Seed Protocol.
|
|
17
|
-
PermaPress is a product developed by JournoLabs (formerly JournoDAO).
|
|
18
|
-
|
|
19
|
-
## Installing
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
npm install @seedprotocol/sdk
|
|
23
|
-
# or
|
|
24
|
-
pnpm add @seedprotocol/sdk
|
|
25
|
-
# or
|
|
26
|
-
bun add @seedprotocol/sdk
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Module System Support
|
|
30
|
-
|
|
31
|
-
The SDK supports both ESM and CommonJS module systems:
|
|
32
|
-
|
|
33
|
-
**ESM (Recommended):**
|
|
34
|
-
```javascript
|
|
35
|
-
import { Model, Property, Item } from '@seedprotocol/sdk'
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**CommonJS:**
|
|
39
|
-
```javascript
|
|
40
|
-
const { Model, Property, Item } = require('@seedprotocol/sdk')
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Getting Started
|
|
44
|
-
|
|
45
|
-
The first thing to do when integrating Seed SDK is define your data model by creating a configuration file in the root
|
|
46
|
-
of your project. The SDK supports the following file names (in order of preference):
|
|
47
|
-
|
|
48
|
-
- `seed.config.ts` (recommended)
|
|
49
|
-
- `seed.schema.ts`
|
|
50
|
-
- `schema.ts` (legacy)
|
|
51
|
-
|
|
52
|
-
As an example, here's the actual data model for PermaPress using `seed.config.ts`:
|
|
53
|
-
|
|
54
|
-
```typescript
|
|
55
|
-
import { ImageSrc, List, Model, Relation, Text } from '@/browser/schema'
|
|
56
|
-
|
|
57
|
-
@Model
|
|
58
|
-
class Image {
|
|
59
|
-
@Text() storageTransactionId!: string
|
|
60
|
-
@Text() uri!: string
|
|
61
|
-
@Text() alt!: string
|
|
62
|
-
@ImageSrc() src!: string
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@Model
|
|
66
|
-
class Post {
|
|
67
|
-
@Text() title!: string
|
|
68
|
-
@Text() summary!: string
|
|
69
|
-
@Relation('Image', 'ImageSrc') featureImage!: string
|
|
70
|
-
@Text('ItemStorage', '/html', '.html') html!: string
|
|
71
|
-
@Text('ItemStorage', '/json', '.json') json!: string
|
|
72
|
-
@Text() storageTransactionId!: string
|
|
73
|
-
@List('Identity') authors!: string[]
|
|
74
|
-
@Text() importUrl!: string
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
@Model
|
|
78
|
-
class Identity {
|
|
79
|
-
@Text() name!: string
|
|
80
|
-
@Text() profile!: string
|
|
81
|
-
@Text() displayName!: string
|
|
82
|
-
@Relation('Image', 'ImageSrc') avatarImage!: string
|
|
83
|
-
@Relation('Image', 'ImageSrc') coverImage!: string
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
@Model
|
|
87
|
-
class Link {
|
|
88
|
-
@Text() url!: string
|
|
89
|
-
@Text() text!: string
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const models = {
|
|
93
|
-
Identity,
|
|
94
|
-
Image,
|
|
95
|
-
Link,
|
|
96
|
-
Post,
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const endpoints = {
|
|
100
|
-
filePaths: '/api/seed/migrations',
|
|
101
|
-
files: '/app-files',
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export { models, endpoints }
|
|
105
|
-
|
|
106
|
-
export default { models, endpoints }
|
|
107
|
-
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
This will create a database locally in the browser with all the tables and fields necessary to support your Models.
|
|
111
|
-
|
|
112
|
-
> [!NOTE]
|
|
113
|
-
> The database is a SQLite file stored
|
|
114
|
-
> in [OPFS](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system).
|
|
115
|
-
> We recommend using
|
|
116
|
-
> the [OPFS Explorer](https://chromewebstore.google.com/detail/opfs-explorer/acndjpgkpaclldomagafnognkcgjignd)
|
|
117
|
-
> browser extension to see the files managed by the SDK.
|
|
118
|
-
|
|
119
|
-
Notice that we create relationships by defining a `Property` that takes its related `Model` as its type. For one-to-many
|
|
120
|
-
relationships, we use the `List` type and pass in the `Model` type we want.
|
|
121
|
-
|
|
122
|
-
So creating a Post would look like this:
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
import { Post, Image, Identity } from './seed/models'
|
|
126
|
-
import html from './index.html'
|
|
127
|
-
|
|
128
|
-
const image = await Image.create({
|
|
129
|
-
src: 'https://imgr.com/image.jpg',
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
const author = await Identity.create({
|
|
133
|
-
name: 'Keith Axline',
|
|
134
|
-
profile: 'Developer for Seed Protocol',
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
const authors = [
|
|
138
|
-
author
|
|
139
|
-
]
|
|
140
|
-
|
|
141
|
-
const post = await Post.create({
|
|
142
|
-
title: 'Some title',
|
|
143
|
-
summary: 'My summary',
|
|
144
|
-
featureImage: image,
|
|
145
|
-
authors,
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
await post.publish()
|
|
149
|
-
|
|
150
|
-
// And later when we want to update the post
|
|
151
|
-
post.title = 'Something else'
|
|
152
|
-
|
|
153
|
-
await post.publish()
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Usage
|
|
158
|
-
|
|
159
|
-
### `Item`
|
|
160
|
-
|
|
161
|
-
Create
|
|
162
|
-
|
|
163
|
-
```typescript
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Files
|
|
168
|
-
|
|
169
|
-
Subscribe to events:
|
|
170
|
-
|
|
171
|
-
```typescript
|
|
172
|
-
import { SeedFile } from '@seedprotocol/sdk'
|
|
7
|
+
---
|
|
173
8
|
|
|
174
|
-
|
|
9
|
+
## What it does
|
|
175
10
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
11
|
+
- **Local-first ORM** — Define models and properties; the SDK stores data in SQLite and OPFS in the user’s browser.
|
|
12
|
+
- **Decentralized sync** — Data is read from and written to the [Ethereum Attestation Service (EAS)](https://attest.sh) and [Arweave](https://www.arweave.org). No backend for you to run or maintain.
|
|
13
|
+
- **No custody** — User data stays on public infrastructure and in the user’s browser, not on your servers.
|
|
179
14
|
|
|
180
|
-
|
|
15
|
+
Built and used by [PermaPress](https://permapress.xyz), the first client for Seed Protocol (by [JournoLabs](https://journolabs.xyz)).
|
|
181
16
|
|
|
182
|
-
|
|
17
|
+
## Documentation
|
|
183
18
|
|
|
184
|
-
|
|
19
|
+
For setup, schema definition, models, items, files, and React integration, see:
|
|
185
20
|
|
|
186
|
-
|
|
187
|
-
const fileFromPath = new SeedFile('path/to/file.txt')
|
|
21
|
+
**https://seedprotocol.io**
|
|
188
22
|
|
|
189
|
-
|
|
23
|
+
## Requirements
|
|
190
24
|
|
|
191
|
-
|
|
25
|
+
- **Node.js** `>= 20` and `<= 24`
|
|
26
|
+
- **Browser** support: modern browsers with OPFS (e.g. Chromium-based, recent Firefox)
|
|
192
27
|
|
|
193
|
-
|
|
28
|
+
## Installation
|
|
194
29
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
30
|
+
```bash
|
|
31
|
+
bun add @seedprotocol/sdk
|
|
32
|
+
# or
|
|
33
|
+
npm install @seedprotocol/sdk
|
|
34
|
+
# or
|
|
35
|
+
pnpm add @seedprotocol/sdk
|
|
198
36
|
```
|
|
199
37
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
```typescript
|
|
203
|
-
import { SeedFileSystem } from '@seedprotocol/sdk'
|
|
204
|
-
|
|
205
|
-
const fs = new SeedFileSystem()
|
|
206
|
-
|
|
207
|
-
fs.subscribe(( event, status ) => {
|
|
208
|
-
console.log(`Event: ${event}, Status: ${status}`)
|
|
209
|
-
if ( event === 'connection.success' && status === 'connected' ) {
|
|
210
|
-
console.log('Connected to user\'s file system')
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
if ( event === 'connection.error' ) {
|
|
214
|
-
console.error('Error connecting to user\'s file system', event.error)
|
|
215
|
-
}
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
await fs.connect() // User prompted to connect browser wallet
|
|
219
|
-
|
|
220
|
-
const files = await fs.listFiles('/')
|
|
221
|
-
|
|
222
|
-
files.forEach(file => {
|
|
223
|
-
console.log(file.name)
|
|
224
|
-
console.log(file.size)
|
|
225
|
-
console.log(file.seedPath) // Each wallet address has a virtual root directory with directories and file system paths
|
|
226
|
-
})
|
|
38
|
+
**Optional (React):** If you use React hooks (`useModel`, `useSchema`, etc.), install peer dependencies:
|
|
227
39
|
|
|
40
|
+
```bash
|
|
41
|
+
bun add react @tanstack/react-query
|
|
228
42
|
```
|
|
229
43
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
```typescript
|
|
44
|
+
## Quick start
|
|
233
45
|
|
|
234
|
-
|
|
46
|
+
1. **Define your schema** in a config file at the project root: `seed.config.ts` (recommended), `seed.schema.ts`, or `schema.ts`.
|
|
235
47
|
|
|
236
|
-
|
|
48
|
+
2. **Use the SDK** in your app:
|
|
237
49
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
await imgFromUrl.save()
|
|
241
|
-
|
|
242
|
-
const imgBlob = imgFromUrl.blob()
|
|
243
|
-
const imgBuffer = imgFromUrl.buffer()
|
|
244
|
-
const imgDataUrl = imgFromUrl.dataUrl()
|
|
50
|
+
```ts
|
|
51
|
+
import { Model, Property, Item } from '@seedprotocol/sdk'
|
|
245
52
|
|
|
53
|
+
// Define models in your schema; then create and publish items:
|
|
54
|
+
const post = await Post.create({ title: 'Hello', summary: '...', ... })
|
|
55
|
+
await post.publish()
|
|
246
56
|
```
|
|
247
57
|
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
Title: Seed Protocol SDK
|
|
251
|
-
---
|
|
252
|
-
%%{
|
|
253
|
-
init: {
|
|
254
|
-
'theme': 'base',
|
|
255
|
-
'themeVariables': {
|
|
256
|
-
'primaryColor': '#e0f2fe',
|
|
257
|
-
'primaryTextColor': '#0c4a6e',
|
|
258
|
-
'primaryBorderColor': '#38bdf8',
|
|
259
|
-
'lineColor': '#475569',
|
|
260
|
-
'secondaryColor': '#d9f99d',
|
|
261
|
-
'tertiaryColor': '#fff',
|
|
262
|
-
'tertiaryBorderColor': '#7e22ce',
|
|
263
|
-
'tertiaryTextColor': '#7e22ce',
|
|
264
|
-
'clusterBkg': '#fff'
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
}%%
|
|
268
|
-
flowchart TD
|
|
269
|
-
A{Developer}
|
|
270
|
-
B{User}
|
|
271
|
-
C{Seed Dev}
|
|
272
|
-
N{SDK}
|
|
273
|
-
Q[App Code]
|
|
274
|
-
D[(sdk_config_db)]
|
|
275
|
-
E[(seed)]
|
|
276
|
-
L[(seeds_db)]
|
|
277
|
-
G[Schema/Migration files
|
|
278
|
-
browser/db/seedSchema]
|
|
279
|
-
H[Schema/Migration files
|
|
280
|
-
.seed/schema]
|
|
281
|
-
R[Schema/Migration files
|
|
282
|
-
node/db/sdkSchema]
|
|
283
|
-
|
|
284
|
-
I[browser.seed.db.config.mjs]
|
|
285
|
-
J[sdk.db.config.mjs]
|
|
286
|
-
|
|
287
|
-
O[files.json
|
|
288
|
-
seed/endpoint/list]
|
|
289
|
-
P[Files
|
|
290
|
-
seed/endpoint/files]
|
|
291
|
-
|
|
292
|
-
S[$> seed init]
|
|
293
|
-
T[scripts/bin]
|
|
58
|
+
For full guides on schema, models, properties, items, files, and the CLI, see **[the docs](https://seedprotocol.io)**.
|
|
294
59
|
|
|
295
|
-
|
|
296
|
-
C--changes Seeds or Versions --> I
|
|
297
|
-
C-- changes Models or Properties --> J
|
|
298
|
-
J-- generates -->R
|
|
299
|
-
I-- generates --> G
|
|
300
|
-
subgraph Package Bundle
|
|
301
|
-
R
|
|
302
|
-
G
|
|
303
|
-
end
|
|
304
|
-
end
|
|
60
|
+
## Module support
|
|
305
61
|
|
|
62
|
+
- **ESM** (recommended): `import { Model, Property, Item } from '@seedprotocol/sdk'`
|
|
63
|
+
- **CommonJS**: `const { Model, Property, Item } = require('@seedprotocol/sdk')`
|
|
306
64
|
|
|
65
|
+
## License
|
|
307
66
|
|
|
308
|
-
|
|
309
|
-
A-- adds Models and Properties --> K
|
|
310
|
-
subgraph SDK
|
|
311
|
-
D
|
|
312
|
-
H
|
|
313
|
-
end
|
|
314
|
-
A-- runs --> S
|
|
315
|
-
S-- calls --> T
|
|
316
|
-
T-- reads--> K
|
|
317
|
-
T-- generates --> D
|
|
318
|
-
T-- generates --> H
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
subgraph App Server
|
|
322
|
-
H-- served at endpoint --> O
|
|
323
|
-
H-- served at endpoint --> P
|
|
324
|
-
end
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
subgraph Browser
|
|
329
|
-
B-- adds data--> Q
|
|
330
|
-
subgraph App
|
|
331
|
-
Q-- calls SDK--> N
|
|
332
|
-
subgraph SDK
|
|
333
|
-
E-- notifies -->N
|
|
334
|
-
N<-- files . json --> O
|
|
335
|
-
N<-- files --> P
|
|
336
|
-
N-- updates -->E
|
|
337
|
-
N-- updates --> L
|
|
338
|
-
|
|
339
|
-
end
|
|
340
|
-
end
|
|
341
|
-
end
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
A[Versions From EAS]
|
|
347
|
-
B[Seeds From EAS]
|
|
348
|
-
C[List of Items]
|
|
349
|
-
D[List of Properties]
|
|
350
|
-
E{Property Machine}
|
|
351
|
-
F{Item Machine}
|
|
352
|
-
G{Items Machine}
|
|
353
|
-
|
|
354
|
-
```mermaid
|
|
355
|
-
sequenceDiagram
|
|
356
|
-
Items Service ->>+ EAS: Seeds Request
|
|
357
|
-
EAS -->>+ Items Service: Seed Attestations
|
|
358
|
-
loop Each Seed Attestation
|
|
359
|
-
Items Service ->>+ Items Service: Extract Seed Uid
|
|
360
|
-
end
|
|
361
|
-
Note over Items Service: Now we have SeedUid[]
|
|
362
|
-
Items Service ->>+ EAS: Versions Request w/ SeedUid[]
|
|
363
|
-
EAS -->>+ Items Service: Version Attestations
|
|
364
|
-
loop Each SeedUid
|
|
365
|
-
Items Service ->>+ Items Service: Sort Version Uids DESC
|
|
366
|
-
end
|
|
367
|
-
loop Each most recent Version for Seed
|
|
368
|
-
Items Service ->>+ Item Service: Create Item
|
|
369
|
-
end
|
|
370
|
-
Note over Items Service: Now we have VersionUid[] for each SeedUid<br />sorted by `createdAt` DESC
|
|
371
|
-
Item Service ->>+ EAS: Properties Request w/ VersionUid[]
|
|
372
|
-
EAS -->>+ Item Service: Properties Attestations
|
|
373
|
-
loop Each Property Attestation
|
|
374
|
-
Item Service ->>+ Property Service: Create Property Service
|
|
375
|
-
end
|
|
376
|
-
Note over Item Service: Now has all Property Services<br />under this._services
|
|
377
|
-
```
|
|
67
|
+
MIT
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { u as BaseArweaveClient } from './index-DPll6EAp.js';
|
|
2
2
|
import { GraphQLClient } from 'graphql-request';
|
|
3
3
|
import Arweave from 'arweave';
|
|
4
|
-
import { G as GET_TRANSACTION_TAGS } from './queries-
|
|
4
|
+
import { G as GET_TRANSACTION_TAGS } from './queries-BPDSpiEX.js';
|
|
5
5
|
import debug from 'debug';
|
|
6
6
|
import 'xstate';
|
|
7
|
+
import 'drizzle-orm/sqlite-core';
|
|
7
8
|
import 'drizzle-orm';
|
|
9
|
+
import 'nanoid';
|
|
10
|
+
import 'nanoid-dictionary';
|
|
8
11
|
import 'pluralize';
|
|
12
|
+
import 'ethers';
|
|
9
13
|
import 'rxjs';
|
|
10
14
|
import 'lodash-es';
|
|
11
15
|
import 'drizzle-orm/casing';
|
|
12
|
-
import '@sinclair/typebox';
|
|
13
16
|
import 'eventemitter3';
|
|
14
|
-
import '
|
|
15
|
-
import 'nanoid';
|
|
16
|
-
import 'nanoid-dictionary';
|
|
17
|
-
import 'ethers';
|
|
17
|
+
import '@sinclair/typebox';
|
|
18
18
|
|
|
19
19
|
const logger = debug("seedSdk:browser:ArweaveClient");
|
|
20
20
|
// Cached Arweave instance
|
|
@@ -199,4 +199,4 @@ class ArweaveClient extends BaseArweaveClient {
|
|
|
199
199
|
BaseArweaveClient.setPlatformClass(ArweaveClient);
|
|
200
200
|
|
|
201
201
|
export { ArweaveClient };
|
|
202
|
-
//# sourceMappingURL=ArweaveClient-
|
|
202
|
+
//# sourceMappingURL=ArweaveClient-CgWK-JgT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArweaveClient-DkNLWiSZ.js","sources":["../src/browser/helpers/ArweaveClient.ts"],"sourcesContent":["import { BaseArweaveClient } from \"@/helpers/ArweaveClient/BaseArweaveClient\";\nimport { GraphQLClient } from \"graphql-request\";\nimport Arweave from \"arweave\";\nimport type {\n TransactionStatus,\n TransactionTag,\n GetDataOptions,\n DownloadFilesParams,\n DownloadResult,\n CreateTransactionOptions,\n} from \"@/types/arweave\";\nimport { GET_TRANSACTION_TAGS } from \"@/helpers/ArweaveClient/queries\";\nimport debug from \"debug\";\n\nconst logger = debug(\"seedSdk:browser:ArweaveClient\");\n\n// Cached Arweave instance\nlet _arweaveInstance: Arweave | null = null;\n\n/**\n * Get or create the Arweave instance for browser\n */\nconst getArweaveInstance = (): Arweave => {\n if (_arweaveInstance) {\n return _arweaveInstance;\n }\n\n const host = BaseArweaveClient.getHost();\n\n // Handle both ES modules and CommonJS exports from arweave package\n if (\"default\" in Arweave && typeof (Arweave as any).default?.init === \"function\") {\n _arweaveInstance = (Arweave as any).default.init({\n host,\n protocol: \"https\",\n });\n } else {\n _arweaveInstance = Arweave.init({\n host,\n protocol: \"https\",\n });\n }\n\n return _arweaveInstance!;\n};\n\nclass ArweaveClient extends BaseArweaveClient {\n /**\n * Get the GraphQL client for Arweave queries\n */\n static getArweaveClient(): GraphQLClient {\n return new GraphQLClient(BaseArweaveClient.getEndpoint());\n }\n\n /**\n * Get the status of a transaction\n */\n static async getTransactionStatus(transactionId: string): Promise<TransactionStatus> {\n const url = BaseArweaveClient.getStatusUrl(transactionId);\n \n try {\n const response = await fetch(url);\n \n if (response.status === 404) {\n return {\n status: 404,\n confirmed: null,\n };\n }\n\n if (!response.ok) {\n return {\n status: response.status,\n confirmed: null,\n };\n }\n\n const data = await response.json();\n return {\n status: 200,\n confirmed: {\n block_height: data.block_height,\n block_indep_hash: data.block_indep_hash,\n number_of_confirmations: data.number_of_confirmations,\n },\n };\n } catch (error) {\n logger(\"Error fetching transaction status:\", error);\n return {\n status: 500,\n confirmed: null,\n };\n }\n }\n\n /**\n * Get transaction data\n */\n static async getTransactionData(\n transactionId: string,\n options?: GetDataOptions\n ): Promise<Uint8Array | string> {\n const arweave = getArweaveInstance();\n\n try {\n const data = await arweave.transactions.getData(transactionId, {\n decode: options?.decode ?? true,\n string: options?.string ?? false,\n });\n\n if (options?.string && typeof data === \"string\") {\n return data;\n }\n\n // Ensure we return Uint8Array\n if (data instanceof Uint8Array) {\n return data;\n }\n\n // Handle string data when not requesting string\n if (typeof data === \"string\") {\n return new TextEncoder().encode(data);\n }\n\n return data as Uint8Array;\n } catch (error) {\n logger(\"Error fetching transaction data:\", error);\n throw error;\n }\n }\n\n /**\n * Get transaction tags via GraphQL\n */\n static async getTransactionTags(transactionId: string): Promise<TransactionTag[]> {\n const client = this.getArweaveClient();\n \n try {\n const result = await client.request(GET_TRANSACTION_TAGS, { transactionId });\n \n if (!result.tags?.tags) {\n return [];\n }\n\n return result.tags.tags.map((tag: { name: string; value: string }) => ({\n name: tag.name,\n value: tag.value,\n }));\n } catch (error) {\n logger(\"Error fetching transaction tags:\", error);\n return [];\n }\n }\n\n /**\n * Create a new unsigned transaction\n */\n static async createTransaction(\n data: string | Uint8Array,\n options?: CreateTransactionOptions\n ): Promise<any> {\n const arweave = getArweaveInstance();\n\n const tx = await arweave.createTransaction({\n data,\n });\n\n // Add tags if provided\n if (options?.tags) {\n for (const tag of options.tags) {\n tx.addTag(tag.name, tag.value);\n }\n }\n\n return tx;\n }\n\n /**\n * Download multiple files from Arweave\n */\n static async downloadFiles(params: DownloadFilesParams): Promise<DownloadResult[]> {\n const { transactionIds, excludedTransactions } = params;\n const results: DownloadResult[] = [];\n const host = BaseArweaveClient.getHost();\n\n for (const transactionId of transactionIds) {\n // Skip excluded transactions\n if (excludedTransactions?.has(transactionId)) {\n continue;\n }\n\n try {\n const url = `https://${host}/raw/${transactionId}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n results.push({\n transactionId,\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n });\n continue;\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const data = new Uint8Array(arrayBuffer);\n\n // Detect content type\n const contentType = response.headers.get(\"content-type\") || undefined;\n\n results.push({\n transactionId,\n success: true,\n contentType,\n data,\n });\n } catch (error) {\n logger(`Error downloading transaction ${transactionId}:`, error);\n results.push({\n transactionId,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return results;\n }\n}\n\nBaseArweaveClient.setPlatformClass(ArweaveClient);\n\nexport { ArweaveClient };"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ArweaveClient-CgWK-JgT.js","sources":["../src/browser/helpers/ArweaveClient.ts"],"sourcesContent":["import { BaseArweaveClient } from \"@/helpers/ArweaveClient/BaseArweaveClient\";\nimport { GraphQLClient } from \"graphql-request\";\nimport Arweave from \"arweave\";\nimport type {\n TransactionStatus,\n TransactionTag,\n GetDataOptions,\n DownloadFilesParams,\n DownloadResult,\n CreateTransactionOptions,\n} from \"@/types/arweave\";\nimport { GET_TRANSACTION_TAGS } from \"@/helpers/ArweaveClient/queries\";\nimport debug from \"debug\";\n\nconst logger = debug(\"seedSdk:browser:ArweaveClient\");\n\n// Cached Arweave instance\nlet _arweaveInstance: Arweave | null = null;\n\n/**\n * Get or create the Arweave instance for browser\n */\nconst getArweaveInstance = (): Arweave => {\n if (_arweaveInstance) {\n return _arweaveInstance;\n }\n\n const host = BaseArweaveClient.getHost();\n\n // Handle both ES modules and CommonJS exports from arweave package\n if (\"default\" in Arweave && typeof (Arweave as any).default?.init === \"function\") {\n _arweaveInstance = (Arweave as any).default.init({\n host,\n protocol: \"https\",\n });\n } else {\n _arweaveInstance = Arweave.init({\n host,\n protocol: \"https\",\n });\n }\n\n return _arweaveInstance!;\n};\n\nclass ArweaveClient extends BaseArweaveClient {\n /**\n * Get the GraphQL client for Arweave queries\n */\n static getArweaveClient(): GraphQLClient {\n return new GraphQLClient(BaseArweaveClient.getEndpoint());\n }\n\n /**\n * Get the status of a transaction\n */\n static async getTransactionStatus(transactionId: string): Promise<TransactionStatus> {\n const url = BaseArweaveClient.getStatusUrl(transactionId);\n \n try {\n const response = await fetch(url);\n \n if (response.status === 404) {\n return {\n status: 404,\n confirmed: null,\n };\n }\n\n if (!response.ok) {\n return {\n status: response.status,\n confirmed: null,\n };\n }\n\n const data = await response.json();\n return {\n status: 200,\n confirmed: {\n block_height: data.block_height,\n block_indep_hash: data.block_indep_hash,\n number_of_confirmations: data.number_of_confirmations,\n },\n };\n } catch (error) {\n logger(\"Error fetching transaction status:\", error);\n return {\n status: 500,\n confirmed: null,\n };\n }\n }\n\n /**\n * Get transaction data\n */\n static async getTransactionData(\n transactionId: string,\n options?: GetDataOptions\n ): Promise<Uint8Array | string> {\n const arweave = getArweaveInstance();\n\n try {\n const data = await arweave.transactions.getData(transactionId, {\n decode: options?.decode ?? true,\n string: options?.string ?? false,\n });\n\n if (options?.string && typeof data === \"string\") {\n return data;\n }\n\n // Ensure we return Uint8Array\n if (data instanceof Uint8Array) {\n return data;\n }\n\n // Handle string data when not requesting string\n if (typeof data === \"string\") {\n return new TextEncoder().encode(data);\n }\n\n return data as Uint8Array;\n } catch (error) {\n logger(\"Error fetching transaction data:\", error);\n throw error;\n }\n }\n\n /**\n * Get transaction tags via GraphQL\n */\n static async getTransactionTags(transactionId: string): Promise<TransactionTag[]> {\n const client = this.getArweaveClient();\n \n try {\n const result = await client.request(GET_TRANSACTION_TAGS, { transactionId });\n \n if (!result.tags?.tags) {\n return [];\n }\n\n return result.tags.tags.map((tag: { name: string; value: string }) => ({\n name: tag.name,\n value: tag.value,\n }));\n } catch (error) {\n logger(\"Error fetching transaction tags:\", error);\n return [];\n }\n }\n\n /**\n * Create a new unsigned transaction\n */\n static async createTransaction(\n data: string | Uint8Array,\n options?: CreateTransactionOptions\n ): Promise<any> {\n const arweave = getArweaveInstance();\n\n const tx = await arweave.createTransaction({\n data,\n });\n\n // Add tags if provided\n if (options?.tags) {\n for (const tag of options.tags) {\n tx.addTag(tag.name, tag.value);\n }\n }\n\n return tx;\n }\n\n /**\n * Download multiple files from Arweave\n */\n static async downloadFiles(params: DownloadFilesParams): Promise<DownloadResult[]> {\n const { transactionIds, excludedTransactions } = params;\n const results: DownloadResult[] = [];\n const host = BaseArweaveClient.getHost();\n\n for (const transactionId of transactionIds) {\n // Skip excluded transactions\n if (excludedTransactions?.has(transactionId)) {\n continue;\n }\n\n try {\n const url = `https://${host}/raw/${transactionId}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n results.push({\n transactionId,\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n });\n continue;\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const data = new Uint8Array(arrayBuffer);\n\n // Detect content type\n const contentType = response.headers.get(\"content-type\") || undefined;\n\n results.push({\n transactionId,\n success: true,\n contentType,\n data,\n });\n } catch (error) {\n logger(`Error downloading transaction ${transactionId}:`, error);\n results.push({\n transactionId,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return results;\n }\n}\n\nBaseArweaveClient.setPlatformClass(ArweaveClient);\n\nexport { ArweaveClient };"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAcA,MAAM,MAAM,GAAG,KAAK,CAAC,+BAA+B,CAAC;AAErD;AACA,IAAI,gBAAgB,GAAmB,IAAI;AAE3C;;AAEG;AACH,MAAM,kBAAkB,GAAG,MAAc;IACvC,IAAI,gBAAgB,EAAE;AACpB,QAAA,OAAO,gBAAgB;IACzB;AAEA,IAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE;;AAGxC,IAAA,IAAI,SAAS,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE;AAChF,QAAA,gBAAgB,GAAI,OAAe,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/C,IAAI;AACJ,YAAA,QAAQ,EAAE,OAAO;AAClB,SAAA,CAAC;IACJ;SAAO;AACL,QAAA,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAC9B,IAAI;AACJ,YAAA,QAAQ,EAAE,OAAO;AAClB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,gBAAiB;AAC1B,CAAC;AAED,MAAM,aAAc,SAAQ,iBAAiB,CAAA;AAC3C;;AAEG;AACH,IAAA,OAAO,gBAAgB,GAAA;QACrB,OAAO,IAAI,aAAa,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAC3D;AAEA;;AAEG;AACH,IAAA,aAAa,oBAAoB,CAAC,aAAqB,EAAA;QACrD,MAAM,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,aAAa,CAAC;AAEzD,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO;AACL,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,SAAS,EAAE,IAAI;iBAChB;YACH;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,OAAO;oBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;AACvB,oBAAA,SAAS,EAAE,IAAI;iBAChB;YACH;AAEA,YAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YAClC,OAAO;AACL,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,SAAS,EAAE;oBACT,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;AACtD,iBAAA;aACF;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,oCAAoC,EAAE,KAAK,CAAC;YACnD,OAAO;AACL,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,SAAS,EAAE,IAAI;aAChB;QACH;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,kBAAkB,CAC7B,aAAqB,EACrB,OAAwB,EAAA;AAExB,QAAA,MAAM,OAAO,GAAG,kBAAkB,EAAE;AAEpC,QAAA,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE;AAC7D,gBAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI;AAC/B,gBAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;AACjC,aAAA,CAAC;YAEF,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC/C,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,IAAI,IAAI,YAAY,UAAU,EAAE;AAC9B,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC;AAEA,YAAA,OAAO,IAAkB;QAC3B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACjD,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,kBAAkB,CAAC,aAAqB,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEtC,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,CAAC;AAE5E,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;AACtB,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAoC,MAAM;gBACrE,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;AACjB,aAAA,CAAC,CAAC;QACL;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACjD,YAAA,OAAO,EAAE;QACX;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,iBAAiB,CAC5B,IAAyB,EACzB,OAAkC,EAAA;AAElC,QAAA,MAAM,OAAO,GAAG,kBAAkB,EAAE;AAEpC,QAAA,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;YACzC,IAAI;AACL,SAAA,CAAC;;AAGF,QAAA,IAAI,OAAO,EAAE,IAAI,EAAE;AACjB,YAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;gBAC9B,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;YAChC;QACF;AAEA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;AACH,IAAA,aAAa,aAAa,CAAC,MAA2B,EAAA;AACpD,QAAA,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,MAAM;QACvD,MAAM,OAAO,GAAqB,EAAE;AACpC,QAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE;AAExC,QAAA,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;;AAE1C,YAAA,IAAI,oBAAoB,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE;gBAC5C;YACF;AAEA,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,QAAA,EAAW,IAAI,CAAA,KAAA,EAAQ,aAAa,EAAE;AAClD,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,OAAO,CAAC,IAAI,CAAC;wBACX,aAAa;AACb,wBAAA,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAC,UAAU,CAAA,CAAE;AACzD,qBAAA,CAAC;oBACF;gBACF;AAEA,gBAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE;AAChD,gBAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;;AAGxC,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS;gBAErE,OAAO,CAAC,IAAI,CAAC;oBACX,aAAa;AACb,oBAAA,OAAO,EAAE,IAAI;oBACb,WAAW;oBACX,IAAI;AACL,iBAAA,CAAC;YACJ;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,CAAC,CAAA,8BAAA,EAAiC,aAAa,GAAG,EAAE,KAAK,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC;oBACX,aAAa;AACb,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9D,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,OAAO;IAChB;AACD;AAED,iBAAiB,CAAC,gBAAgB,CAAC,aAAa,CAAC;;;;"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { u as BaseArweaveClient } from './index-DPll6EAp.js';
|
|
2
2
|
import { GraphQLClient } from 'graphql-request';
|
|
3
3
|
import Arweave from 'arweave';
|
|
4
|
-
import { G as GET_TRANSACTION_TAGS } from './queries-
|
|
4
|
+
import { G as GET_TRANSACTION_TAGS } from './queries-BPDSpiEX.js';
|
|
5
5
|
import debug from 'debug';
|
|
6
6
|
import 'xstate';
|
|
7
|
+
import 'drizzle-orm/sqlite-core';
|
|
7
8
|
import 'drizzle-orm';
|
|
9
|
+
import 'nanoid';
|
|
10
|
+
import 'nanoid-dictionary';
|
|
8
11
|
import 'pluralize';
|
|
12
|
+
import 'ethers';
|
|
9
13
|
import 'rxjs';
|
|
10
14
|
import 'lodash-es';
|
|
11
15
|
import 'drizzle-orm/casing';
|
|
12
|
-
import '@sinclair/typebox';
|
|
13
16
|
import 'eventemitter3';
|
|
14
|
-
import '
|
|
15
|
-
import 'nanoid';
|
|
16
|
-
import 'nanoid-dictionary';
|
|
17
|
-
import 'ethers';
|
|
17
|
+
import '@sinclair/typebox';
|
|
18
18
|
|
|
19
19
|
const logger = debug('seedSdk:node:ArweaveClient');
|
|
20
20
|
// Cached Arweave instance
|
|
@@ -199,4 +199,4 @@ class ArweaveClient extends BaseArweaveClient {
|
|
|
199
199
|
BaseArweaveClient.setPlatformClass(ArweaveClient);
|
|
200
200
|
|
|
201
201
|
export { ArweaveClient };
|
|
202
|
-
//# sourceMappingURL=ArweaveClient-
|
|
202
|
+
//# sourceMappingURL=ArweaveClient-WcG8CZAE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArweaveClient-CczHvccG.js","sources":["../src/node/helpers/ArweaveClient.ts"],"sourcesContent":["import { BaseArweaveClient } from '@/helpers/ArweaveClient/BaseArweaveClient';\nimport { GraphQLClient } from 'graphql-request';\nimport Arweave from 'arweave';\nimport type {\n TransactionStatus,\n TransactionTag,\n GetDataOptions,\n DownloadFilesParams,\n DownloadResult,\n CreateTransactionOptions,\n} from '@/types/arweave';\nimport { GET_TRANSACTION_TAGS } from '@/helpers/ArweaveClient/queries';\nimport debug from 'debug';\n\nconst logger = debug('seedSdk:node:ArweaveClient');\n\n// Cached Arweave instance\nlet _arweaveInstance: Arweave | null = null;\n\n/**\n * Get or create the Arweave instance for Node.js\n */\nconst getArweaveInstance = (): Arweave => {\n if (_arweaveInstance) {\n return _arweaveInstance;\n }\n\n const host = BaseArweaveClient.getHost();\n\n // Handle both ES modules and CommonJS exports from arweave package\n if ('default' in Arweave && typeof (Arweave as any).default?.init === 'function') {\n _arweaveInstance = (Arweave as any).default.init({\n host,\n protocol: 'https',\n });\n } else {\n _arweaveInstance = Arweave.init({\n host,\n protocol: 'https',\n });\n }\n\n return _arweaveInstance!;\n};\n\nclass ArweaveClient extends BaseArweaveClient {\n /**\n * Get the GraphQL client for Arweave queries\n */\n static getArweaveClient(): GraphQLClient {\n return new GraphQLClient(BaseArweaveClient.getEndpoint());\n }\n\n /**\n * Get the status of a transaction\n */\n static async getTransactionStatus(transactionId: string): Promise<TransactionStatus> {\n const url = BaseArweaveClient.getStatusUrl(transactionId);\n \n try {\n const response = await fetch(url);\n \n if (response.status === 404) {\n return {\n status: 404,\n confirmed: null,\n };\n }\n\n if (!response.ok) {\n return {\n status: response.status,\n confirmed: null,\n };\n }\n\n const data = await response.json();\n return {\n status: 200,\n confirmed: {\n block_height: data.block_height,\n block_indep_hash: data.block_indep_hash,\n number_of_confirmations: data.number_of_confirmations,\n },\n };\n } catch (error) {\n logger('Error fetching transaction status:', error);\n return {\n status: 500,\n confirmed: null,\n };\n }\n }\n\n /**\n * Get transaction data\n */\n static async getTransactionData(\n transactionId: string,\n options?: GetDataOptions\n ): Promise<Uint8Array | string> {\n const arweave = getArweaveInstance();\n\n try {\n const data = await arweave.transactions.getData(transactionId, {\n decode: options?.decode ?? true,\n string: options?.string ?? false,\n });\n\n if (options?.string && typeof data === 'string') {\n return data;\n }\n\n // Ensure we return Uint8Array\n if (data instanceof Uint8Array) {\n return data;\n }\n\n // Handle string data when not requesting string\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n\n return data as Uint8Array;\n } catch (error) {\n logger('Error fetching transaction data:', error);\n throw error;\n }\n }\n\n /**\n * Get transaction tags via GraphQL\n */\n static async getTransactionTags(transactionId: string): Promise<TransactionTag[]> {\n const client = this.getArweaveClient();\n \n try {\n const result = await client.request(GET_TRANSACTION_TAGS, { transactionId });\n \n if (!result.tags?.tags) {\n return [];\n }\n\n return result.tags.tags.map((tag: { name: string; value: string }) => ({\n name: tag.name,\n value: tag.value,\n }));\n } catch (error) {\n logger('Error fetching transaction tags:', error);\n return [];\n }\n }\n\n /**\n * Create a new unsigned transaction\n */\n static async createTransaction(\n data: string | Uint8Array,\n options?: CreateTransactionOptions\n ): Promise<any> {\n const arweave = getArweaveInstance();\n\n const tx = await arweave.createTransaction({\n data,\n });\n\n // Add tags if provided\n if (options?.tags) {\n for (const tag of options.tags) {\n tx.addTag(tag.name, tag.value);\n }\n }\n\n return tx;\n }\n\n /**\n * Download multiple files from Arweave\n */\n static async downloadFiles(params: DownloadFilesParams): Promise<DownloadResult[]> {\n const { transactionIds, excludedTransactions } = params;\n const results: DownloadResult[] = [];\n const host = BaseArweaveClient.getHost();\n\n for (const transactionId of transactionIds) {\n // Skip excluded transactions\n if (excludedTransactions?.has(transactionId)) {\n continue;\n }\n\n try {\n const url = `https://${host}/raw/${transactionId}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n results.push({\n transactionId,\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n });\n continue;\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const data = new Uint8Array(arrayBuffer);\n\n // Detect content type\n const contentType = response.headers.get('content-type') || undefined;\n\n results.push({\n transactionId,\n success: true,\n contentType,\n data,\n });\n } catch (error) {\n logger(`Error downloading transaction ${transactionId}:`, error);\n results.push({\n transactionId,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return results;\n }\n}\n\nBaseArweaveClient.setPlatformClass(ArweaveClient);\n\nexport { ArweaveClient };"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAcA,MAAM,MAAM,GAAG,KAAK,CAAC,4BAA4B,CAAC;AAElD;AACA,IAAI,gBAAgB,GAAmB,IAAI;AAE3C;;AAEG;AACH,MAAM,kBAAkB,GAAG,MAAc;IACvC,IAAI,gBAAgB,EAAE;AACpB,QAAA,OAAO,gBAAgB;IACzB;AAEA,IAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE;;AAGxC,IAAA,IAAI,SAAS,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE;AAChF,QAAA,gBAAgB,GAAI,OAAe,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/C,IAAI;AACJ,YAAA,QAAQ,EAAE,OAAO;AAClB,SAAA,CAAC;IACJ;SAAO;AACL,QAAA,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAC9B,IAAI;AACJ,YAAA,QAAQ,EAAE,OAAO;AAClB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,gBAAiB;AAC1B,CAAC;AAED,MAAM,aAAc,SAAQ,iBAAiB,CAAA;AAC3C;;AAEG;AACH,IAAA,OAAO,gBAAgB,GAAA;QACrB,OAAO,IAAI,aAAa,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAC3D;AAEA;;AAEG;AACH,IAAA,aAAa,oBAAoB,CAAC,aAAqB,EAAA;QACrD,MAAM,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,aAAa,CAAC;AAEzD,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO;AACL,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,SAAS,EAAE,IAAI;iBAChB;YACH;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,OAAO;oBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;AACvB,oBAAA,SAAS,EAAE,IAAI;iBAChB;YACH;AAEA,YAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YAClC,OAAO;AACL,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,SAAS,EAAE;oBACT,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;AACtD,iBAAA;aACF;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,oCAAoC,EAAE,KAAK,CAAC;YACnD,OAAO;AACL,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,SAAS,EAAE,IAAI;aAChB;QACH;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,kBAAkB,CAC7B,aAAqB,EACrB,OAAwB,EAAA;AAExB,QAAA,MAAM,OAAO,GAAG,kBAAkB,EAAE;AAEpC,QAAA,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE;AAC7D,gBAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI;AAC/B,gBAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;AACjC,aAAA,CAAC;YAEF,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC/C,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,IAAI,IAAI,YAAY,UAAU,EAAE;AAC9B,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC;AAEA,YAAA,OAAO,IAAkB;QAC3B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACjD,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,kBAAkB,CAAC,aAAqB,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEtC,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,CAAC;AAE5E,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;AACtB,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAoC,MAAM;gBACrE,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;AACjB,aAAA,CAAC,CAAC;QACL;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACjD,YAAA,OAAO,EAAE;QACX;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,iBAAiB,CAC5B,IAAyB,EACzB,OAAkC,EAAA;AAElC,QAAA,MAAM,OAAO,GAAG,kBAAkB,EAAE;AAEpC,QAAA,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;YACzC,IAAI;AACL,SAAA,CAAC;;AAGF,QAAA,IAAI,OAAO,EAAE,IAAI,EAAE;AACjB,YAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;gBAC9B,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;YAChC;QACF;AAEA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;AACH,IAAA,aAAa,aAAa,CAAC,MAA2B,EAAA;AACpD,QAAA,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,MAAM;QACvD,MAAM,OAAO,GAAqB,EAAE;AACpC,QAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE;AAExC,QAAA,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;;AAE1C,YAAA,IAAI,oBAAoB,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE;gBAC5C;YACF;AAEA,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,QAAA,EAAW,IAAI,CAAA,KAAA,EAAQ,aAAa,EAAE;AAClD,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,OAAO,CAAC,IAAI,CAAC;wBACX,aAAa;AACb,wBAAA,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAC,UAAU,CAAA,CAAE;AACzD,qBAAA,CAAC;oBACF;gBACF;AAEA,gBAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE;AAChD,gBAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;;AAGxC,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS;gBAErE,OAAO,CAAC,IAAI,CAAC;oBACX,aAAa;AACb,oBAAA,OAAO,EAAE,IAAI;oBACb,WAAW;oBACX,IAAI;AACL,iBAAA,CAAC;YACJ;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,CAAC,CAAA,8BAAA,EAAiC,aAAa,GAAG,EAAE,KAAK,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC;oBACX,aAAa;AACb,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9D,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,OAAO;IAChB;AACD;AAED,iBAAiB,CAAC,gBAAgB,CAAC,aAAa,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"ArweaveClient-WcG8CZAE.js","sources":["../src/node/helpers/ArweaveClient.ts"],"sourcesContent":["import { BaseArweaveClient } from '@/helpers/ArweaveClient/BaseArweaveClient';\nimport { GraphQLClient } from 'graphql-request';\nimport Arweave from 'arweave';\nimport type {\n TransactionStatus,\n TransactionTag,\n GetDataOptions,\n DownloadFilesParams,\n DownloadResult,\n CreateTransactionOptions,\n} from '@/types/arweave';\nimport { GET_TRANSACTION_TAGS } from '@/helpers/ArweaveClient/queries';\nimport debug from 'debug';\n\nconst logger = debug('seedSdk:node:ArweaveClient');\n\n// Cached Arweave instance\nlet _arweaveInstance: Arweave | null = null;\n\n/**\n * Get or create the Arweave instance for Node.js\n */\nconst getArweaveInstance = (): Arweave => {\n if (_arweaveInstance) {\n return _arweaveInstance;\n }\n\n const host = BaseArweaveClient.getHost();\n\n // Handle both ES modules and CommonJS exports from arweave package\n if ('default' in Arweave && typeof (Arweave as any).default?.init === 'function') {\n _arweaveInstance = (Arweave as any).default.init({\n host,\n protocol: 'https',\n });\n } else {\n _arweaveInstance = Arweave.init({\n host,\n protocol: 'https',\n });\n }\n\n return _arweaveInstance!;\n};\n\nclass ArweaveClient extends BaseArweaveClient {\n /**\n * Get the GraphQL client for Arweave queries\n */\n static getArweaveClient(): GraphQLClient {\n return new GraphQLClient(BaseArweaveClient.getEndpoint());\n }\n\n /**\n * Get the status of a transaction\n */\n static async getTransactionStatus(transactionId: string): Promise<TransactionStatus> {\n const url = BaseArweaveClient.getStatusUrl(transactionId);\n \n try {\n const response = await fetch(url);\n \n if (response.status === 404) {\n return {\n status: 404,\n confirmed: null,\n };\n }\n\n if (!response.ok) {\n return {\n status: response.status,\n confirmed: null,\n };\n }\n\n const data = await response.json();\n return {\n status: 200,\n confirmed: {\n block_height: data.block_height,\n block_indep_hash: data.block_indep_hash,\n number_of_confirmations: data.number_of_confirmations,\n },\n };\n } catch (error) {\n logger('Error fetching transaction status:', error);\n return {\n status: 500,\n confirmed: null,\n };\n }\n }\n\n /**\n * Get transaction data\n */\n static async getTransactionData(\n transactionId: string,\n options?: GetDataOptions\n ): Promise<Uint8Array | string> {\n const arweave = getArweaveInstance();\n\n try {\n const data = await arweave.transactions.getData(transactionId, {\n decode: options?.decode ?? true,\n string: options?.string ?? false,\n });\n\n if (options?.string && typeof data === 'string') {\n return data;\n }\n\n // Ensure we return Uint8Array\n if (data instanceof Uint8Array) {\n return data;\n }\n\n // Handle string data when not requesting string\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n\n return data as Uint8Array;\n } catch (error) {\n logger('Error fetching transaction data:', error);\n throw error;\n }\n }\n\n /**\n * Get transaction tags via GraphQL\n */\n static async getTransactionTags(transactionId: string): Promise<TransactionTag[]> {\n const client = this.getArweaveClient();\n \n try {\n const result = await client.request(GET_TRANSACTION_TAGS, { transactionId });\n \n if (!result.tags?.tags) {\n return [];\n }\n\n return result.tags.tags.map((tag: { name: string; value: string }) => ({\n name: tag.name,\n value: tag.value,\n }));\n } catch (error) {\n logger('Error fetching transaction tags:', error);\n return [];\n }\n }\n\n /**\n * Create a new unsigned transaction\n */\n static async createTransaction(\n data: string | Uint8Array,\n options?: CreateTransactionOptions\n ): Promise<any> {\n const arweave = getArweaveInstance();\n\n const tx = await arweave.createTransaction({\n data,\n });\n\n // Add tags if provided\n if (options?.tags) {\n for (const tag of options.tags) {\n tx.addTag(tag.name, tag.value);\n }\n }\n\n return tx;\n }\n\n /**\n * Download multiple files from Arweave\n */\n static async downloadFiles(params: DownloadFilesParams): Promise<DownloadResult[]> {\n const { transactionIds, excludedTransactions } = params;\n const results: DownloadResult[] = [];\n const host = BaseArweaveClient.getHost();\n\n for (const transactionId of transactionIds) {\n // Skip excluded transactions\n if (excludedTransactions?.has(transactionId)) {\n continue;\n }\n\n try {\n const url = `https://${host}/raw/${transactionId}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n results.push({\n transactionId,\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n });\n continue;\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const data = new Uint8Array(arrayBuffer);\n\n // Detect content type\n const contentType = response.headers.get('content-type') || undefined;\n\n results.push({\n transactionId,\n success: true,\n contentType,\n data,\n });\n } catch (error) {\n logger(`Error downloading transaction ${transactionId}:`, error);\n results.push({\n transactionId,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return results;\n }\n}\n\nBaseArweaveClient.setPlatformClass(ArweaveClient);\n\nexport { ArweaveClient };"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { p as BaseDb,
|
|
1
|
+
import { p as BaseDb, x as BaseFileManager } from './index-DPll6EAp.js';
|
|
2
2
|
import debug from 'debug';
|
|
3
3
|
import { sql } from 'drizzle-orm';
|
|
4
4
|
import { readMigrationFiles } from 'drizzle-orm/migrator';
|
|
5
5
|
import { drizzle } from 'drizzle-orm/sqlite-proxy';
|
|
6
6
|
import { migrate } from 'drizzle-orm/sqlite-proxy/migrator';
|
|
7
|
-
import { s as schema } from './index-
|
|
7
|
+
import { s as schema } from './index-2FcQHgKp.js';
|
|
8
8
|
import { SQLocalDrizzle } from 'sqlocal/drizzle';
|
|
9
9
|
import { Observable, distinctUntilChanged } from 'rxjs';
|
|
10
10
|
import 'xstate';
|
|
11
|
-
import 'pluralize';
|
|
12
|
-
import 'lodash-es';
|
|
13
|
-
import 'drizzle-orm/casing';
|
|
14
|
-
import '@sinclair/typebox';
|
|
15
|
-
import 'arweave';
|
|
16
|
-
import 'eventemitter3';
|
|
17
11
|
import 'drizzle-orm/sqlite-core';
|
|
18
12
|
import 'nanoid';
|
|
19
13
|
import 'nanoid-dictionary';
|
|
14
|
+
import 'pluralize';
|
|
20
15
|
import 'ethers';
|
|
16
|
+
import 'lodash-es';
|
|
17
|
+
import 'drizzle-orm/casing';
|
|
18
|
+
import 'eventemitter3';
|
|
19
|
+
import 'arweave';
|
|
20
|
+
import '@sinclair/typebox';
|
|
21
21
|
|
|
22
22
|
// This file embeds the drizzle migration files as strings for browser runtime
|
|
23
23
|
// These files are copied from src/db/drizzle at build time
|
|
@@ -1511,4 +1511,4 @@ class Db extends BaseDb {
|
|
|
1511
1511
|
}
|
|
1512
1512
|
|
|
1513
1513
|
export { Db };
|
|
1514
|
-
//# sourceMappingURL=Db-
|
|
1514
|
+
//# sourceMappingURL=Db-DjFdIdR9.js.map
|