@xyo-network/image-thumbnail-plugin 2.70.10 → 2.70.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Witness/Witness.js +146 -146
- package/dist/cjs/Witness/Witness.js.map +1 -1
- package/dist/docs.json +3820 -2370
- package/dist/esm/Witness/Witness.js +138 -143
- package/dist/esm/Witness/Witness.js.map +1 -1
- package/dist/types/Witness/Witness.d.ts +27 -8
- package/dist/types/Witness/Witness.d.ts.map +1 -1
- package/package.json +11 -9
- package/src/Witness/Witness.ts +155 -154
|
@@ -1,69 +1,18 @@
|
|
|
1
|
+
import { promises as dnsPromises } from 'node:dns';
|
|
1
2
|
import { axios } from '@xyo-network/axios';
|
|
2
3
|
import { PayloadHasher } from '@xyo-network/core';
|
|
3
4
|
import { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin';
|
|
4
|
-
import { isPayload, ModuleErrorSchema } from '@xyo-network/payload-model';
|
|
5
5
|
import { AbstractWitness } from '@xyo-network/witness';
|
|
6
6
|
import { subClass } from 'gm';
|
|
7
|
+
import { sync as hasbin } from 'hasbin';
|
|
7
8
|
import { sha256 } from 'hash-wasm';
|
|
8
9
|
import compact from 'lodash/compact';
|
|
9
|
-
import isBuffer from 'lodash/isBuffer';
|
|
10
10
|
import { LRUCache } from 'lru-cache';
|
|
11
11
|
import shajs from 'sha.js';
|
|
12
12
|
import Url from 'url-parse';
|
|
13
13
|
import { ImageThumbnailWitnessConfigSchema } from './Config';
|
|
14
14
|
//TODO: Break this into two Witnesses?
|
|
15
15
|
const gm = subClass({ imageMagick: '7+' });
|
|
16
|
-
export const binaryToSha256 = async (data) => {
|
|
17
|
-
await PayloadHasher.wasmInitialized;
|
|
18
|
-
if (PayloadHasher.wasmSupport.canUseWasm) {
|
|
19
|
-
try {
|
|
20
|
-
return await sha256(data);
|
|
21
|
-
}
|
|
22
|
-
catch (ex) {
|
|
23
|
-
PayloadHasher.wasmSupport.allowWasm = false;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
// eslint-disable-next-line deprecation/deprecation
|
|
27
|
-
return shajs('sha256').update(data).digest().toString();
|
|
28
|
-
};
|
|
29
|
-
const checkIpfsUrl = (urlToCheck) => {
|
|
30
|
-
const url = new Url(urlToCheck);
|
|
31
|
-
let protocol = url.protocol;
|
|
32
|
-
let host = url.host;
|
|
33
|
-
let path = url.pathname;
|
|
34
|
-
const query = url.query;
|
|
35
|
-
if (protocol === 'ipfs:') {
|
|
36
|
-
protocol = 'https:';
|
|
37
|
-
host = 'cloudflare-ipfs.com';
|
|
38
|
-
path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
39
|
-
const root = `${protocol}//${host}/${path}`;
|
|
40
|
-
return query?.length > 0 ? `root?${query}` : root;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
return urlToCheck;
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
const checkDataUrl = (url) => {
|
|
47
|
-
if (url.startsWith('data:image')) {
|
|
48
|
-
const data = url.split(',')[1];
|
|
49
|
-
if (data) {
|
|
50
|
-
const buffer = Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)));
|
|
51
|
-
console.log(`data buffer: ${buffer.length}`);
|
|
52
|
-
return [buffer, undefined];
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
const error = {
|
|
56
|
-
message: 'Invalid data Url',
|
|
57
|
-
schema: ModuleErrorSchema,
|
|
58
|
-
url,
|
|
59
|
-
};
|
|
60
|
-
return [undefined, error];
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
return [undefined, undefined];
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
16
|
export class ImageThumbnailWitness extends AbstractWitness {
|
|
68
17
|
static configSchemas = [ImageThumbnailWitnessConfigSchema];
|
|
69
18
|
_cache;
|
|
@@ -86,116 +35,162 @@ export class ImageThumbnailWitness extends AbstractWitness {
|
|
|
86
35
|
get width() {
|
|
87
36
|
return this.config.width ?? 128;
|
|
88
37
|
}
|
|
38
|
+
static async binaryToSha256(data) {
|
|
39
|
+
await PayloadHasher.wasmInitialized;
|
|
40
|
+
if (PayloadHasher.wasmSupport.canUseWasm) {
|
|
41
|
+
try {
|
|
42
|
+
return await sha256(data);
|
|
43
|
+
}
|
|
44
|
+
catch (ex) {
|
|
45
|
+
PayloadHasher.wasmSupport.allowWasm = false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
49
|
+
return shajs('sha256').update(data).digest().toString();
|
|
50
|
+
}
|
|
51
|
+
static bufferFromDataUrl(url) {
|
|
52
|
+
if (url.startsWith('data:image')) {
|
|
53
|
+
const data = url.split(',')[1];
|
|
54
|
+
if (data) {
|
|
55
|
+
const buffer = Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)));
|
|
56
|
+
console.log(`data buffer: ${buffer.length}`);
|
|
57
|
+
return buffer;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const error = {
|
|
61
|
+
message: 'Invalid data Url',
|
|
62
|
+
name: 'ImageThumbnailWitnessError',
|
|
63
|
+
url,
|
|
64
|
+
};
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
static checkIpfsUrl(urlToCheck) {
|
|
70
|
+
const url = new Url(urlToCheck);
|
|
71
|
+
let protocol = url.protocol;
|
|
72
|
+
let host = url.host;
|
|
73
|
+
let path = url.pathname;
|
|
74
|
+
const query = url.query;
|
|
75
|
+
if (protocol === 'ipfs:') {
|
|
76
|
+
protocol = 'https:';
|
|
77
|
+
host = 'cloudflare-ipfs.com';
|
|
78
|
+
path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
79
|
+
const root = `${protocol}//${host}/${path}`;
|
|
80
|
+
return query?.length > 0 ? `root?${query}` : root;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return urlToCheck;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
89
86
|
async observeHandler(payloads = []) {
|
|
90
|
-
|
|
87
|
+
if (!hasbin('magick')) {
|
|
88
|
+
throw Error('ImageMagick is required for this witness');
|
|
89
|
+
}
|
|
90
|
+
return compact(await Promise.all(payloads.map(async ({ url }) => {
|
|
91
91
|
const cachedResult = this.cache.get(url);
|
|
92
92
|
if (cachedResult) {
|
|
93
|
-
return
|
|
93
|
+
return cachedResult;
|
|
94
94
|
}
|
|
95
|
+
let result;
|
|
95
96
|
//if it is a data URL, return a Buffer
|
|
96
|
-
const
|
|
97
|
+
const dataBuffer = ImageThumbnailWitness.bufferFromDataUrl(url);
|
|
97
98
|
if (dataBuffer) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
//if it is ipfs, go through cloud flair
|
|
104
|
-
const mutatedUrl = checkIpfsUrl(url);
|
|
105
|
-
try {
|
|
106
|
-
return [
|
|
99
|
+
result = {
|
|
100
|
+
schema: ImageThumbnailSchema,
|
|
101
|
+
sourceHash: await ImageThumbnailWitness.binaryToSha256(dataBuffer),
|
|
102
|
+
sourceUrl: url,
|
|
107
103
|
url,
|
|
108
|
-
|
|
109
|
-
responseType: 'arraybuffer',
|
|
110
|
-
}),
|
|
111
|
-
];
|
|
104
|
+
};
|
|
112
105
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const errorPayload = {
|
|
118
|
-
code: axiosError.code,
|
|
119
|
-
message: axiosError.message,
|
|
120
|
-
schema: ModuleErrorSchema,
|
|
121
|
-
status: axiosError.status,
|
|
122
|
-
url,
|
|
123
|
-
};
|
|
124
|
-
return [url, errorPayload];
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
throw ex;
|
|
128
|
-
}
|
|
106
|
+
else {
|
|
107
|
+
//if it is ipfs, go through cloud flair
|
|
108
|
+
const mutatedUrl = ImageThumbnailWitness.checkIpfsUrl(url);
|
|
109
|
+
result = await this.fromHttp(mutatedUrl);
|
|
129
110
|
}
|
|
111
|
+
this.cache.set(url, result);
|
|
112
|
+
return result;
|
|
130
113
|
})));
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const response = urlResult;
|
|
142
|
-
if (response.status >= 200 && response.status < 300) {
|
|
143
|
-
const contentType = response.headers['content-type']?.toString();
|
|
144
|
-
if (contentType.split('/')[0] !== 'image') {
|
|
145
|
-
const error = {
|
|
146
|
-
message: `Invalid file type: ${contentType}`,
|
|
147
|
-
schema: ModuleErrorSchema,
|
|
148
|
-
url,
|
|
149
|
-
};
|
|
150
|
-
this.cache.set(url, error);
|
|
151
|
-
return error;
|
|
152
|
-
}
|
|
153
|
-
sourceBuffer = Buffer.from(response.data, 'binary');
|
|
114
|
+
}
|
|
115
|
+
async createThumbnail(sourceBuffer) {
|
|
116
|
+
const thumb = await new Promise((resolve, reject) => {
|
|
117
|
+
gm(sourceBuffer)
|
|
118
|
+
.quality(this.quality)
|
|
119
|
+
.resize(this.width, this.height)
|
|
120
|
+
.flatten()
|
|
121
|
+
.toBuffer(this.encoding, (error, buffer) => {
|
|
122
|
+
if (error) {
|
|
123
|
+
reject(error);
|
|
154
124
|
}
|
|
155
125
|
else {
|
|
156
|
-
|
|
157
|
-
schema: ModuleErrorSchema,
|
|
158
|
-
status: response.status,
|
|
159
|
-
url,
|
|
160
|
-
};
|
|
161
|
-
this.cache.set(url, error);
|
|
162
|
-
return error;
|
|
126
|
+
resolve(buffer);
|
|
163
127
|
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
return `data:image/png;base64,${thumb.toString('base64')}`;
|
|
131
|
+
}
|
|
132
|
+
async fromHttp(url) {
|
|
133
|
+
let response;
|
|
134
|
+
let dnsResult;
|
|
135
|
+
try {
|
|
136
|
+
const urlObj = new Url(url);
|
|
137
|
+
dnsResult = await dnsPromises.resolve(urlObj.host);
|
|
138
|
+
console.log(`dnsResult: ${JSON.stringify(dnsResult, null, 2)}`);
|
|
139
|
+
}
|
|
140
|
+
catch (ex) {
|
|
141
|
+
const error = ex;
|
|
142
|
+
const result = {
|
|
143
|
+
http: {
|
|
144
|
+
dnsError: error.code,
|
|
145
|
+
},
|
|
146
|
+
schema: ImageThumbnailSchema,
|
|
147
|
+
sourceUrl: url,
|
|
148
|
+
};
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
response = await axios.get(url, {
|
|
153
|
+
responseType: 'arraybuffer',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (ex) {
|
|
157
|
+
const axiosError = ex;
|
|
158
|
+
if (axiosError.isAxiosError) {
|
|
159
|
+
//selectively pick fields from AxiosError
|
|
180
160
|
const result = {
|
|
161
|
+
http: {
|
|
162
|
+
ipAddress: dnsResult[0],
|
|
163
|
+
status: axiosError.status,
|
|
164
|
+
},
|
|
181
165
|
schema: ImageThumbnailSchema,
|
|
182
|
-
sourceHash: await binaryToSha256(sourceBuffer),
|
|
183
166
|
sourceUrl: url,
|
|
184
|
-
url: `data:image/png;base64,${thumb.toString('base64')}`,
|
|
185
167
|
};
|
|
186
|
-
this.cache.set(url, result);
|
|
187
168
|
return result;
|
|
188
169
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
message: 'Failed to resize image',
|
|
192
|
-
schema: ModuleErrorSchema,
|
|
193
|
-
url,
|
|
194
|
-
};
|
|
195
|
-
this.cache.set(url, error);
|
|
196
|
-
return error;
|
|
170
|
+
else {
|
|
171
|
+
throw ex;
|
|
197
172
|
}
|
|
198
|
-
}
|
|
173
|
+
}
|
|
174
|
+
const result = {
|
|
175
|
+
http: {
|
|
176
|
+
status: response.status,
|
|
177
|
+
},
|
|
178
|
+
schema: ImageThumbnailSchema,
|
|
179
|
+
sourceUrl: url,
|
|
180
|
+
};
|
|
181
|
+
if (response.status >= 200 && response.status < 300) {
|
|
182
|
+
const contentType = response.headers['content-type']?.toString();
|
|
183
|
+
if (contentType.split('/')[0] !== 'image') {
|
|
184
|
+
result.mime = result.mime ?? {};
|
|
185
|
+
result.mime.invalid = true;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const sourceBuffer = Buffer.from(response.data, 'binary');
|
|
189
|
+
result.sourceHash = await ImageThumbnailWitness.binaryToSha256(sourceBuffer);
|
|
190
|
+
result.url = await this.createThumbnail(sourceBuffer);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
199
194
|
}
|
|
200
195
|
}
|
|
201
196
|
//# sourceMappingURL=Witness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA6B,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,44 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin';
|
|
2
2
|
import { UrlPayload } from '@xyo-network/url-payload-plugin';
|
|
3
3
|
import { AbstractWitness } from '@xyo-network/witness';
|
|
4
4
|
import { LRUCache } from 'lru-cache';
|
|
5
5
|
import { ImageThumbnailWitnessParams } from './Params';
|
|
6
|
-
export
|
|
6
|
+
export interface ImageThumbnailWitnessError extends Error {
|
|
7
|
+
name: 'ImageThumbnailWitnessError';
|
|
8
|
+
url: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DnsError extends Error {
|
|
11
|
+
code: string;
|
|
12
|
+
}
|
|
7
13
|
export declare class ImageThumbnailWitness<TParams extends ImageThumbnailWitnessParams = ImageThumbnailWitnessParams> extends AbstractWitness<TParams> {
|
|
8
14
|
static configSchemas: "network.xyo.image.thumbnail.witness.config"[];
|
|
9
15
|
private _cache?;
|
|
10
|
-
get cache(): LRUCache<string,
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
get cache(): LRUCache<string, import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
|
|
17
|
+
http?: {
|
|
18
|
+
dnsError?: string | undefined;
|
|
19
|
+
ipAddress?: string | undefined;
|
|
20
|
+
status?: number | undefined;
|
|
21
|
+
} | undefined;
|
|
22
|
+
mime?: {
|
|
23
|
+
invalid?: boolean | undefined;
|
|
24
|
+
type?: string | undefined;
|
|
25
|
+
} | undefined;
|
|
26
|
+
sourceHash?: string | undefined;
|
|
13
27
|
sourceUrl: string;
|
|
14
|
-
url
|
|
28
|
+
url?: string | undefined;
|
|
15
29
|
} & {
|
|
16
30
|
schema: "network.xyo.image.thumbnail";
|
|
17
|
-
}
|
|
31
|
+
}, unknown>;
|
|
18
32
|
get encoding(): "PNG";
|
|
19
33
|
get height(): number;
|
|
20
34
|
get maxCacheEntries(): number;
|
|
21
35
|
get quality(): number;
|
|
22
36
|
get width(): number;
|
|
23
|
-
|
|
37
|
+
private static binaryToSha256;
|
|
38
|
+
private static bufferFromDataUrl;
|
|
39
|
+
private static checkIpfsUrl;
|
|
40
|
+
protected observeHandler(payloads?: UrlPayload[]): Promise<ImageThumbnail[]>;
|
|
41
|
+
private createThumbnail;
|
|
42
|
+
private fromHttp;
|
|
24
43
|
}
|
|
25
44
|
//# sourceMappingURL=Witness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAwB,MAAM,6CAA6C,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAKtD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAKpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAMtD,MAAM,WAAW,0BAA2B,SAAQ,KAAK;IACvD,IAAI,EAAE,4BAA4B,CAAA;IAClC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,qBAAqB,CAAC,OAAO,SAAS,2BAA2B,GAAG,2BAA2B,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAC5I,OAAgB,aAAa,iDAAsC;IAEnE,OAAO,CAAC,MAAM,CAAC,CAAkC;IAEjD,IAAI,KAAK;;;;;;;;;;;;;;;gBAGR;IAED,IAAI,QAAQ,UAEX;IAED,IAAI,MAAM,WAET;IAED,IAAI,eAAe,WAElB;IAED,IAAI,OAAO,WAEV;IAED,IAAI,KAAK,WAER;mBAEoB,cAAc;IAanC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAkBhC,OAAO,CAAC,MAAM,CAAC,YAAY;cAiBF,cAAc,CAAC,QAAQ,GAAE,UAAU,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAmCjF,eAAe;YAiBf,QAAQ;CA6DvB"}
|
package/package.json
CHANGED
|
@@ -10,15 +10,16 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xyo-network/axios": "~2.70.
|
|
14
|
-
"@xyo-network/core": "~2.70.
|
|
15
|
-
"@xyo-network/image-thumbnail-payload-plugin": "~2.70.
|
|
16
|
-
"@xyo-network/module": "~2.70.
|
|
17
|
-
"@xyo-network/payload-model": "~2.70.
|
|
18
|
-
"@xyo-network/payloadset-plugin": "~2.70.
|
|
19
|
-
"@xyo-network/url-payload-plugin": "~2.70.
|
|
20
|
-
"@xyo-network/witness": "~2.70.
|
|
13
|
+
"@xyo-network/axios": "~2.70.14",
|
|
14
|
+
"@xyo-network/core": "~2.70.14",
|
|
15
|
+
"@xyo-network/image-thumbnail-payload-plugin": "~2.70.12",
|
|
16
|
+
"@xyo-network/module": "~2.70.14",
|
|
17
|
+
"@xyo-network/payload-model": "~2.70.14",
|
|
18
|
+
"@xyo-network/payloadset-plugin": "~2.70.14",
|
|
19
|
+
"@xyo-network/url-payload-plugin": "~2.70.14",
|
|
20
|
+
"@xyo-network/witness": "~2.70.14",
|
|
21
21
|
"gm": "^1.25.0",
|
|
22
|
+
"hasbin": "^1.2.3",
|
|
22
23
|
"hash-wasm": "^4.9.0",
|
|
23
24
|
"lodash": "^4.17.21",
|
|
24
25
|
"lru-cache": "^10.0.0",
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
29
30
|
"@types/gm": "^1.25.1",
|
|
31
|
+
"@types/hasbin": "^1.2.0",
|
|
30
32
|
"@types/lodash": "^4.14.196",
|
|
31
33
|
"@xylabs/ts-scripts-yarn3": "^2.19.0",
|
|
32
34
|
"@xylabs/tsconfig": "^2.19.0",
|
|
@@ -65,5 +67,5 @@
|
|
|
65
67
|
},
|
|
66
68
|
"sideEffects": false,
|
|
67
69
|
"types": "dist/types/index.d.ts",
|
|
68
|
-
"version": "2.70.
|
|
70
|
+
"version": "2.70.12"
|
|
69
71
|
}
|