@lumeweb/pinner 0.0.1 → 0.1.1
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/LICENSE +9 -0
- package/README.md +707 -28
- package/dist/cjs/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/cjs/adapters/pinata/index.cjs +6 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs +83 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/legacy/adapter.d.cts +74 -0
- package/dist/cjs/adapters/pinata/legacy/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/shared/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/shared/types.d.cts +218 -0
- package/dist/cjs/adapters/pinata/shared/utils.cjs +83 -0
- package/dist/cjs/adapters/pinata/shared/utils.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/v2/adapter-interface.d.cts +198 -0
- package/dist/cjs/adapters/pinata/v2/adapter.cjs +636 -0
- package/dist/cjs/adapters/pinata/v2/adapter.cjs.map +1 -0
- package/dist/cjs/adapters/pinata/v2/adapter.d.cts +17 -0
- package/dist/cjs/adapters/pinata/v2/index.cjs +1 -0
- package/dist/cjs/adapters/pinata/v2/types.d.cts +308 -0
- package/dist/cjs/blockstore/index.cjs +2 -0
- package/dist/cjs/blockstore/unstorage-base.cjs +240 -0
- package/dist/cjs/blockstore/unstorage-base.cjs.map +1 -0
- package/dist/cjs/blockstore/unstorage-base.d.cts +23 -0
- package/dist/cjs/blockstore/unstorage.cjs +39 -0
- package/dist/cjs/blockstore/unstorage.cjs.map +1 -0
- package/dist/cjs/blockstore/unstorage.d.cts +36 -0
- package/dist/cjs/config.d.cts +51 -0
- package/dist/cjs/encoder/base64.cjs +38 -0
- package/dist/cjs/encoder/base64.cjs.map +1 -0
- package/dist/cjs/encoder/csv/csv-formatter.cjs +81 -0
- package/dist/cjs/encoder/csv/csv-formatter.cjs.map +1 -0
- package/dist/cjs/encoder/csv/field-formatter.cjs +76 -0
- package/dist/cjs/encoder/csv/field-formatter.cjs.map +1 -0
- package/dist/cjs/encoder/csv/row-formatter.cjs +159 -0
- package/dist/cjs/encoder/csv/row-formatter.cjs.map +1 -0
- package/dist/cjs/encoder/csv.cjs +44 -0
- package/dist/cjs/encoder/csv.cjs.map +1 -0
- package/dist/cjs/encoder/error.cjs +19 -0
- package/dist/cjs/encoder/error.cjs.map +1 -0
- package/dist/cjs/encoder/index.cjs +6 -0
- package/dist/cjs/encoder/json.cjs +36 -0
- package/dist/cjs/encoder/json.cjs.map +1 -0
- package/dist/cjs/encoder/text.cjs +35 -0
- package/dist/cjs/encoder/text.cjs.map +1 -0
- package/dist/cjs/encoder/url.cjs +39 -0
- package/dist/cjs/encoder/url.cjs.map +1 -0
- package/dist/cjs/errors/index.cjs +104 -0
- package/dist/cjs/errors/index.cjs.map +1 -0
- package/dist/cjs/errors/index.d.cts +47 -0
- package/dist/cjs/index.cjs +44 -0
- package/dist/cjs/index.d.cts +16 -0
- package/dist/cjs/pin/client.cjs +98 -0
- package/dist/cjs/pin/client.cjs.map +1 -0
- package/dist/cjs/pin/index.cjs +1 -0
- package/dist/cjs/pinner.cjs +132 -0
- package/dist/cjs/pinner.cjs.map +1 -0
- package/dist/cjs/pinner.d.cts +81 -0
- package/dist/cjs/types/constants.cjs +39 -0
- package/dist/cjs/types/constants.cjs.map +1 -0
- package/dist/cjs/types/mime-types.cjs +11 -0
- package/dist/cjs/types/mime-types.cjs.map +1 -0
- package/dist/cjs/types/mime-types.d.cts +7 -0
- package/dist/cjs/types/pin.d.cts +78 -0
- package/dist/cjs/types/type-guards.cjs +20 -0
- package/dist/cjs/types/type-guards.cjs.map +1 -0
- package/dist/cjs/types/type-guards.d.cts +15 -0
- package/dist/cjs/types/upload.cjs +18 -0
- package/dist/cjs/types/upload.cjs.map +1 -0
- package/dist/cjs/types/upload.d.cts +189 -0
- package/dist/cjs/upload/base-upload.cjs +135 -0
- package/dist/cjs/upload/base-upload.cjs.map +1 -0
- package/dist/cjs/upload/builder.cjs +174 -0
- package/dist/cjs/upload/builder.cjs.map +1 -0
- package/dist/cjs/upload/builder.d.cts +60 -0
- package/dist/cjs/upload/car.cjs +129 -0
- package/dist/cjs/upload/car.cjs.map +1 -0
- package/dist/cjs/upload/car.d.cts +19 -0
- package/dist/cjs/upload/constants.cjs +9 -0
- package/dist/cjs/upload/constants.cjs.map +1 -0
- package/dist/cjs/upload/index.cjs +8 -0
- package/dist/cjs/upload/manager.cjs +249 -0
- package/dist/cjs/upload/manager.cjs.map +1 -0
- package/dist/cjs/upload/manager.d.cts +35 -0
- package/dist/cjs/upload/normalize.cjs +28 -0
- package/dist/cjs/upload/normalize.cjs.map +1 -0
- package/dist/cjs/upload/tus-upload.cjs +74 -0
- package/dist/cjs/upload/tus-upload.cjs.map +1 -0
- package/dist/cjs/upload/xhr-upload.cjs +41 -0
- package/dist/cjs/upload/xhr-upload.cjs.map +1 -0
- package/dist/cjs/utils/env.cjs +12 -0
- package/dist/cjs/utils/env.cjs.map +1 -0
- package/dist/cjs/utils/stream.cjs +141 -0
- package/dist/cjs/utils/stream.cjs.map +1 -0
- package/dist/cjs/utils/stream.d.cts +23 -0
- package/dist/cjs/utils/tus-patch.cjs +50 -0
- package/dist/cjs/utils/tus-patch.cjs.map +1 -0
- package/dist/cjs/utils/validation.cjs +62 -0
- package/dist/cjs/utils/validation.cjs.map +1 -0
- package/dist/esm/_virtual/rolldown_runtime.js +8 -0
- package/dist/esm/adapters/pinata/index.d.ts +7 -0
- package/dist/esm/adapters/pinata/index.js +6 -0
- package/dist/esm/adapters/pinata/legacy/adapter.d.ts +74 -0
- package/dist/esm/adapters/pinata/legacy/adapter.js +83 -0
- package/dist/esm/adapters/pinata/legacy/adapter.js.map +1 -0
- package/dist/esm/adapters/pinata/legacy/index.d.ts +1 -0
- package/dist/esm/adapters/pinata/legacy/index.js +1 -0
- package/dist/esm/adapters/pinata/shared/index.d.ts +2 -0
- package/dist/esm/adapters/pinata/shared/index.js +1 -0
- package/dist/esm/adapters/pinata/shared/types.d.ts +218 -0
- package/dist/esm/adapters/pinata/shared/utils.d.ts +1 -0
- package/dist/esm/adapters/pinata/shared/utils.js +78 -0
- package/dist/esm/adapters/pinata/shared/utils.js.map +1 -0
- package/dist/esm/adapters/pinata/v2/adapter-interface.d.ts +198 -0
- package/dist/esm/adapters/pinata/v2/adapter.d.ts +17 -0
- package/dist/esm/adapters/pinata/v2/adapter.js +636 -0
- package/dist/esm/adapters/pinata/v2/adapter.js.map +1 -0
- package/dist/esm/adapters/pinata/v2/index.d.ts +3 -0
- package/dist/esm/adapters/pinata/v2/index.js +1 -0
- package/dist/esm/adapters/pinata/v2/types.d.ts +308 -0
- package/dist/esm/blockstore/index.d.ts +2 -0
- package/dist/esm/blockstore/index.js +2 -0
- package/dist/esm/blockstore/unstorage-base.d.ts +23 -0
- package/dist/esm/blockstore/unstorage-base.js +231 -0
- package/dist/esm/blockstore/unstorage-base.js.map +1 -0
- package/dist/esm/blockstore/unstorage.d.ts +36 -0
- package/dist/esm/blockstore/unstorage.js +38 -0
- package/dist/esm/blockstore/unstorage.js.map +1 -0
- package/dist/esm/config.d.ts +51 -0
- package/dist/esm/encoder/base64.js +37 -0
- package/dist/esm/encoder/base64.js.map +1 -0
- package/dist/esm/encoder/csv/csv-formatter.js +81 -0
- package/dist/esm/encoder/csv/csv-formatter.js.map +1 -0
- package/dist/esm/encoder/csv/field-formatter.js +75 -0
- package/dist/esm/encoder/csv/field-formatter.js.map +1 -0
- package/dist/esm/encoder/csv/row-formatter.js +159 -0
- package/dist/esm/encoder/csv/row-formatter.js.map +1 -0
- package/dist/esm/encoder/csv.js +43 -0
- package/dist/esm/encoder/csv.js.map +1 -0
- package/dist/esm/encoder/error.js +18 -0
- package/dist/esm/encoder/error.js.map +1 -0
- package/dist/esm/encoder/index.js +6 -0
- package/dist/esm/encoder/json.js +35 -0
- package/dist/esm/encoder/json.js.map +1 -0
- package/dist/esm/encoder/text.js +34 -0
- package/dist/esm/encoder/text.js.map +1 -0
- package/dist/esm/encoder/url.js +36 -0
- package/dist/esm/encoder/url.js.map +1 -0
- package/dist/esm/errors/index.d.ts +47 -0
- package/dist/esm/errors/index.js +93 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/index.d.ts +18 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/pin/client.js +97 -0
- package/dist/esm/pin/client.js.map +1 -0
- package/dist/esm/pin/index.js +1 -0
- package/dist/esm/pinner.d.ts +81 -0
- package/dist/esm/pinner.js +131 -0
- package/dist/esm/pinner.js.map +1 -0
- package/dist/esm/types/constants.js +33 -0
- package/dist/esm/types/constants.js.map +1 -0
- package/dist/esm/types/mime-types.d.ts +7 -0
- package/dist/esm/types/mime-types.js +8 -0
- package/dist/esm/types/mime-types.js.map +1 -0
- package/dist/esm/types/pin.d.ts +78 -0
- package/dist/esm/types/type-guards.d.ts +15 -0
- package/dist/esm/types/type-guards.js +19 -0
- package/dist/esm/types/type-guards.js.map +1 -0
- package/dist/esm/types/upload.d.ts +189 -0
- package/dist/esm/types/upload.js +16 -0
- package/dist/esm/types/upload.js.map +1 -0
- package/dist/esm/upload/base-upload.js +132 -0
- package/dist/esm/upload/base-upload.js.map +1 -0
- package/dist/esm/upload/builder.d.ts +60 -0
- package/dist/esm/upload/builder.js +173 -0
- package/dist/esm/upload/builder.js.map +1 -0
- package/dist/esm/upload/car.d.ts +19 -0
- package/dist/esm/upload/car.js +125 -0
- package/dist/esm/upload/car.js.map +1 -0
- package/dist/esm/upload/constants.js +7 -0
- package/dist/esm/upload/constants.js.map +1 -0
- package/dist/esm/upload/index.js +8 -0
- package/dist/esm/upload/manager.d.ts +35 -0
- package/dist/esm/upload/manager.js +248 -0
- package/dist/esm/upload/manager.js.map +1 -0
- package/dist/esm/upload/normalize.js +28 -0
- package/dist/esm/upload/normalize.js.map +1 -0
- package/dist/esm/upload/tus-upload.js +72 -0
- package/dist/esm/upload/tus-upload.js.map +1 -0
- package/dist/esm/upload/xhr-upload.js +39 -0
- package/dist/esm/upload/xhr-upload.js.map +1 -0
- package/dist/esm/utils/env.js +11 -0
- package/dist/esm/utils/env.js.map +1 -0
- package/dist/esm/utils/stream.d.ts +23 -0
- package/dist/esm/utils/stream.js +134 -0
- package/dist/esm/utils/stream.js.map +1 -0
- package/dist/esm/utils/tus-patch.js +51 -0
- package/dist/esm/utils/tus-patch.js.map +1 -0
- package/dist/esm/utils/validation.js +60 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/package.json +95 -8
- package/public/mockServiceWorker.js +349 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AccessLinkOptions, AnalyticsQuery, CidVersion, DeleteResponse, FileListItem, FileListResponse, GetGroupOptions, GroupCIDOptions, GroupListResponse, GroupOptions, GroupResponseItem, PinByCIDResponse, PinQueueItem, PinQueueResponse, PinataConfig, PinataMetadata, SignedUploadUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TimePeriodItem, TopAnalyticsItem, TopAnalyticsQuery, TopAnalyticsResponse, UpdateFileOptions, UpdateGroupFilesResponse, UpdateGroupOptions, UploadCIDOptions, UploadOptions, UploadResponse } from "./types.js";
|
|
2
|
+
import { PinataAdapter } from "./adapter-interface.js";
|
|
3
|
+
import { pinataAdapter } from "./adapter.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { pinataAdapter } from "./adapter.js";
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
//#region src/adapters/pinata/v2/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Pinata SDK 2.x Types
|
|
4
|
+
* Source: https://github.com/PinataCloud/pinata/commit/cdc0c06116aaadaf7c4b287a2673cd23b6ba1125
|
|
5
|
+
* - src/core/types/index.ts
|
|
6
|
+
*
|
|
7
|
+
* Copyright © 2024 Pinata Cloud Technologies
|
|
8
|
+
* Type definitions adapted from Pinata SDK for compatibility.
|
|
9
|
+
* Original Pinata SDK: https://github.com/PinataCloud/pinata
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* CID version type
|
|
13
|
+
*/
|
|
14
|
+
type CidVersion = "v0" | "v1";
|
|
15
|
+
/**
|
|
16
|
+
* Pinata configuration options
|
|
17
|
+
*/
|
|
18
|
+
type PinataConfig = {
|
|
19
|
+
pinataJwt?: string;
|
|
20
|
+
pinataGateway?: string;
|
|
21
|
+
pinataGatewayKey?: string;
|
|
22
|
+
customHeaders?: Record<string, string>;
|
|
23
|
+
endpointUrl?: string;
|
|
24
|
+
uploadUrl?: string;
|
|
25
|
+
legacyUploadUrl?: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Pinata metadata
|
|
29
|
+
*/
|
|
30
|
+
type PinataMetadata = {
|
|
31
|
+
name?: string;
|
|
32
|
+
keyvalues?: Record<string, string>;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Upload options
|
|
36
|
+
*/
|
|
37
|
+
type UploadOptions = {
|
|
38
|
+
metadata?: PinataMetadata;
|
|
39
|
+
keys?: string;
|
|
40
|
+
groupId?: string;
|
|
41
|
+
vectorize?: boolean;
|
|
42
|
+
url?: string;
|
|
43
|
+
streamable?: boolean;
|
|
44
|
+
peerAddresses?: string[];
|
|
45
|
+
car?: boolean;
|
|
46
|
+
cid_version?: CidVersion;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Upload response
|
|
50
|
+
*/
|
|
51
|
+
type UploadResponse = {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
cid: string;
|
|
55
|
+
size: number;
|
|
56
|
+
created_at: string;
|
|
57
|
+
number_of_files: number;
|
|
58
|
+
mime_type: string;
|
|
59
|
+
group_id: string | null;
|
|
60
|
+
keyvalues: Record<string, string>;
|
|
61
|
+
vectorized: boolean;
|
|
62
|
+
network: string;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Upload CID options
|
|
66
|
+
*/
|
|
67
|
+
type UploadCIDOptions = {
|
|
68
|
+
metadata?: PinataMetadata;
|
|
69
|
+
peerAddresses?: string[];
|
|
70
|
+
keys?: string;
|
|
71
|
+
groupId?: string;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Pin by CID response
|
|
75
|
+
*/
|
|
76
|
+
type PinByCIDResponse = {
|
|
77
|
+
id: string;
|
|
78
|
+
cid: string;
|
|
79
|
+
date_queued: string;
|
|
80
|
+
name: string;
|
|
81
|
+
status: string;
|
|
82
|
+
keyvalues: Record<string, any> | null;
|
|
83
|
+
host_nodes: string[] | null;
|
|
84
|
+
group_id: string | null;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Signed upload URL options
|
|
88
|
+
*/
|
|
89
|
+
type SignedUploadUrlOptions = {
|
|
90
|
+
date?: number;
|
|
91
|
+
expires: number;
|
|
92
|
+
groupId?: string;
|
|
93
|
+
name?: string;
|
|
94
|
+
keyvalues?: Record<string, string>;
|
|
95
|
+
vectorize?: boolean;
|
|
96
|
+
maxFileSize?: number;
|
|
97
|
+
mimeTypes?: string[];
|
|
98
|
+
streamable?: boolean;
|
|
99
|
+
car?: boolean;
|
|
100
|
+
cid_version?: CidVersion;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* File list item
|
|
104
|
+
*/
|
|
105
|
+
type FileListItem = {
|
|
106
|
+
id: string;
|
|
107
|
+
name: string | null;
|
|
108
|
+
cid: "pending" | string;
|
|
109
|
+
size: number;
|
|
110
|
+
number_of_files: number;
|
|
111
|
+
mime_type: string;
|
|
112
|
+
keyvalues: Record<string, string>;
|
|
113
|
+
group_id: string | null;
|
|
114
|
+
created_at: string;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* File list response
|
|
118
|
+
*/
|
|
119
|
+
type FileListResponse = {
|
|
120
|
+
files: FileListItem[];
|
|
121
|
+
next_page_token: string;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Update file options
|
|
125
|
+
*/
|
|
126
|
+
type UpdateFileOptions = {
|
|
127
|
+
id: string;
|
|
128
|
+
name?: string;
|
|
129
|
+
keyvalues?: Record<string, string>;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Delete response
|
|
133
|
+
*/
|
|
134
|
+
type DeleteResponse = {
|
|
135
|
+
id: string;
|
|
136
|
+
status: string;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Pin queue item
|
|
140
|
+
*/
|
|
141
|
+
type PinQueueItem = {
|
|
142
|
+
id: string;
|
|
143
|
+
cid?: string;
|
|
144
|
+
ipfs_pin_hash?: string;
|
|
145
|
+
date_queued: string;
|
|
146
|
+
name: string;
|
|
147
|
+
status: string;
|
|
148
|
+
keyvalues: any;
|
|
149
|
+
host_nodes: string[];
|
|
150
|
+
pin_policy: {
|
|
151
|
+
regions: {
|
|
152
|
+
id: string;
|
|
153
|
+
desiredReplicationCount: number;
|
|
154
|
+
}[];
|
|
155
|
+
version: number;
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Pin queue response
|
|
160
|
+
*/
|
|
161
|
+
type PinQueueResponse = {
|
|
162
|
+
jobs: PinQueueItem[];
|
|
163
|
+
next_page_token: string;
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Swap CID options
|
|
167
|
+
*/
|
|
168
|
+
type SwapCidOptions = {
|
|
169
|
+
cid: string;
|
|
170
|
+
swapCid: string;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Swap history options
|
|
174
|
+
*/
|
|
175
|
+
type SwapHistoryOptions = {
|
|
176
|
+
cid: string;
|
|
177
|
+
domain: string;
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* Swap CID response
|
|
181
|
+
*/
|
|
182
|
+
type SwapCidResponse = {
|
|
183
|
+
mapped_cid: string;
|
|
184
|
+
created_at: string;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Access link options
|
|
188
|
+
*/
|
|
189
|
+
type AccessLinkOptions = {
|
|
190
|
+
cid: string;
|
|
191
|
+
date?: number;
|
|
192
|
+
expires: number;
|
|
193
|
+
gateway?: string;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Group options
|
|
197
|
+
*/
|
|
198
|
+
type GroupOptions = {
|
|
199
|
+
name: string;
|
|
200
|
+
isPublic?: boolean;
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Update group options
|
|
204
|
+
*/
|
|
205
|
+
type UpdateGroupOptions = {
|
|
206
|
+
groupId: string;
|
|
207
|
+
name?: string;
|
|
208
|
+
isPublic?: boolean;
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Get group options
|
|
212
|
+
*/
|
|
213
|
+
type GetGroupOptions = {
|
|
214
|
+
groupId: string;
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Group response item
|
|
218
|
+
*/
|
|
219
|
+
type GroupResponseItem = {
|
|
220
|
+
id: string;
|
|
221
|
+
is_public: boolean;
|
|
222
|
+
name: string;
|
|
223
|
+
createdAt: string;
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Group list response
|
|
227
|
+
*/
|
|
228
|
+
type GroupListResponse = {
|
|
229
|
+
groups: GroupResponseItem[];
|
|
230
|
+
next_page_token: string;
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* Group CID options
|
|
234
|
+
*/
|
|
235
|
+
type GroupCIDOptions = {
|
|
236
|
+
groupId: string;
|
|
237
|
+
files: string[];
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Update group files response
|
|
241
|
+
*/
|
|
242
|
+
type UpdateGroupFilesResponse = {
|
|
243
|
+
id: string;
|
|
244
|
+
status: string;
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Analytics query
|
|
248
|
+
*/
|
|
249
|
+
type AnalyticsQuery = {
|
|
250
|
+
gateway_domain: string;
|
|
251
|
+
start_date: string;
|
|
252
|
+
end_date: string;
|
|
253
|
+
cid?: string;
|
|
254
|
+
file_name?: string;
|
|
255
|
+
user_agent?: string;
|
|
256
|
+
country?: string;
|
|
257
|
+
region?: string;
|
|
258
|
+
referer?: string;
|
|
259
|
+
limit?: number;
|
|
260
|
+
sort_order?: "asc" | "desc";
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Top analytics query
|
|
264
|
+
*/
|
|
265
|
+
type TopAnalyticsQuery = AnalyticsQuery & {
|
|
266
|
+
sort_by: "requests" | "bandwidth";
|
|
267
|
+
attribute: "cid" | "country" | "region" | "user_agent" | "referer" | "file_name";
|
|
268
|
+
};
|
|
269
|
+
/**
|
|
270
|
+
* Top analytics response
|
|
271
|
+
*/
|
|
272
|
+
type TopAnalyticsResponse = {
|
|
273
|
+
data: TopAnalyticsItem[];
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Top analytics item
|
|
277
|
+
*/
|
|
278
|
+
type TopAnalyticsItem = {
|
|
279
|
+
value: string;
|
|
280
|
+
requests: number;
|
|
281
|
+
bandwidth: number;
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Time interval analytics query
|
|
285
|
+
*/
|
|
286
|
+
type TimeIntervalAnalyticsQuery = AnalyticsQuery & {
|
|
287
|
+
sort_by?: "requests" | "bandwidth";
|
|
288
|
+
date_interval: "day" | "week";
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* Time period item
|
|
292
|
+
*/
|
|
293
|
+
type TimePeriodItem = {
|
|
294
|
+
period_start_time: string;
|
|
295
|
+
requests: number;
|
|
296
|
+
bandwidth: number;
|
|
297
|
+
};
|
|
298
|
+
/**
|
|
299
|
+
* Time interval analytics response
|
|
300
|
+
*/
|
|
301
|
+
type TimeIntervalAnalyticsResponse = {
|
|
302
|
+
total_requests: number;
|
|
303
|
+
total_bandwidth: number;
|
|
304
|
+
time_periods: TimePeriodItem[];
|
|
305
|
+
};
|
|
306
|
+
//#endregion
|
|
307
|
+
export { AccessLinkOptions, AnalyticsQuery, CidVersion, DeleteResponse, FileListItem, FileListResponse, GetGroupOptions, GroupCIDOptions, GroupListResponse, GroupOptions, GroupResponseItem, PinByCIDResponse, PinQueueItem, PinQueueResponse, PinataConfig, PinataMetadata, SignedUploadUrlOptions, SwapCidOptions, SwapCidResponse, SwapHistoryOptions, TimeIntervalAnalyticsQuery, TimeIntervalAnalyticsResponse, TimePeriodItem, TopAnalyticsItem, TopAnalyticsQuery, TopAnalyticsResponse, UpdateFileOptions, UpdateGroupFilesResponse, UpdateGroupOptions, UploadCIDOptions, UploadOptions, UploadResponse };
|
|
308
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Driver, Storage } from "unstorage";
|
|
2
|
+
import { Datastore } from "interface-datastore";
|
|
3
|
+
|
|
4
|
+
//#region src/blockstore/unstorage-base.d.ts
|
|
5
|
+
interface UnstorageBlockstoreOptions {
|
|
6
|
+
storage?: Storage;
|
|
7
|
+
prefix?: string;
|
|
8
|
+
driver?: Driver;
|
|
9
|
+
base?: string;
|
|
10
|
+
datastorePrefix?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* prefix: Key prefix for blockstore keys (e.g., "blockstore" or "pinner-helia-blocks").
|
|
14
|
+
* This is prepended to CID strings in storage keys.
|
|
15
|
+
*
|
|
16
|
+
* base: Base path for the storage driver (e.g., "pinner:" for IndexedDB, "./.pinner-blocks" for filesystem).
|
|
17
|
+
* This determines where the storage driver stores data.
|
|
18
|
+
*/
|
|
19
|
+
type DriverFactory = () => Driver | Promise<Driver>;
|
|
20
|
+
declare function setDriverFactory(factory: DriverFactory | null): void;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { UnstorageBlockstoreOptions, setDriverFactory };
|
|
23
|
+
//# sourceMappingURL=unstorage-base.d.ts.map
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { collectAsyncIterable } from "../utils/stream.js";
|
|
2
|
+
import { DEFAULT_BLOCKSTORE_PREFIX } from "../types/constants.js";
|
|
3
|
+
import { BaseBlockstore } from "/home/runner/work/web/web/node_modules/.pnpm/blockstore-core@6.1.2/node_modules/blockstore-core/dist/src/index.js";
|
|
4
|
+
import { CID } from "multiformats/cid";
|
|
5
|
+
import { createStorage } from "unstorage";
|
|
6
|
+
import { Key } from "interface-datastore";
|
|
7
|
+
|
|
8
|
+
//#region src/blockstore/unstorage-base.ts
|
|
9
|
+
let driverFactory = null;
|
|
10
|
+
function setDriverFactory(factory) {
|
|
11
|
+
driverFactory = factory;
|
|
12
|
+
}
|
|
13
|
+
function createStorageWithOptions(options) {
|
|
14
|
+
return options.storage ? options.storage : createStorage({ driver: options.driver });
|
|
15
|
+
}
|
|
16
|
+
async function initializeStorage(storage, options, getDefaultDriver) {
|
|
17
|
+
if (options.storage || options.driver) return;
|
|
18
|
+
const driver = await getDefaultDriver(options.base);
|
|
19
|
+
Object.assign(storage, createStorage({ driver }));
|
|
20
|
+
}
|
|
21
|
+
function createUnstorageBase(options, getDefaultDriver) {
|
|
22
|
+
const storage = createStorageWithOptions(options);
|
|
23
|
+
const initialized = initializeStorage(storage, options, getDefaultDriver);
|
|
24
|
+
async function ensureInitialized() {
|
|
25
|
+
await initialized;
|
|
26
|
+
}
|
|
27
|
+
async function hasItem(key) {
|
|
28
|
+
await ensureInitialized();
|
|
29
|
+
return await storage.hasItem(key);
|
|
30
|
+
}
|
|
31
|
+
async function getItem(key) {
|
|
32
|
+
await ensureInitialized();
|
|
33
|
+
const value = await storage.getItemRaw(key);
|
|
34
|
+
if (value === null) throw new Error(`Item not found: ${key}`);
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
async function putItem(key, value) {
|
|
38
|
+
await ensureInitialized();
|
|
39
|
+
await storage.setItemRaw(key, value);
|
|
40
|
+
}
|
|
41
|
+
async function deleteItem(key) {
|
|
42
|
+
await ensureInitialized();
|
|
43
|
+
await storage.removeItem(key);
|
|
44
|
+
}
|
|
45
|
+
async function getAllKeys() {
|
|
46
|
+
await ensureInitialized();
|
|
47
|
+
return await storage.getKeys();
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
storage,
|
|
51
|
+
hasItem,
|
|
52
|
+
getItem,
|
|
53
|
+
putItem,
|
|
54
|
+
deleteItem,
|
|
55
|
+
getAllKeys
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function createUnstorageBlockstore(getDefaultDriver) {
|
|
59
|
+
return class UnstorageBlockstore extends BaseBlockstore {
|
|
60
|
+
prefix;
|
|
61
|
+
base;
|
|
62
|
+
constructor(options = {}) {
|
|
63
|
+
super();
|
|
64
|
+
this.prefix = options.prefix ?? DEFAULT_BLOCKSTORE_PREFIX;
|
|
65
|
+
this.base = createUnstorageBase(options, getDefaultDriver);
|
|
66
|
+
}
|
|
67
|
+
keyToStorageKey(key) {
|
|
68
|
+
return `${this.prefix}:${key.toString()}`;
|
|
69
|
+
}
|
|
70
|
+
async has(key, _) {
|
|
71
|
+
return await this.base.hasItem(this.keyToStorageKey(key));
|
|
72
|
+
}
|
|
73
|
+
async put(key, val, _) {
|
|
74
|
+
const storageKey = this.keyToStorageKey(key);
|
|
75
|
+
const bytes = val instanceof Uint8Array ? val : await collectAsyncIterable(val);
|
|
76
|
+
await this.base.putItem(storageKey, bytes);
|
|
77
|
+
return key;
|
|
78
|
+
}
|
|
79
|
+
async *putMany(source, options) {
|
|
80
|
+
for await (const { cid, bytes } of source) yield await this.put(cid, bytes, options);
|
|
81
|
+
}
|
|
82
|
+
async *get(key, _) {
|
|
83
|
+
const storageKey = this.keyToStorageKey(key);
|
|
84
|
+
yield await this.base.getItem(storageKey);
|
|
85
|
+
}
|
|
86
|
+
async *getMany(source, options) {
|
|
87
|
+
for await (const cid of source) yield {
|
|
88
|
+
cid,
|
|
89
|
+
bytes: async function* () {
|
|
90
|
+
yield* await this.get(cid, options);
|
|
91
|
+
}.call(this)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async delete(key, _) {
|
|
95
|
+
await this.base.deleteItem(this.keyToStorageKey(key));
|
|
96
|
+
}
|
|
97
|
+
async *deleteMany(source, options) {
|
|
98
|
+
for await (const cid of source) {
|
|
99
|
+
await this.delete(cid, options);
|
|
100
|
+
yield cid;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async *getAll(_) {
|
|
104
|
+
const keys = await this.base.getAllKeys();
|
|
105
|
+
for (const key of keys) if (key.startsWith(this.prefix + ":")) {
|
|
106
|
+
const cidString = key.slice(this.prefix.length + 1);
|
|
107
|
+
try {
|
|
108
|
+
const cid = CID.parse(cidString);
|
|
109
|
+
const value = await this.base.getItem(key);
|
|
110
|
+
yield {
|
|
111
|
+
cid,
|
|
112
|
+
bytes: (async function* () {
|
|
113
|
+
yield value;
|
|
114
|
+
})()
|
|
115
|
+
};
|
|
116
|
+
} catch {}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function createUnstorageDatastore(getDefaultDriver) {
|
|
122
|
+
return class UnstorageDatastore {
|
|
123
|
+
prefix;
|
|
124
|
+
base;
|
|
125
|
+
constructor(options = {}) {
|
|
126
|
+
this.prefix = options.datastorePrefix ?? options.prefix ?? DEFAULT_BLOCKSTORE_PREFIX;
|
|
127
|
+
this.base = createUnstorageBase(options, getDefaultDriver);
|
|
128
|
+
}
|
|
129
|
+
keyToStorageKey(key) {
|
|
130
|
+
return `${this.prefix}:${key.toString()}`;
|
|
131
|
+
}
|
|
132
|
+
storageKeyToKey(storageKey) {
|
|
133
|
+
return new Key(storageKey.slice(this.prefix.length + 1));
|
|
134
|
+
}
|
|
135
|
+
async has(key, _) {
|
|
136
|
+
return await this.base.hasItem(this.keyToStorageKey(key));
|
|
137
|
+
}
|
|
138
|
+
async put(key, val, _) {
|
|
139
|
+
await this.base.putItem(this.keyToStorageKey(key), val);
|
|
140
|
+
return key;
|
|
141
|
+
}
|
|
142
|
+
async *putMany(source, options) {
|
|
143
|
+
for await (const { key, value } of source) yield await this.put(key, value, options);
|
|
144
|
+
}
|
|
145
|
+
async get(key, _) {
|
|
146
|
+
const storageKey = this.keyToStorageKey(key);
|
|
147
|
+
try {
|
|
148
|
+
return await this.base.getItem(storageKey);
|
|
149
|
+
} catch (error) {
|
|
150
|
+
throw new Error(`Datastore item not found: ${key.toString()}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async *getMany(source, options) {
|
|
154
|
+
for await (const key of source) yield {
|
|
155
|
+
key,
|
|
156
|
+
value: await this.get(key, options)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
async delete(key, _) {
|
|
160
|
+
await this.base.deleteItem(this.keyToStorageKey(key));
|
|
161
|
+
}
|
|
162
|
+
async *deleteMany(source, options) {
|
|
163
|
+
for await (const key of source) {
|
|
164
|
+
await this.delete(key, options);
|
|
165
|
+
yield key;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
batch() {
|
|
169
|
+
const operations = [];
|
|
170
|
+
const base = this.base;
|
|
171
|
+
const keyToStorageKey = this.keyToStorageKey.bind(this);
|
|
172
|
+
return {
|
|
173
|
+
put(key, value) {
|
|
174
|
+
operations.push({
|
|
175
|
+
type: "put",
|
|
176
|
+
key,
|
|
177
|
+
value
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
delete(key) {
|
|
181
|
+
operations.push({
|
|
182
|
+
type: "delete",
|
|
183
|
+
key
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
async commit() {
|
|
187
|
+
for (const op of operations) if (op.type === "put" && op.value !== void 0) await base.putItem(keyToStorageKey(op.key), op.value);
|
|
188
|
+
else if (op.type === "delete") await base.deleteItem(keyToStorageKey(op.key));
|
|
189
|
+
operations.length = 0;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async *query(query, _) {
|
|
194
|
+
const keys = await this.base.getAllKeys();
|
|
195
|
+
for (const key of keys) {
|
|
196
|
+
if (!key.startsWith(this.prefix + ":")) continue;
|
|
197
|
+
const datastoreKey = this.storageKeyToKey(key);
|
|
198
|
+
if (query.prefix && !datastoreKey.toString().startsWith(query.prefix.toString())) continue;
|
|
199
|
+
const value = await this.base.getItem(key);
|
|
200
|
+
if (query.filters) {
|
|
201
|
+
let match = true;
|
|
202
|
+
for (const filter of query.filters) if (!filter({
|
|
203
|
+
key: datastoreKey,
|
|
204
|
+
value
|
|
205
|
+
})) {
|
|
206
|
+
match = false;
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
if (!match) continue;
|
|
210
|
+
}
|
|
211
|
+
yield {
|
|
212
|
+
key: datastoreKey,
|
|
213
|
+
value
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async *queryKeys(query, _) {
|
|
218
|
+
const keys = await this.base.getAllKeys();
|
|
219
|
+
for (const key of keys) {
|
|
220
|
+
if (!key.startsWith(this.prefix + ":")) continue;
|
|
221
|
+
const datastoreKey = this.storageKeyToKey(key);
|
|
222
|
+
if (query.prefix && !datastoreKey.toString().startsWith(query.prefix.toString())) continue;
|
|
223
|
+
yield datastoreKey;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
//#endregion
|
|
230
|
+
export { createUnstorageBlockstore, createUnstorageDatastore, driverFactory, setDriverFactory };
|
|
231
|
+
//# sourceMappingURL=unstorage-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unstorage-base.js","names":[],"sources":["../../../src/blockstore/unstorage-base.ts"],"sourcesContent":["import { BaseBlockstore } from \"blockstore-core\";\nimport type { InputPair, Pair as BlockstorePair } from \"interface-blockstore\";\nimport type {\n AbortOptions,\n Await,\n AwaitGenerator,\n AwaitIterable,\n} from \"interface-store\";\nimport { CID } from \"multiformats/cid\";\nimport { createStorage, type Driver, type Storage } from \"unstorage\";\nimport { DEFAULT_BLOCKSTORE_PREFIX } from \"@/types/constants\";\nimport type { Batch, Datastore, KeyQuery, Query } from \"interface-datastore\";\nimport { Key, Pair } from \"interface-datastore\";\nimport { collectAsyncIterable } from \"@/utils/stream\";\n\n\n\nexport interface UnstorageBlockstoreOptions {\n storage?: Storage;\n prefix?: string;\n driver?: Driver;\n base?: string;\n datastorePrefix?: string;\n}\n\n/**\n * prefix: Key prefix for blockstore keys (e.g., \"blockstore\" or \"pinner-helia-blocks\").\n * This is prepended to CID strings in storage keys.\n *\n * base: Base path for the storage driver (e.g., \"pinner:\" for IndexedDB, \"./.pinner-blocks\" for filesystem).\n * This determines where the storage driver stores data.\n */\n\ntype DriverFactory = () => Driver | Promise<Driver>;\n\nexport let driverFactory: DriverFactory | null = null;\n\nexport function setDriverFactory(factory: DriverFactory | null): void {\n driverFactory = factory;\n}\n\nfunction createStorageWithOptions(\n options: UnstorageBlockstoreOptions,\n): Storage {\n return options.storage\n ? options.storage\n : createStorage({ driver: options.driver });\n}\n\nasync function initializeStorage(\n storage: Storage,\n options: UnstorageBlockstoreOptions,\n getDefaultDriver: (base?: string) => Driver | Promise<Driver>,\n): Promise<void> {\n if (options.storage || options.driver) {\n return;\n }\n\n const driver = await getDefaultDriver(options.base);\n Object.assign(storage, createStorage({ driver }));\n}\n\nfunction createUnstorageBase(\n options: UnstorageBlockstoreOptions,\n getDefaultDriver: (base?: string) => Driver | Promise<Driver>,\n) {\n const storage = createStorageWithOptions(options);\n const initialized = initializeStorage(storage, options, getDefaultDriver);\n\n async function ensureInitialized(): Promise<void> {\n await initialized;\n }\n\n async function hasItem(key: string): Promise<boolean> {\n await ensureInitialized();\n return await storage.hasItem(key);\n }\n\n async function getItem(key: string): Promise<Uint8Array> {\n await ensureInitialized();\n const value = await storage.getItemRaw<Uint8Array>(key);\n\n if (value === null) {\n throw new Error(`Item not found: ${key}`);\n }\n\n return value;\n }\n\n async function putItem(key: string, value: Uint8Array): Promise<void> {\n await ensureInitialized();\n await storage.setItemRaw(key, value);\n }\n\n async function deleteItem(key: string): Promise<void> {\n await ensureInitialized();\n await storage.removeItem(key);\n }\n\n async function getAllKeys(): Promise<string[]> {\n await ensureInitialized();\n return await storage.getKeys();\n }\n\n return {\n storage,\n hasItem,\n getItem,\n putItem,\n deleteItem,\n getAllKeys,\n };\n}\n\nexport function createUnstorageBlockstore(\n getDefaultDriver: (base?: string) => Driver | Promise<Driver>,\n): new (\n options?: UnstorageBlockstoreOptions,\n) => InstanceType<typeof BaseBlockstore> {\n return class UnstorageBlockstore extends BaseBlockstore {\n private prefix: string;\n private base: ReturnType<typeof createUnstorageBase>;\n\n constructor(options: UnstorageBlockstoreOptions = {}) {\n super();\n this.prefix = options.prefix ?? DEFAULT_BLOCKSTORE_PREFIX;\n this.base = createUnstorageBase(options, getDefaultDriver);\n }\n\n private keyToStorageKey(key: CID): string {\n return `${this.prefix}:${key.toString()}`;\n }\n\n async has(key: CID, _?: AbortOptions): Promise<boolean> {\n return await this.base.hasItem(this.keyToStorageKey(key));\n }\n\n async put(\n key: CID,\n val: Uint8Array | AwaitIterable<Uint8Array>,\n _?: AbortOptions,\n ): Promise<CID> {\n const storageKey = this.keyToStorageKey(key);\n const bytes =\n val instanceof Uint8Array ? val : await collectAsyncIterable(val);\n await this.base.putItem(storageKey, bytes);\n return key;\n }\n\n async *putMany(\n source: AwaitIterable<InputPair>,\n options?: AbortOptions,\n ): AwaitGenerator<CID> {\n for await (const { cid, bytes } of source) {\n yield await this.put(cid, bytes, options);\n }\n }\n\n async *get(key: CID, _?: AbortOptions): AsyncGenerator<Uint8Array> {\n const storageKey = this.keyToStorageKey(key);\n const value = await this.base.getItem(storageKey);\n yield value;\n }\n\n async *getMany(\n source: AwaitIterable<CID>,\n options?: AbortOptions,\n ): AwaitGenerator<BlockstorePair> {\n for await (const cid of source) {\n yield {\n cid,\n bytes: (async function* () {\n yield* await this.get(cid, options);\n }.call(this)),\n };\n }\n }\n\n async delete(key: CID, _?: AbortOptions): Promise<void> {\n await this.base.deleteItem(this.keyToStorageKey(key));\n }\n\n async *deleteMany(\n source: AwaitIterable<CID>,\n options?: AbortOptions,\n ): AwaitGenerator<CID> {\n for await (const cid of source) {\n await this.delete(cid, options);\n yield cid;\n }\n }\n\n async *getAll(_?: AbortOptions): AwaitGenerator<BlockstorePair> {\n const keys = await this.base.getAllKeys();\n\n for (const key of keys) {\n if (key.startsWith(this.prefix + \":\")) {\n const cidString = key.slice(this.prefix.length + 1);\n try {\n const cid = CID.parse(cidString);\n const value = await this.base.getItem(key);\n\n yield {\n cid,\n bytes: (async function* () {\n yield value;\n })(),\n };\n } catch {\n // Skip invalid keys\n }\n }\n }\n }\n };\n}\n\nexport function createUnstorageDatastore(\n getDefaultDriver: (base?: string) => Driver | Promise<Driver>,\n): new (options?: UnstorageBlockstoreOptions) => Datastore {\n return class UnstorageDatastore implements Datastore {\n private prefix: string;\n private base: ReturnType<typeof createUnstorageBase>;\n\n constructor(options: UnstorageBlockstoreOptions = {}) {\n this.prefix =\n options.datastorePrefix ?? options.prefix ?? DEFAULT_BLOCKSTORE_PREFIX;\n this.base = createUnstorageBase(options, getDefaultDriver);\n }\n\n private keyToStorageKey(key: Key): string {\n return `${this.prefix}:${key.toString()}`;\n }\n\n private storageKeyToKey(storageKey: string): Key {\n return new Key(storageKey.slice(this.prefix.length + 1));\n }\n\n async has(key: Key, _?: AbortOptions): Promise<boolean> {\n return await this.base.hasItem(this.keyToStorageKey(key));\n }\n\n async put(key: Key, val: Uint8Array, _?: AbortOptions): Promise<Key> {\n await this.base.putItem(this.keyToStorageKey(key), val);\n return key;\n }\n\n async *putMany(\n source: AwaitIterable<Pair>,\n options?: AbortOptions,\n ): AsyncGenerator<Key> {\n for await (const { key, value } of source) {\n yield await this.put(key, value, options);\n }\n }\n\n async get(key: Key, _?: AbortOptions): Promise<Uint8Array> {\n const storageKey = this.keyToStorageKey(key);\n try {\n return await this.base.getItem(storageKey);\n } catch (error) {\n throw new Error(`Datastore item not found: ${key.toString()}`);\n }\n }\n\n async *getMany(\n source: AwaitIterable<Key>,\n options?: AbortOptions,\n ): AsyncGenerator<Pair> {\n for await (const key of source) {\n yield {\n key,\n value: await this.get(key, options),\n };\n }\n }\n\n async delete(key: Key, _?: AbortOptions): Promise<void> {\n await this.base.deleteItem(this.keyToStorageKey(key));\n }\n\n async *deleteMany(\n source: AwaitIterable<Key>,\n options?: AbortOptions,\n ): AsyncGenerator<Key> {\n for await (const key of source) {\n await this.delete(key, options);\n yield key;\n }\n }\n\n batch(): Batch {\n const operations: Array<{\n type: \"put\" | \"delete\";\n key: Key;\n value?: Uint8Array;\n }> = [];\n const base = this.base;\n const keyToStorageKey = this.keyToStorageKey.bind(this);\n\n return {\n put(key: Key, value: Uint8Array): void {\n operations.push({ type: \"put\", key, value });\n },\n delete(key: Key): void {\n operations.push({ type: \"delete\", key });\n },\n async commit(): Promise<void> {\n for (const op of operations) {\n if (op.type === \"put\" && op.value !== undefined) {\n await base.putItem(keyToStorageKey(op.key), op.value);\n } else if (op.type === \"delete\") {\n await base.deleteItem(keyToStorageKey(op.key));\n }\n }\n operations.length = 0;\n },\n };\n }\n\n async *query(query: Query, _?: AbortOptions): AsyncGenerator<Pair> {\n const keys = await this.base.getAllKeys();\n\n for (const key of keys) {\n if (!key.startsWith(this.prefix + \":\")) {\n continue;\n }\n\n const datastoreKey = this.storageKeyToKey(key);\n\n if (\n query.prefix &&\n !datastoreKey.toString().startsWith(query.prefix.toString())\n ) {\n continue;\n }\n\n const value = await this.base.getItem(key);\n\n if (query.filters) {\n let match = true;\n for (const filter of query.filters) {\n if (!filter({ key: datastoreKey, value })) {\n match = false;\n break;\n }\n }\n if (!match) continue;\n }\n\n yield {\n key: datastoreKey,\n value,\n };\n }\n }\n\n async *queryKeys(query: KeyQuery, _?: AbortOptions): AsyncGenerator<Key> {\n const keys = await this.base.getAllKeys();\n\n for (const key of keys) {\n if (!key.startsWith(this.prefix + \":\")) {\n continue;\n }\n\n const datastoreKey = this.storageKeyToKey(key);\n\n if (\n query.prefix &&\n !datastoreKey.toString().startsWith(query.prefix.toString())\n ) {\n continue;\n }\n\n yield datastoreKey;\n }\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { UnstorageBlockstoreOptions, setDriverFactory } from "./unstorage-base.js";
|
|
2
|
+
import * as interface_datastore0 from "interface-datastore";
|
|
3
|
+
import * as multiformats0 from "multiformats";
|
|
4
|
+
import * as interface_store0 from "interface-store";
|
|
5
|
+
import * as interface_blockstore0 from "interface-blockstore";
|
|
6
|
+
|
|
7
|
+
//#region src/blockstore/unstorage.d.ts
|
|
8
|
+
declare function createBlockstore(options?: UnstorageBlockstoreOptions): {
|
|
9
|
+
new (instanceOptions?: UnstorageBlockstoreOptions): {
|
|
10
|
+
has(key: multiformats0.CID, options?: interface_store0.AbortOptions): interface_store0.Await<boolean>;
|
|
11
|
+
put(key: multiformats0.CID, val: Uint8Array | interface_store0.AwaitIterable<Uint8Array>, options?: interface_store0.AbortOptions): interface_store0.Await<multiformats0.CID>;
|
|
12
|
+
putMany(source: interface_store0.AwaitIterable<interface_blockstore0.InputPair>, options?: interface_store0.AbortOptions): interface_store0.AwaitGenerator<multiformats0.CID>;
|
|
13
|
+
get(key: multiformats0.CID, options?: interface_store0.AbortOptions): interface_store0.AwaitGenerator<Uint8Array>;
|
|
14
|
+
getMany(source: interface_store0.AwaitIterable<multiformats0.CID>, options?: interface_store0.AbortOptions): interface_store0.AwaitGenerator<interface_blockstore0.Pair>;
|
|
15
|
+
delete(key: multiformats0.CID, options?: interface_store0.AbortOptions): interface_store0.Await<void>;
|
|
16
|
+
deleteMany(source: interface_store0.AwaitIterable<multiformats0.CID>, options?: interface_store0.AbortOptions): interface_store0.AwaitGenerator<multiformats0.CID>;
|
|
17
|
+
getAll(options?: interface_store0.AbortOptions): interface_store0.AwaitGenerator<interface_blockstore0.Pair>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
declare function createDatastore(options?: UnstorageBlockstoreOptions): {
|
|
21
|
+
new (instanceOptions?: UnstorageBlockstoreOptions): {
|
|
22
|
+
batch(): interface_datastore0.Batch<{}>;
|
|
23
|
+
query(query: interface_datastore0.Query, options?: interface_store0.AbortOptions | undefined): interface_store0.AwaitGenerator<interface_datastore0.Pair>;
|
|
24
|
+
queryKeys(query: interface_datastore0.KeyQuery, options?: interface_store0.AbortOptions | undefined): interface_store0.AwaitGenerator<interface_datastore0.Key>;
|
|
25
|
+
has(key: interface_datastore0.Key, options?: interface_store0.AbortOptions | undefined): interface_store0.Await<boolean>;
|
|
26
|
+
put(key: interface_datastore0.Key, val: Uint8Array<ArrayBufferLike>, options?: interface_store0.AbortOptions | undefined): interface_store0.Await<interface_datastore0.Key>;
|
|
27
|
+
putMany(source: interface_store0.AwaitIterable<interface_datastore0.Pair>, options?: interface_store0.AbortOptions | undefined): interface_store0.AwaitGenerator<interface_datastore0.Key, any, any>;
|
|
28
|
+
get(key: interface_datastore0.Key, options?: interface_store0.AbortOptions | undefined): interface_store0.Await<Uint8Array<ArrayBufferLike>>;
|
|
29
|
+
getMany(source: interface_store0.AwaitIterable<interface_datastore0.Key>, options?: interface_store0.AbortOptions | undefined): interface_store0.AwaitGenerator<interface_datastore0.Pair, any, any>;
|
|
30
|
+
delete(key: interface_datastore0.Key, options?: interface_store0.AbortOptions | undefined): interface_store0.Await<void>;
|
|
31
|
+
deleteMany(source: interface_store0.AwaitIterable<interface_datastore0.Key>, options?: interface_store0.AbortOptions | undefined): interface_store0.AwaitGenerator<interface_datastore0.Key, any, any>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
//#endregion
|
|
35
|
+
export { createBlockstore, createDatastore };
|
|
36
|
+
//# sourceMappingURL=unstorage.d.ts.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DEFAULT_BLOCKSTORE_BASE, DEFAULT_BLOCKSTORE_FS_BASE } from "../types/constants.js";
|
|
2
|
+
import { createUnstorageBlockstore, createUnstorageDatastore, driverFactory, setDriverFactory } from "./unstorage-base.js";
|
|
3
|
+
|
|
4
|
+
//#region src/blockstore/unstorage.ts
|
|
5
|
+
function isBrowser() {
|
|
6
|
+
return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
|
|
7
|
+
}
|
|
8
|
+
async function getDefaultDriver(base) {
|
|
9
|
+
if (driverFactory) return await driverFactory();
|
|
10
|
+
if (isBrowser()) return (await import("unstorage/drivers/indexedb")).default({ base: base ?? DEFAULT_BLOCKSTORE_BASE });
|
|
11
|
+
else return (await import("unstorage/drivers/fs-lite")).default({ base: base ?? DEFAULT_BLOCKSTORE_FS_BASE });
|
|
12
|
+
}
|
|
13
|
+
function createBlockstore(options) {
|
|
14
|
+
const BlockstoreClass = createUnstorageBlockstore(getDefaultDriver);
|
|
15
|
+
return class extends BlockstoreClass {
|
|
16
|
+
constructor(instanceOptions) {
|
|
17
|
+
super({
|
|
18
|
+
...options,
|
|
19
|
+
...instanceOptions
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function createDatastore(options) {
|
|
25
|
+
const DatastoreClass = createUnstorageDatastore(getDefaultDriver);
|
|
26
|
+
return class extends DatastoreClass {
|
|
27
|
+
constructor(instanceOptions) {
|
|
28
|
+
super({
|
|
29
|
+
...options,
|
|
30
|
+
...instanceOptions
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { createBlockstore, createDatastore };
|
|
38
|
+
//# sourceMappingURL=unstorage.js.map
|