@seedprotocol/sdk 0.2.51 → 0.2.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/{ArweaveClient-D1TsTBoj.js → ArweaveClient-D5iJisYr.js} +2 -2
  2. package/dist/{ArweaveClient-DpdXUcVJ.js.map → ArweaveClient-D5iJisYr.js.map} +1 -1
  3. package/dist/{ArweaveClient-DpdXUcVJ.js → ArweaveClient-HEIIuOfB.js} +2 -2
  4. package/dist/{ArweaveClient-D1TsTBoj.js.map → ArweaveClient-HEIIuOfB.js.map} +1 -1
  5. package/dist/{Db-quJxmvHH.js → Db-D-BsZYlN.js} +3 -3
  6. package/dist/{Db-quJxmvHH.js.map → Db-D-BsZYlN.js.map} +1 -1
  7. package/dist/{Db-DMJ0v3gO.js → Db-Dpsbk_T7.js} +3 -3
  8. package/dist/{Db-DMJ0v3gO.js.map → Db-Dpsbk_T7.js.map} +1 -1
  9. package/dist/{EasClient-ClZDuT3o.js → EasClient-D3wKgt0o.js} +2 -2
  10. package/dist/{EasClient-DfnGY_2X.js.map → EasClient-D3wKgt0o.js.map} +1 -1
  11. package/dist/{EasClient-DfnGY_2X.js → EasClient-jqkT2ZBt.js} +2 -2
  12. package/dist/{EasClient-ClZDuT3o.js.map → EasClient-jqkT2ZBt.js.map} +1 -1
  13. package/dist/{FileManager-texI7UwL.js → FileManager-4mWYO3Mt.js} +3 -5
  14. package/dist/FileManager-4mWYO3Mt.js.map +1 -0
  15. package/dist/{Item-D4n439Ei.js → Item-CqWdJsyg.js} +3 -3
  16. package/dist/{Item-D4n439Ei.js.map → Item-CqWdJsyg.js.map} +1 -1
  17. package/dist/{ItemProperty-Be5ymRVT.js → ItemProperty-BpBW3IWx.js} +3 -3
  18. package/dist/{ItemProperty-Be5ymRVT.js.map → ItemProperty-BpBW3IWx.js.map} +1 -1
  19. package/dist/{QueryClient-B1HkAaJo.js → QueryClient-CBOP3OoU.js} +2 -2
  20. package/dist/{QueryClient-B1HkAaJo.js.map → QueryClient-CBOP3OoU.js.map} +1 -1
  21. package/dist/{QueryClient-BPoc9eBn.js → QueryClient-bKb3SB0W.js} +2 -2
  22. package/dist/{QueryClient-BPoc9eBn.js.map → QueryClient-bKb3SB0W.js.map} +1 -1
  23. package/dist/bin.js +5 -5
  24. package/dist/{constants-5PxfAeqj.js → constants-CIDbABDz.js} +2 -2
  25. package/dist/{constants-5PxfAeqj.js.map → constants-CIDbABDz.js.map} +1 -1
  26. package/dist/{index-BeKRizLf.js → index-BRxO1tLl.js} +257 -145
  27. package/dist/index-BRxO1tLl.js.map +1 -0
  28. package/dist/{index-BLla2o05.js → index-d8Qsot6w.js} +3 -3
  29. package/dist/index-d8Qsot6w.js.map +1 -0
  30. package/dist/main.js +2 -2
  31. package/dist/package.json +189 -0
  32. package/dist/{seed.schema.config-CMpV_hyS.js → seed.schema.config-CPRn6KVL.js} +3 -3
  33. package/dist/{seed.schema.config-CMpV_hyS.js.map → seed.schema.config-CPRn6KVL.js.map} +1 -1
  34. package/dist/types/src/client/BaseClientManager.d.ts +7 -0
  35. package/dist/types/src/client/BaseClientManager.d.ts.map +1 -0
  36. package/dist/types/src/client/actions/setAddresses.d.ts +2 -0
  37. package/dist/types/src/client/actions/setAddresses.d.ts.map +1 -0
  38. package/dist/types/src/client/actors/initialize.d.ts +4 -0
  39. package/dist/types/src/client/actors/initialize.d.ts.map +1 -0
  40. package/dist/types/src/client/actors/saveAppState.d.ts +5 -0
  41. package/dist/types/src/client/actors/saveAppState.d.ts.map +1 -0
  42. package/dist/types/src/client/clientManagerMachine.d.ts +19 -0
  43. package/dist/types/src/client/clientManagerMachine.d.ts.map +1 -0
  44. package/dist/types/src/client/index.d.ts +41 -0
  45. package/dist/types/src/client/index.d.ts.map +1 -0
  46. package/dist/types/src/client.d.ts.map +1 -1
  47. package/dist/types/src/node/helpers/FileManager.d.ts.map +1 -1
  48. package/dist/types/src/services/internal/actors/validateInput.d.ts.map +1 -1
  49. package/dist/types/src/types/machines.d.ts +5 -0
  50. package/dist/types/src/types/machines.d.ts.map +1 -1
  51. package/package.json +2 -2
  52. package/dist/FileManager-texI7UwL.js.map +0 -1
  53. package/dist/index-BLla2o05.js.map +0 -1
  54. package/dist/index-BeKRizLf.js.map +0 -1
  55. package/dist/src/AppStateSchema.ts +0 -10
  56. package/dist/src/ArweaveClient.ts +0 -13
  57. package/dist/src/Attestation.ts +0 -21
  58. package/dist/src/BaseArweaveClient.ts +0 -13
  59. package/dist/src/BaseDb.ts +0 -35
  60. package/dist/src/BaseEasClient.ts +0 -13
  61. package/dist/src/BaseFileManager.ts +0 -56
  62. package/dist/src/BaseItem.ts +0 -413
  63. package/dist/src/BaseItemProperty.ts +0 -416
  64. package/dist/src/BaseQueryClient.ts +0 -13
  65. package/dist/src/ConfigSchema.ts +0 -15
  66. package/dist/src/Db.ts +0 -78
  67. package/dist/src/EasClient.ts +0 -13
  68. package/dist/src/FileDownloader.ts +0 -63
  69. package/dist/src/FileManager.ts +0 -57
  70. package/dist/src/IDb.ts +0 -7
  71. package/dist/src/IEasClient.ts +0 -2
  72. package/dist/src/IItem.ts +0 -26
  73. package/dist/src/IItemProperty.ts +0 -28
  74. package/dist/src/IQueryClient.ts +0 -4
  75. package/dist/src/ImageResizer.ts +0 -81
  76. package/dist/src/Item.ts +0 -12
  77. package/dist/src/ItemProperty.ts +0 -9
  78. package/dist/src/MetadataSchema.ts +0 -28
  79. package/dist/src/ModelSchema.ts +0 -46
  80. package/dist/src/ModelUidSchema.ts +0 -16
  81. package/dist/src/PropertyUidSchema.ts +0 -16
  82. package/dist/src/QueryClient.ts +0 -22
  83. package/dist/src/Schema.ts +0 -17
  84. package/dist/src/SeedProtocolSdk.d.ts +0 -19
  85. package/dist/src/SeedSchema.ts +0 -29
  86. package/dist/src/VersionSchema.ts +0 -16
  87. package/dist/src/actors.ts +0 -295
  88. package/dist/src/addModelsToDb.ts +0 -152
  89. package/dist/src/allItems.ts +0 -31
  90. package/dist/src/analyzeInput.ts +0 -144
  91. package/dist/src/browser.app.db.config.ts +0 -27
  92. package/dist/src/browser.ts +0 -30
  93. package/dist/src/checkStatus.ts +0 -50
  94. package/dist/src/client.ts +0 -148
  95. package/dist/src/configureFs.ts +0 -94
  96. package/dist/src/connectToDb.ts +0 -41
  97. package/dist/src/connectionManager.ts +0 -67
  98. package/dist/src/constants.ts +0 -125
  99. package/dist/src/content-hash.ts +0 -30
  100. package/dist/src/create.ts +0 -39
  101. package/dist/src/createMetadata.ts +0 -77
  102. package/dist/src/createNewItem.ts +0 -61
  103. package/dist/src/createPublishAttempt.ts +0 -16
  104. package/dist/src/createSeed.ts +0 -31
  105. package/dist/src/createSeeds.ts +0 -24
  106. package/dist/src/createVersion.ts +0 -33
  107. package/dist/src/dbMachine.ts +0 -182
  108. package/dist/src/deleteItem.ts +0 -19
  109. package/dist/src/download.ts +0 -202
  110. package/dist/src/drizzle.ts +0 -78
  111. package/dist/src/eas.ts +0 -40
  112. package/dist/src/environment.ts +0 -35
  113. package/dist/src/eventBus.ts +0 -5
  114. package/dist/src/events.ts +0 -14
  115. package/dist/src/fetchDataFromEas.ts +0 -94
  116. package/dist/src/fetchDbData.ts +0 -19
  117. package/dist/src/fetchRelatedItems.ts +0 -184
  118. package/dist/src/fetchSeeds.ts +0 -52
  119. package/dist/src/fetchVersions.ts +0 -49
  120. package/dist/src/files.ts +0 -81
  121. package/dist/src/filesDownload.ts +0 -326
  122. package/dist/src/fragment-masking.ts +0 -87
  123. package/dist/src/getExistingItem.ts +0 -60
  124. package/dist/src/getItem.ts +0 -32
  125. package/dist/src/getItemData.ts +0 -99
  126. package/dist/src/getItemProperties.ts +0 -56
  127. package/dist/src/getItemProperty.ts +0 -34
  128. package/dist/src/getItems.ts +0 -70
  129. package/dist/src/getMetadata.ts +0 -40
  130. package/dist/src/getModelSchemas.ts +0 -89
  131. package/dist/src/getPropertyData.ts +0 -50
  132. package/dist/src/getPublishPayload.ts +0 -355
  133. package/dist/src/getPublishUploads.ts +0 -207
  134. package/dist/src/getRelationValueData.ts +0 -27
  135. package/dist/src/getSchemaForItemProperty.ts +0 -68
  136. package/dist/src/getSchemaForModel.ts +0 -42
  137. package/dist/src/getSchemaUidForModel.ts +0 -32
  138. package/dist/src/getSeedData.ts +0 -34
  139. package/dist/src/getSegmentedItemProperties.ts +0 -65
  140. package/dist/src/getStorageTransactionIdForSeedUid.ts +0 -38
  141. package/dist/src/getVersionData.ts +0 -46
  142. package/dist/src/getVersionsForVersionUids.ts +0 -39
  143. package/dist/src/globalMachine.ts +0 -280
  144. package/dist/src/gql.ts +0 -118
  145. package/dist/src/graphql.ts +0 -3209
  146. package/dist/src/helpers.ts +0 -273
  147. package/dist/src/hydrateExistingItem.ts +0 -137
  148. package/dist/src/hydrateFromDb.ts +0 -270
  149. package/dist/src/hydrateNewItem.ts +0 -34
  150. package/dist/src/imageResize.ts +0 -507
  151. package/dist/src/index.d.ts +0 -5
  152. package/dist/src/index.ts +0 -4
  153. package/dist/src/initialize.ts +0 -124
  154. package/dist/src/internalMachine.ts +0 -238
  155. package/dist/src/itemMachineAll.ts +0 -157
  156. package/dist/src/itemMachineSingle.ts +0 -158
  157. package/dist/src/loadAppDb.ts +0 -47
  158. package/dist/src/machines.ts +0 -60
  159. package/dist/src/metadataLatest.ts +0 -34
  160. package/dist/src/migrate.ts +0 -53
  161. package/dist/src/model.ts +0 -72
  162. package/dist/src/modelClass.ts +0 -19
  163. package/dist/src/node.app.db.config.ts +0 -41
  164. package/dist/src/prepareDb.ts +0 -29
  165. package/dist/src/preparePublishRequestData.ts +0 -81
  166. package/dist/src/processItems.ts +0 -74
  167. package/dist/src/property.ts +0 -156
  168. package/dist/src/propertyMachine.ts +0 -202
  169. package/dist/src/publish.ts +0 -28
  170. package/dist/src/publishMachine.ts +0 -77
  171. package/dist/src/queries.ts +0 -13
  172. package/dist/src/recoverDeletedItem.ts +0 -14
  173. package/dist/src/reload.ts +0 -33
  174. package/dist/src/request.ts +0 -45
  175. package/dist/src/requestAll.ts +0 -157
  176. package/dist/src/resolveRelatedValue.ts +0 -367
  177. package/dist/src/resolveRemoteStorage.ts +0 -88
  178. package/dist/src/saveAppState.ts +0 -19
  179. package/dist/src/saveConfig.ts +0 -88
  180. package/dist/src/saveDataToDb.ts +0 -145
  181. package/dist/src/saveImageSrc.ts +0 -242
  182. package/dist/src/saveItemStorage.ts +0 -156
  183. package/dist/src/saveMetadata.ts +0 -18
  184. package/dist/src/savePublishService.ts +0 -30
  185. package/dist/src/saveRelation.ts +0 -112
  186. package/dist/src/seed.schema.config.ts +0 -25
  187. package/dist/src/seed.ts +0 -10
  188. package/dist/src/seedProtocol.ts +0 -17
  189. package/dist/src/services.ts +0 -365
  190. package/dist/src/sqlWasmClient.ts +0 -88
  191. package/dist/src/syncDbWithEas.ts +0 -628
  192. package/dist/src/trash.ts +0 -29
  193. package/dist/src/ts-to-proto.ts +0 -101
  194. package/dist/src/types.ts +0 -12
  195. package/dist/src/updateItemPropertyValue.ts +0 -243
  196. package/dist/src/updateMachineContext.ts +0 -21
  197. package/dist/src/updateMetadata.ts +0 -59
  198. package/dist/src/upload.ts +0 -86
  199. package/dist/src/validate.ts +0 -45
  200. package/dist/src/validateInput.ts +0 -47
  201. package/dist/src/validateItemData.ts +0 -20
  202. package/dist/src/versionData.ts +0 -24
  203. package/dist/src/waitForDb.ts +0 -25
  204. package/dist/src/waitForFiles.ts +0 -34
  205. package/dist/src/wasm.d.ts +0 -8300
@@ -1,507 +0,0 @@
1
- import path from "path";
2
-
3
- type BrowserImageResizerConfigBase = {
4
- /**
5
- * Algorithm used for downscaling
6
- *
7
- * * `null`: Just resize with `drawImage()`. The best quality and fastest.
8
- * * `bilinear`: Better quality, slower. Comes from upstream (ericnogralesbrowser-image-resizer).
9
- * * `hermite`: Worse quality, faster. Comes from [viliusle/Hermite-resize](https://github.com/viliusle/Hermite-resize). Will dispatch workers for better performance.
10
- * * `hermite_single`: Worse quality, faster. Single-threaded.
11
- *
12
- * default: null
13
- */
14
- algorithm: 'bilinear' | 'hermite' | 'hermite_single' | 'null' | null;
15
-
16
- /**
17
- * Whether to process downscaling by `drawImage(source, 0, 0, source.width / 2, source.height / 2)`
18
- * until the size is smaller than twice the target size.
19
- *
20
- * There seems to be no situation where it is necessary to change to false.
21
- *
22
- * default: true
23
- */
24
- processByHalf: boolean;
25
-
26
- maxWidth: number;
27
- maxHeight: number;
28
- maxSize?: number; // ???
29
-
30
- /**
31
- * Scale ratio. Strictly limited to maxWidth.
32
- */
33
- scaleRatio?: number;
34
-
35
- /**
36
- * Output logs to console
37
- */
38
- debug: boolean;
39
- }
40
-
41
-
42
- type BrowserImageResizerConfigWithConvertedOutput = BrowserImageResizerConfigBase & {
43
- quality: number;
44
- mimeType: string;
45
- };
46
-
47
- type BrowserImageResizerConfigWithOffscreenCanvasOutput = BrowserImageResizerConfigBase & {
48
- mimeType: null;
49
- }
50
-
51
- type BrowserImageResizerConfig = BrowserImageResizerConfigWithConvertedOutput | BrowserImageResizerConfigWithOffscreenCanvasOutput;
52
-
53
- type WorkerSouceData = {
54
- source: ImageData;
55
- startY: number;
56
- height: number;
57
- }
58
-
59
- export default `(
60
- ${
61
- function () {
62
-
63
- async function listFilesInDirectory(directoryHandle: FileSystemDirectoryHandle) {
64
- const entries: { name: string; kind: FileSystemHandleKind }[] = [];
65
-
66
- for await (const [name, handle] of directoryHandle.entries()) {
67
- entries.push({
68
- name,
69
- kind: handle.kind,
70
- })
71
- }
72
-
73
- return entries;
74
- }
75
-
76
- const getFileHandle = async (path: string, rootHandle: FileSystemDirectoryHandle | null = null): Promise<FileSystemFileHandle> => {
77
- // Split the path into segments
78
- const segments = path.split('/').filter(Boolean);
79
-
80
- // Start from the root directory if not provided
81
- if (!rootHandle) {
82
- rootHandle = await navigator.storage.getDirectory();
83
- }
84
-
85
- let currentHandle = rootHandle;
86
-
87
- // Traverse the path segments
88
- for (let i = 0; i < segments.length; i++) {
89
- const segment = segments[i];
90
- const isLastSegment = i === segments.length - 1;
91
-
92
- try {
93
-
94
- for await (const [name, handle] of currentHandle.entries()) {
95
- if (name !== segment) {
96
- continue
97
- }
98
-
99
- if (isLastSegment) {
100
- if (handle.kind === 'file') {
101
- return handle as FileSystemFileHandle; // Return the file handle if found
102
- } else {
103
- throw new Error(`Path '${path}' refers to a directory, not a file.`);
104
- }
105
- } else if (handle.kind === 'directory') {
106
- currentHandle = handle as FileSystemDirectoryHandle; // Traverse into the directory
107
- } else {
108
- throw new Error(`Invalid path segment '${segment}'`);
109
- }
110
- }
111
- } catch (err) {
112
- if (err instanceof Error && err.name === 'NotFoundError') {
113
- throw new Error(`Path '${path}' does not exist.`);
114
- } else {
115
- throw err;
116
- }
117
- }
118
- }
119
-
120
- throw new Error(`Path '${path}' could not be resolved.`);
121
- }
122
-
123
- async function getFileFromOPFS(path: string): Promise<File> {
124
-
125
- const fileHandleAsync = await getFileHandle(path);
126
- const file = await fileHandleAsync.getFile();
127
- return file;
128
-
129
- }
130
-
131
- const DEFAULT_CONFIG = {
132
- argorithm: 'null',
133
- processByHalf: true,
134
- quality: 0.5,
135
- maxWidth: 800,
136
- maxHeight: 600,
137
- debug: false,
138
- mimeType: 'image/jpeg',
139
- } as const;
140
-
141
- function isIos() {
142
- if (typeof navigator === 'undefined') return false;
143
- if (!navigator.userAgent) return false;
144
- return /iPad|iPhone|iPod/.test(navigator.userAgent);
145
- }
146
-
147
- const getTargetHeight = (srcHeight: number, scale: number, config: BrowserImageResizerConfig) => {
148
- return Math.min(Math.floor(srcHeight * scale), config.maxHeight);
149
- }
150
-
151
- const findMaxWidth = (config: BrowserImageResizerConfig, canvas: { width: number; height: number }) => {
152
- //Let's find the max available width for scaled image
153
- const ratio = canvas.width / canvas.height;
154
- let mWidth = Math.min(
155
- canvas.width,
156
- config.maxWidth,
157
- ratio * config.maxHeight
158
- );
159
- if (
160
- config.maxSize &&
161
- config.maxSize > 0 &&
162
- config.maxSize < (canvas.width * canvas.height) / 1000
163
- )
164
- mWidth = Math.min(
165
- mWidth,
166
- Math.floor((config.maxSize * 1000) / canvas.height)
167
- );
168
- if (!!config.scaleRatio)
169
- mWidth = Math.min(mWidth, Math.floor(config.scaleRatio * canvas.width));
170
-
171
- const rHeight = getTargetHeight(canvas.height, mWidth / canvas.width, config);
172
-
173
- // console.log(
174
- // 'browser-image-resizer: original image size = ' +
175
- // canvas.width +
176
- // ' px (width) X ' +
177
- // canvas.height +
178
- // ' px (height)'
179
- // );
180
- // console.log(
181
- // 'browser-image-resizer: scaled image size = ' +
182
- // mWidth +
183
- // ' px (width) X ' +
184
- // rHeight +
185
- // ' px (height)'
186
- // );
187
- if (mWidth <= 0) {
188
- mWidth = 1;
189
- console.warn("browser-image-resizer: image size is too small");
190
- }
191
-
192
- if (isIos() && mWidth * rHeight > 167777216) {
193
- console.error("browser-image-resizer: image size is too large for iOS WebKit.", mWidth, rHeight);
194
- throw new Error("browser-image-resizer: image size is too large for iOS WebKit.");
195
- }
196
-
197
- return mWidth;
198
- }
199
-
200
- /**
201
- * Hermite resize, multicore version - fast image resize/resample using Hermite filter.
202
- */
203
- const resample = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean }) => {
204
- return new Promise<void>((resolve, reject) => {
205
-
206
- const ratio_h = srcCanvas.height / destCanvas.height;
207
- const cores = Math.min(navigator.hardwareConcurrency || 4, 4)
208
-
209
- //prepare source and target data for workers
210
- const ctx = srcCanvas.getContext('2d');
211
- if (!ctx) return reject('Canvas is empty (resample)');
212
-
213
- const data_part: WorkerSouceData[] = [];
214
- const block_height = Math.ceil(srcCanvas.height / cores / 2) * 2;
215
- let end_y = -1;
216
- for (let c = 0; c < cores; c++) {
217
- //source
218
- const offset_y = end_y + 1;
219
- if (offset_y >= srcCanvas.height) {
220
- //size too small, nothing left for this core
221
- continue;
222
- }
223
-
224
- end_y = Math.min(offset_y + block_height - 1, srcCanvas.height - 1);
225
-
226
- const current_block_height = Math.min(block_height, srcCanvas.height - offset_y);
227
-
228
- console.log('browser-image-resizer: source split: ', '#' + c, offset_y, end_y, 'height: ' + current_block_height);
229
-
230
- data_part.push({
231
- source: ctx.getImageData(0, offset_y, srcCanvas.width, block_height),
232
- startY: Math.ceil(offset_y / ratio_h),
233
- height: current_block_height
234
- });
235
- }
236
-
237
- //start
238
- const destCtx = destCanvas.getContext('2d');
239
- if (!destCtx) return reject('Canvas is empty (resample dest)');
240
- let workers_in_use = data_part.length;
241
- for (let c = 0; c < data_part.length; c++) {
242
-
243
- //draw
244
- const height_part = Math.ceil(data_part[c].height / ratio_h);
245
- const target = destCtx.createImageData(destCanvas.width, height_part);
246
- // target.data.set(event.data.target);
247
- destCtx.putImageData(target, 0, data_part[c].startY);
248
-
249
- }
250
- });
251
- };
252
-
253
- /**
254
- * Hermite resize - fast image resize/resample using Hermite filter. 1 cpu version!
255
- */
256
- const resampleSingle = (srcCanvasData: ImageData, destCanvasData: ImageData,) => {
257
- const ratio_w = srcCanvasData.width / destCanvasData.width;
258
- const ratio_h = srcCanvasData.height / destCanvasData.height;
259
- const ratio_w_half = Math.ceil(ratio_w / 2);
260
- const ratio_h_half = Math.ceil(ratio_h / 2);
261
-
262
- const data = srcCanvasData.data;
263
- const data2 = destCanvasData.data;
264
-
265
- for (let j = 0; j < destCanvasData.height; j++) {
266
- for (let i = 0; i < destCanvasData.width; i++) {
267
- const x2 = (i + j * destCanvasData.width) * 4;
268
- let weight = 0;
269
- let weights = 0;
270
- let weights_alpha = 0;
271
- let gx_r = 0;
272
- let gx_g = 0;
273
- let gx_b = 0;
274
- let gx_a = 0;
275
- const center_y = j * ratio_h;
276
-
277
- const xx_start = Math.floor(i * ratio_w);
278
- const xx_stop = Math.min(Math.ceil((i + 1) * ratio_w), srcCanvasData.width);
279
- const yy_start = Math.floor(j * ratio_h);
280
- const yy_stop = Math.min(Math.ceil((j + 1) * ratio_h), srcCanvasData.height);
281
-
282
- for (let yy = yy_start; yy < yy_stop; yy++) {
283
- let dy = Math.abs(center_y - yy) / ratio_h_half;
284
- let center_x = i * ratio_w;
285
- let w0 = dy * dy; //pre-calc part of w
286
- for (let xx = xx_start; xx < xx_stop; xx++) {
287
- let dx = Math.abs(center_x - xx) / ratio_w_half;
288
- let w = Math.sqrt(w0 + dx * dx);
289
- if (w >= 1) {
290
- //pixel too far
291
- continue;
292
- }
293
- //hermite filter
294
- weight = 2 * w * w * w - 3 * w * w + 1;
295
- let pos_x = 4 * (xx + yy * srcCanvasData.width);
296
- //alpha
297
- gx_a += weight * data[pos_x + 3];
298
- weights_alpha += weight;
299
- //colors
300
- if (data[pos_x + 3] < 255)
301
- weight = weight * data[pos_x + 3] / 250;
302
- gx_r += weight * data[pos_x];
303
- gx_g += weight * data[pos_x + 1];
304
- gx_b += weight * data[pos_x + 2];
305
- weights += weight;
306
- }
307
- }
308
- data2[x2] = gx_r / weights;
309
- data2[x2 + 1] = gx_g / weights;
310
- data2[x2 + 2] = gx_b / weights;
311
- data2[x2 + 3] = gx_a / weights_alpha;
312
- }
313
- }
314
- };
315
-
316
- /**
317
- * Hermite resize. Detect cpu count and use best option for user.
318
- */
319
- const resampleAuto = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean, argorithm?: string }) => {
320
- if (!!globalThis.Worker && navigator.hardwareConcurrency > 1 && config?.argorithm !== 'hermite_single') {
321
- //workers supported and we have at least 2 cpu cores - using multithreading
322
- return resample(srcCanvas, destCanvas, config);
323
- } else {
324
- //1 cpu version
325
- const { srcImgData, destImgData } = getImageData(srcCanvas, destCanvas);
326
- resampleSingle(srcImgData, destImgData, config);
327
- destCanvas.getContext('2d')!.putImageData(destImgData, 0, 0);
328
- return;
329
- }
330
- };
331
-
332
-
333
- async function scaleCanvasWithAlgorithm(canvas: OffscreenCanvas, config: BrowserImageResizerConfig & { outputWidth: number }) {
334
- const scale = config.outputWidth / canvas.width;
335
-
336
- const scaled = new OffscreenCanvas(Math.floor(config.outputWidth), getTargetHeight(canvas.height, scale, config));
337
-
338
- switch (config.algorithm) {
339
- case 'hermite': {
340
- await resampleAuto(canvas, scaled, config as BrowserImageResizerConfig & { algorithm: 'hermite' | 'hermite_single' });
341
- break;
342
- } case 'hermite_single': {
343
- const { srcImgData, destImgData } = getImageData(canvas, scaled);
344
- resampleSingle(srcImgData, destImgData,);
345
- scaled?.getContext('2d')?.putImageData(destImgData, 0, 0);
346
- break;
347
- } case 'bilinear': {
348
- // const { srcImgData, destImgData } = getImageData(canvas, scaled);
349
- // bilinear(srcImgData, destImgData, scale);
350
- // scaled?.getContext('2d')?.putImageData(destImgData, 0, 0);
351
- break;
352
- } default: {
353
- scaled.getContext('2d')?.drawImage(canvas, 0, 0, scaled.width, scaled.height);
354
- break;
355
- }
356
- }
357
-
358
- return scaled;
359
- }
360
-
361
- const getHalfScaleCanvas = (src: OffscreenCanvas | HTMLCanvasElement) => {
362
- const half = new OffscreenCanvas(src.width / 2, src.height / 2);
363
-
364
- half
365
- ?.getContext('2d')
366
- ?.drawImage(src, 0, 0, half.width, half.height);
367
-
368
- return half;
369
- }
370
-
371
- const getImageData = (canvas: OffscreenCanvas, scaled: OffscreenCanvas) => {
372
- const srcImgData = canvas
373
- ?.getContext('2d')
374
- ?.getImageData(0, 0, canvas.width, canvas.height);
375
- const destImgData = scaled
376
- ?.getContext('2d')
377
- ?.createImageData(scaled.width, scaled.height);
378
-
379
- if (!srcImgData || !destImgData) throw Error('Canvas is empty (scaleCanvasWithAlgorithm). You should run this script after the document is ready.');
380
-
381
- return { srcImgData, destImgData };
382
- }
383
-
384
- async function saveBlobToOPFS(filePath: string, blob: Blob): Promise<void> {
385
- // Access the OPFS root directory
386
- const rootHandle = await navigator.storage.getDirectory();
387
-
388
- // Split the filePath into directory segments and file name
389
- const segments = filePath.split('/').filter(Boolean);
390
- const fileName = segments.pop(); // Extract the file name
391
- if (!fileName) {
392
- throw new Error('Invalid file path: No file name provided.');
393
- }
394
-
395
- // Traverse or create directories as needed
396
- let currentDirHandle = rootHandle;
397
- for (const segment of segments) {
398
- currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true });
399
- }
400
-
401
- // Create or open the file in OPFS
402
- const fileHandle = await currentDirHandle.getFileHandle(fileName, { create: true });
403
-
404
- // Write the Blob to the file
405
- const writableStream = await fileHandle.createWritable();
406
- await writableStream.write(blob);
407
- await writableStream.close();
408
- }
409
-
410
-
411
- const imageResize = async (filePath: string, width: number, height: number) => {
412
-
413
- console.log({filePath, width, height})
414
-
415
- const config = {
416
- ...DEFAULT_CONFIG,
417
- algorithm: 'hermite_single',
418
- mimeType: 'image/webp',
419
- maxWidth: width,
420
- maxHeight: height,
421
- }
422
-
423
- const rootHandle = await navigator.storage.getDirectory();
424
-
425
- // List files in the root directory
426
- const files = await listFilesInDirectory(rootHandle);
427
- console.log({
428
- message: 'listFilesInDirectory',
429
- files
430
- });
431
-
432
- const file = await getFileFromOPFS(filePath);
433
-
434
- const imageBitmap = await createImageBitmap(file);
435
-
436
- let converting: OffscreenCanvas
437
-
438
- if (isIos() && imageBitmap.width * imageBitmap.height > 16777216) {
439
- const scale = Math.sqrt(16777216 / (imageBitmap.width * imageBitmap.height));
440
- console.log(`browser-image-resizer: scale: Image is too large in iOS WebKit`);
441
- converting = new OffscreenCanvas(Math.floor(imageBitmap.width * scale), Math.floor(imageBitmap.height * scale));
442
- converting.getContext('2d')?.drawImage(imageBitmap, 0, 0, converting.width, converting.height);
443
- } else {
444
- converting = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);
445
- converting.getContext('2d')?.drawImage(imageBitmap, 0, 0);
446
- }
447
-
448
- if (!converting?.getContext('2d')) {
449
- console.log('browser-image-resizer: Canvas Context is empty.')
450
- }
451
-
452
- const maxWidth = findMaxWidth(config, converting);
453
-
454
- if (!maxWidth){
455
- throw Error(`browser-image-resizer: maxWidth is ${maxWidth}!!`)
456
- };
457
-
458
- while (config.processByHalf && converting.width >= 2 * maxWidth) {
459
- if (config.debug) console.log(`browser-image-resizer: scale: Scaling canvas by half from ${converting.width}`);
460
- converting = getHalfScaleCanvas(converting);
461
- }
462
-
463
- if (converting.width > maxWidth) {
464
- if (config.debug) console.log(`browser-image-resizer: scale: Scaling canvas by ${config.argorithm} from ${converting.width} to ${maxWidth}`);
465
- converting = await scaleCanvasWithAlgorithm(
466
- converting,
467
- Object.assign(config, { outputWidth: maxWidth }),
468
- );
469
- }
470
-
471
- if (config.mimeType === null) {
472
- return converting;
473
- }
474
- const resizedBlob = await converting.convertToBlob({ type: config.mimeType, quality: config.quality });
475
-
476
- const pathSegments = filePath.split('/');
477
- const fileName = pathSegments.pop();
478
- if (!fileName) {
479
- throw Error('Invalid file path: No file name provided.');
480
- }
481
- const newSegments = [
482
- ...pathSegments,
483
- width,
484
- ]
485
- const fileNameParts = fileName.split('.')
486
- const newFileName = `${fileNameParts[0]}.webp`
487
- const newDirPath = newSegments.join('/');
488
- const newFilePath = `${newDirPath}/${newFileName}`;
489
-
490
- // Save resized image to OPFS with new name
491
- await saveBlobToOPFS(newFilePath, resizedBlob)
492
- globalThis.postMessage({
493
- done: true,
494
- filePath: newFilePath,
495
- })
496
-
497
- }
498
-
499
- onmessage = async (e) => {
500
- console.log('[imageResize] onmessage', e.data)
501
- const { filePath, width, height } = e.data
502
- await imageResize(filePath, width, height)
503
- console.log(`[imageResize] Done`, filePath)
504
- }
505
- }.toString()
506
- }
507
- )()`
@@ -1,5 +0,0 @@
1
- export type * from './wasm.d.ts'
2
-
3
- declare module '@seedprotocol/sdk' {
4
- export type * from '@/types'
5
- }
package/dist/src/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './analyzeInput'
2
- export * from './saveImageSrc'
3
- export * from './saveRelation'
4
- export * from './saveItemStorage'
@@ -1,124 +0,0 @@
1
- import { EventObject, fromCallback, Subscription } from 'xstate'
2
- import { getEnvironment } from '@/helpers/environment'
3
- import {
4
- GLOBAL_INITIALIZING_CREATE_ALL_ITEMS_SERVICES,
5
- GLOBAL_INITIALIZING_INTERNAL_SERVICE_READY,
6
- GLOBAL_INITIALIZING_SEND_CONFIG,
7
- } from '@/services/internal/constants'
8
- import debug from 'debug'
9
- import { FromCallbackInput, GlobalMachineContext } from '@/types'
10
- import { BaseDb } from '@/db/Db/BaseDb'
11
- import { appState } from '@/seedSchema'
12
- import { like } from 'drizzle-orm'
13
- import { fetchSchemaUids } from '@/stores/eas'
14
-
15
- const logger = debug('app:services:global:actors:initialize')
16
-
17
- export const initialize = fromCallback<
18
- EventObject,
19
- FromCallbackInput<GlobalMachineContext, EventObject>
20
- >(({ sendBack, input: { event, context } }) => {
21
- const { internalService, models, endpoints, arweaveDomain, addresses, } = context
22
-
23
- if (!internalService) {
24
- throw new Error('internalService is required')
25
- }
26
-
27
- if (!models) {
28
- throw new Error('models is required')
29
- }
30
-
31
-
32
- let environment = getEnvironment()
33
-
34
- let internalSubscription: Subscription | undefined
35
- let easSubscription: Subscription | undefined
36
-
37
- const _initFileSystem = async (): Promise<void> => {
38
- return
39
- // return new Promise((resolve) => {
40
- // })
41
- }
42
-
43
- const _initInternal = async (): Promise<void> => {
44
- return new Promise((resolve) => {
45
- internalSubscription = internalService.subscribe((snapshot) => {
46
- logger('[sdk] [internal] snapshot', snapshot)
47
- if (snapshot.value === 'ready') {
48
- resolve()
49
- }
50
- })
51
- internalService.send({
52
- type: 'init',
53
- endpoints,
54
- addresses,
55
- arweaveDomain,
56
- })
57
- })
58
- }
59
-
60
- const _initAllItemsServices = async (): Promise<void> => {
61
- const appDb = BaseDb.getAppDb()
62
-
63
- const rows = await appDb
64
- .select()
65
- .from(appState)
66
- .where(like(appState.key, 'snapshot__%'))
67
-
68
- const payloadObj = {
69
- create: {},
70
- restore: {},
71
- }
72
-
73
- const modelNamesRestored: string[] = []
74
-
75
- if (rows && rows.length > 0) {
76
- for (const row of rows) {
77
- const modelName = row.key.replace('snapshot__', '')
78
- payloadObj.restore[modelName] = JSON.parse(row.value)
79
- modelNamesRestored.push(modelName)
80
- }
81
- }
82
- for (const [modelName, ModelClass] of Object.entries(models)) {
83
- if (!modelNamesRestored.includes(modelName)) {
84
- payloadObj.create[modelName] = ModelClass
85
- }
86
- }
87
- sendBack({
88
- type: GLOBAL_INITIALIZING_CREATE_ALL_ITEMS_SERVICES,
89
- ...payloadObj,
90
- })
91
- }
92
-
93
- const _initEas = async (): Promise<void> => {
94
- await fetchSchemaUids()
95
- }
96
-
97
- _initFileSystem().then(() => {
98
- logger('[global/actors] File system initialized')
99
- })
100
-
101
- _initInternal()
102
- .then(() => {
103
- return _initAllItemsServices()
104
- })
105
- .then(() => {
106
- return _initEas()
107
- })
108
- .then(() => {
109
- logger('[global/actors] Internal initialized')
110
- sendBack({ type: GLOBAL_INITIALIZING_INTERNAL_SERVICE_READY })
111
- internalSubscription?.unsubscribe()
112
- })
113
-
114
- // _initEas().then(() => {
115
- // logger('EAS initialized')
116
- // })
117
-
118
- sendBack({ type: GLOBAL_INITIALIZING_SEND_CONFIG, environment })
119
-
120
- return () => {
121
- internalSubscription?.unsubscribe()
122
- easSubscription?.unsubscribe()
123
- }
124
- })