@proteinjs/user-server 1.9.0 → 1.10.0
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/CHANGELOG.md +27 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/src/services/AccessInvite.d.ts.map +1 -1
- package/dist/src/services/AccessInvite.js +32 -15
- package/dist/src/services/AccessInvite.js.map +1 -1
- package/dist/src/services/UpdateUserInfo.d.ts +27 -5
- package/dist/src/services/UpdateUserInfo.d.ts.map +1 -1
- package/dist/src/services/UpdateUserInfo.js +72 -13
- package/dist/src/services/UpdateUserInfo.js.map +1 -1
- package/dist/test/AvatarPhotoFidelity.test.d.ts +2 -0
- package/dist/test/AvatarPhotoFidelity.test.d.ts.map +1 -0
- package/dist/test/AvatarPhotoFidelity.test.js +221 -0
- package/dist/test/AvatarPhotoFidelity.test.js.map +1 -0
- package/dist/test/UpdateUserInfoAvatar.test.js +5 -4
- package/dist/test/UpdateUserInfoAvatar.test.js.map +1 -1
- package/dist/test/avatarRoute.test.js +4 -2
- package/dist/test/avatarRoute.test.js.map +1 -1
- package/generated/index.ts +1 -1
- package/index.ts +4 -1
- package/package.json +8 -8
- package/src/services/AccessInvite.ts +36 -12
- package/src/services/UpdateUserInfo.ts +72 -8
- package/test/AvatarPhotoFidelity.test.ts +109 -0
- package/test/UpdateUserInfoAvatar.test.ts +7 -4
- package/test/avatarRoute.test.ts +4 -2
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import { UpdatePasswordResponse, UpdatedUser, UpdateUserInfoService } from '@proteinjs/user';
|
|
1
|
+
import { UpdatePasswordResponse, UpdatedUser, UpdateUserInfoService, AvatarCrop } from '@proteinjs/user';
|
|
2
2
|
export declare class UpdateUserInfo implements UpdateUserInfoService {
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Stored avatar photos are square JPEGs capped at this edge — and never ENLARGED to it: a
|
|
5
|
+
* source (or crop) smaller than the cap keeps its honest pixel count. Upscaling a small photo
|
|
6
|
+
* to a fixed 512 invents pixels that read as permanent blur on every chip that renders it
|
|
7
|
+
* (the founder's fuzzy-avatar defect); the display layer downscales crisply from whatever
|
|
8
|
+
* honest size is stored.
|
|
9
|
+
*/
|
|
10
|
+
private static readonly AVATAR_MAX_SIZE;
|
|
5
11
|
private static readonly AVATAR_JPEG_QUALITY;
|
|
6
12
|
private static readonly MAX_AVATAR_PHOTO_BYTES;
|
|
7
13
|
private static readonly ACCEPTED_AVATAR_MIME_TYPES;
|
|
@@ -16,7 +22,7 @@ export declare class UpdateUserInfo implements UpdateUserInfoService {
|
|
|
16
22
|
};
|
|
17
23
|
updateName(name: string): Promise<UpdatedUser>;
|
|
18
24
|
updatePassword(currentPassword: string, newPassword: string): Promise<UpdatePasswordResponse>;
|
|
19
|
-
updateAvatarPhoto(fileData: string, mimeType: string): Promise<UpdatedUser>;
|
|
25
|
+
updateAvatarPhoto(fileData: string, mimeType: string, crop?: AvatarCrop): Promise<UpdatedUser>;
|
|
20
26
|
updateAvatarEmoji(emoji: string): Promise<UpdatedUser>;
|
|
21
27
|
clearAvatar(): Promise<UpdatedUser>;
|
|
22
28
|
/**
|
|
@@ -36,7 +42,11 @@ export declare class UpdateUserInfo implements UpdateUserInfoService {
|
|
|
36
42
|
*/
|
|
37
43
|
private saveUserInfo;
|
|
38
44
|
/**
|
|
39
|
-
*
|
|
45
|
+
* THE avatar image pipeline — the only place avatar pixels are ever resampled: decode,
|
|
46
|
+
* auto-orient from EXIF, extract the crop frame (client-framed, or the centered square),
|
|
47
|
+
* one high-quality resize down to at most AVATAR_MAX_SIZE (never up), re-encode JPEG.
|
|
48
|
+
* Clients send ORIGINAL bytes; a client-side canvas export would resample a second time
|
|
49
|
+
* (and with the browser's low-default smoothing), baking blur into the stored master.
|
|
40
50
|
* sharp drops metadata (EXIF orientation/GPS) on re-encode by default — the stored avatar
|
|
41
51
|
* carries no camera metadata. HEIC/HEIF (default iPhone camera format) is decoded with WASM
|
|
42
52
|
* libheif (`heic-decode`) because sharp's prebuilt libvips has no HEVC decoder. NOTE: this
|
|
@@ -44,6 +54,18 @@ export declare class UpdateUserInfo implements UpdateUserInfoService {
|
|
|
44
54
|
* package cannot import (layering) — future extraction target: a shared image-transform seam.
|
|
45
55
|
*/
|
|
46
56
|
private toAvatarJpeg;
|
|
57
|
+
/**
|
|
58
|
+
* The decoded image's dimensions in DISPLAYED (EXIF-oriented) pixel space — the space the
|
|
59
|
+
* client framed its crop in, and the space `.rotate()` makes `.extract` operate in.
|
|
60
|
+
* Orientations 5-8 transpose the encoded axes.
|
|
61
|
+
*/
|
|
62
|
+
private orientedDimensions;
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the crop request against the real image: round to whole pixels and clamp fully
|
|
65
|
+
* inside the oriented bounds, staying square. Absent crop = the centered square (identical
|
|
66
|
+
* to the old `fit: cover` center-crop, so no-crop clients keep byte-equivalent behavior).
|
|
67
|
+
*/
|
|
68
|
+
private clampCrop;
|
|
47
69
|
private decodeHeic;
|
|
48
70
|
}
|
|
49
71
|
//# sourceMappingURL=UpdateUserInfo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateUserInfo.d.ts","sourceRoot":"","sources":["../../../src/services/UpdateUserInfo.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"UpdateUserInfo.d.ts","sourceRoot":"","sources":["../../../src/services/UpdateUserInfo.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,UAAU,EACX,MAAM,iBAAiB,CAAC;AAIzB,qBAAa,cAAe,YAAW,qBAAqB;IAC1D;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAoB;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAMhD;IACF,mGAAmG;IACnG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAM;IACrD,mGAAmG;IACnG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAiF;IAE/G,eAAe;;;;MAIpB;IAEI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI9C,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkD7F,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAoB9F,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IActD,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAIzC;;;;;OAKG;YACW,SAAS;IAWvB;;;;;;;OAOG;YACW,YAAY;IAW1B;;;;;;;;;;;OAWG;YACW,YAAY;IAe1B;;;;OAIG;YACW,kBAAkB;IAahC;;;;OAIG;IACH,OAAO,CAAC,SAAS;YAmBH,UAAU;CAMzB"}
|
|
@@ -136,7 +136,7 @@ var UpdateUserInfo = /** @class */ (function () {
|
|
|
136
136
|
});
|
|
137
137
|
});
|
|
138
138
|
};
|
|
139
|
-
UpdateUserInfo.prototype.updateAvatarPhoto = function (fileData, mimeType) {
|
|
139
|
+
UpdateUserInfo.prototype.updateAvatarPhoto = function (fileData, mimeType, crop) {
|
|
140
140
|
return __awaiter(this, void 0, void 0, function () {
|
|
141
141
|
var imageBytes, jpeg, file;
|
|
142
142
|
return __generator(this, function (_a) {
|
|
@@ -149,7 +149,7 @@ var UpdateUserInfo = /** @class */ (function () {
|
|
|
149
149
|
if (imageBytes.length > UpdateUserInfo.MAX_AVATAR_PHOTO_BYTES) {
|
|
150
150
|
throw new Error("Avatar photo is too large (max 10MB)");
|
|
151
151
|
}
|
|
152
|
-
return [4 /*yield*/, this.toAvatarJpeg(imageBytes, mimeType)];
|
|
152
|
+
return [4 /*yield*/, this.toAvatarJpeg(imageBytes, mimeType, crop)];
|
|
153
153
|
case 1:
|
|
154
154
|
jpeg = _a.sent();
|
|
155
155
|
return [4 /*yield*/, new db_file_1.FileStorage().createFile({ name: 'avatar.jpg', type: 'image/jpeg', size: jpeg.length }, jpeg.toString('base64'))];
|
|
@@ -250,38 +250,91 @@ var UpdateUserInfo = /** @class */ (function () {
|
|
|
250
250
|
});
|
|
251
251
|
};
|
|
252
252
|
/**
|
|
253
|
-
*
|
|
253
|
+
* THE avatar image pipeline — the only place avatar pixels are ever resampled: decode,
|
|
254
|
+
* auto-orient from EXIF, extract the crop frame (client-framed, or the centered square),
|
|
255
|
+
* one high-quality resize down to at most AVATAR_MAX_SIZE (never up), re-encode JPEG.
|
|
256
|
+
* Clients send ORIGINAL bytes; a client-side canvas export would resample a second time
|
|
257
|
+
* (and with the browser's low-default smoothing), baking blur into the stored master.
|
|
254
258
|
* sharp drops metadata (EXIF orientation/GPS) on re-encode by default — the stored avatar
|
|
255
259
|
* carries no camera metadata. HEIC/HEIF (default iPhone camera format) is decoded with WASM
|
|
256
260
|
* libheif (`heic-decode`) because sharp's prebuilt libvips has no HEVC decoder. NOTE: this
|
|
257
261
|
* duplicates the HEIC-normalization approach of chat-server's FileTransformer, which this
|
|
258
262
|
* package cannot import (layering) — future extraction target: a shared image-transform seam.
|
|
259
263
|
*/
|
|
260
|
-
UpdateUserInfo.prototype.toAvatarJpeg = function (imageBytes, mimeType) {
|
|
264
|
+
UpdateUserInfo.prototype.toAvatarJpeg = function (imageBytes, mimeType, crop) {
|
|
261
265
|
return __awaiter(this, void 0, void 0, function () {
|
|
262
|
-
var pipeline, _a;
|
|
263
|
-
return __generator(this, function (
|
|
264
|
-
switch (
|
|
266
|
+
var pipeline, _a, _b, width, height, frame, target;
|
|
267
|
+
return __generator(this, function (_c) {
|
|
268
|
+
switch (_c.label) {
|
|
265
269
|
case 0:
|
|
266
270
|
if (!(mimeType === 'image/heic' || mimeType === 'image/heif')) return [3 /*break*/, 2];
|
|
267
271
|
return [4 /*yield*/, this.decodeHeic(imageBytes)];
|
|
268
272
|
case 1:
|
|
269
|
-
_a =
|
|
273
|
+
_a = _c.sent();
|
|
270
274
|
return [3 /*break*/, 3];
|
|
271
275
|
case 2:
|
|
272
276
|
_a = (0, sharp_1.default)(imageBytes).rotate();
|
|
273
|
-
|
|
277
|
+
_c.label = 3;
|
|
274
278
|
case 3:
|
|
275
279
|
pipeline = _a;
|
|
280
|
+
return [4 /*yield*/, this.orientedDimensions(pipeline)];
|
|
281
|
+
case 4:
|
|
282
|
+
_b = _c.sent(), width = _b.width, height = _b.height;
|
|
283
|
+
frame = this.clampCrop(crop, width, height);
|
|
284
|
+
target = Math.min(UpdateUserInfo.AVATAR_MAX_SIZE, frame.size);
|
|
276
285
|
return [4 /*yield*/, pipeline
|
|
277
|
-
.
|
|
286
|
+
.extract({ left: frame.left, top: frame.top, width: frame.size, height: frame.size })
|
|
287
|
+
.resize(target, target, { fit: 'cover' })
|
|
278
288
|
.jpeg({ quality: UpdateUserInfo.AVATAR_JPEG_QUALITY })
|
|
279
289
|
.toBuffer()];
|
|
280
|
-
case
|
|
290
|
+
case 5: return [2 /*return*/, _c.sent()];
|
|
281
291
|
}
|
|
282
292
|
});
|
|
283
293
|
});
|
|
284
294
|
};
|
|
295
|
+
/**
|
|
296
|
+
* The decoded image's dimensions in DISPLAYED (EXIF-oriented) pixel space — the space the
|
|
297
|
+
* client framed its crop in, and the space `.rotate()` makes `.extract` operate in.
|
|
298
|
+
* Orientations 5-8 transpose the encoded axes.
|
|
299
|
+
*/
|
|
300
|
+
UpdateUserInfo.prototype.orientedDimensions = function (pipeline) {
|
|
301
|
+
var _a;
|
|
302
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
303
|
+
var metadata, transposed;
|
|
304
|
+
return __generator(this, function (_b) {
|
|
305
|
+
switch (_b.label) {
|
|
306
|
+
case 0: return [4 /*yield*/, pipeline.metadata()];
|
|
307
|
+
case 1:
|
|
308
|
+
metadata = _b.sent();
|
|
309
|
+
if (!metadata.width || !metadata.height) {
|
|
310
|
+
throw new Error("Could not read avatar image dimensions");
|
|
311
|
+
}
|
|
312
|
+
transposed = ((_a = metadata.orientation) !== null && _a !== void 0 ? _a : 1) >= 5;
|
|
313
|
+
return [2 /*return*/, {
|
|
314
|
+
width: transposed ? metadata.height : metadata.width,
|
|
315
|
+
height: transposed ? metadata.width : metadata.height,
|
|
316
|
+
}];
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Resolve the crop request against the real image: round to whole pixels and clamp fully
|
|
323
|
+
* inside the oriented bounds, staying square. Absent crop = the centered square (identical
|
|
324
|
+
* to the old `fit: cover` center-crop, so no-crop clients keep byte-equivalent behavior).
|
|
325
|
+
*/
|
|
326
|
+
UpdateUserInfo.prototype.clampCrop = function (crop, width, height) {
|
|
327
|
+
var maxSize = Math.min(width, height);
|
|
328
|
+
if (!crop) {
|
|
329
|
+
return { left: Math.floor((width - maxSize) / 2), top: Math.floor((height - maxSize) / 2), size: maxSize };
|
|
330
|
+
}
|
|
331
|
+
if (![crop.sx, crop.sy, crop.size].every(Number.isFinite)) {
|
|
332
|
+
throw new Error("Avatar crop must be numeric");
|
|
333
|
+
}
|
|
334
|
+
var size = Math.min(Math.max(1, Math.round(crop.size)), maxSize);
|
|
335
|
+
var clampOffset = function (value, max) { return Math.min(Math.max(0, Math.round(value)), max); };
|
|
336
|
+
return { left: clampOffset(crop.sx, width - size), top: clampOffset(crop.sy, height - size), size: size };
|
|
337
|
+
};
|
|
285
338
|
UpdateUserInfo.prototype.decodeHeic = function (imageBytes) {
|
|
286
339
|
return __awaiter(this, void 0, void 0, function () {
|
|
287
340
|
var _a, width, height, data;
|
|
@@ -297,8 +350,14 @@ var UpdateUserInfo = /** @class */ (function () {
|
|
|
297
350
|
});
|
|
298
351
|
});
|
|
299
352
|
};
|
|
300
|
-
/**
|
|
301
|
-
|
|
353
|
+
/**
|
|
354
|
+
* Stored avatar photos are square JPEGs capped at this edge — and never ENLARGED to it: a
|
|
355
|
+
* source (or crop) smaller than the cap keeps its honest pixel count. Upscaling a small photo
|
|
356
|
+
* to a fixed 512 invents pixels that read as permanent blur on every chip that renders it
|
|
357
|
+
* (the founder's fuzzy-avatar defect); the display layer downscales crisply from whatever
|
|
358
|
+
* honest size is stored.
|
|
359
|
+
*/
|
|
360
|
+
UpdateUserInfo.AVATAR_MAX_SIZE = 512;
|
|
302
361
|
UpdateUserInfo.AVATAR_JPEG_QUALITY = 85;
|
|
303
362
|
UpdateUserInfo.MAX_AVATAR_PHOTO_BYTES = 10 * 1024 * 1024;
|
|
304
363
|
UpdateUserInfo.ACCEPTED_AVATAR_MIME_TYPES = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateUserInfo.js","sourceRoot":"","sources":["../../../src/services/UpdateUserInfo.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAC1B,4DAAqC;AACrC,oCAA8C;AAC9C,8CAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"UpdateUserInfo.js","sourceRoot":"","sources":["../../../src/services/UpdateUserInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarPhotoFidelity.test.d.ts","sourceRoot":"","sources":["../../test/AvatarPhotoFidelity.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
var fs_1 = __importDefault(require("fs"));
|
|
43
|
+
var path_1 = __importDefault(require("path"));
|
|
44
|
+
var sharp_1 = __importDefault(require("sharp"));
|
|
45
|
+
var UpdateUserInfo_1 = require("../src/services/UpdateUserInfo");
|
|
46
|
+
var pipeline = function () { return new UpdateUserInfo_1.UpdateUserInfo(); };
|
|
47
|
+
var solidPng = function (width, height, rgb) { return __awaiter(void 0, void 0, void 0, function () {
|
|
48
|
+
return __generator(this, function (_a) {
|
|
49
|
+
switch (_a.label) {
|
|
50
|
+
case 0: return [4 /*yield*/, (0, sharp_1.default)({ create: { width: width, height: height, channels: 3, background: rgb } })
|
|
51
|
+
.png()
|
|
52
|
+
.toBuffer()];
|
|
53
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}); };
|
|
57
|
+
var dimensionsOf = function (jpeg) { return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
+
var metadata;
|
|
59
|
+
return __generator(this, function (_a) {
|
|
60
|
+
switch (_a.label) {
|
|
61
|
+
case 0: return [4 /*yield*/, (0, sharp_1.default)(jpeg).metadata()];
|
|
62
|
+
case 1:
|
|
63
|
+
metadata = _a.sent();
|
|
64
|
+
return [2 /*return*/, { width: metadata.width, height: metadata.height, format: metadata.format }];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}); };
|
|
68
|
+
/** Average color of the whole output — crop-mapping assertions read regions, not single pixels. */
|
|
69
|
+
var averageColor = function (jpeg) { return __awaiter(void 0, void 0, void 0, function () {
|
|
70
|
+
var stats, _a, r, g, b;
|
|
71
|
+
return __generator(this, function (_b) {
|
|
72
|
+
switch (_b.label) {
|
|
73
|
+
case 0: return [4 /*yield*/, (0, sharp_1.default)(jpeg).stats()];
|
|
74
|
+
case 1:
|
|
75
|
+
stats = _b.sent();
|
|
76
|
+
_a = stats.channels.map(function (channel) { return channel.mean; }), r = _a[0], g = _a[1], b = _a[2];
|
|
77
|
+
return [2 /*return*/, { r: r, g: g, b: b }];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}); };
|
|
81
|
+
describe('avatar photo pixel fidelity', function () {
|
|
82
|
+
it('keeps a small source at its honest pixel count — never enlarged to the 512 cap', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
83
|
+
var png, jpeg, _a;
|
|
84
|
+
return __generator(this, function (_b) {
|
|
85
|
+
switch (_b.label) {
|
|
86
|
+
case 0: return [4 /*yield*/, solidPng(96, 96, { r: 200, g: 80, b: 40 })];
|
|
87
|
+
case 1:
|
|
88
|
+
png = _b.sent();
|
|
89
|
+
return [4 /*yield*/, pipeline().toAvatarJpeg(png, 'image/png')];
|
|
90
|
+
case 2:
|
|
91
|
+
jpeg = _b.sent();
|
|
92
|
+
// The defect: the old pipeline resized EVERYTHING to a fixed 512 square, inventing 5x the
|
|
93
|
+
// pixels for a 96px source — permanent blur baked into the master.
|
|
94
|
+
_a = expect;
|
|
95
|
+
return [4 /*yield*/, dimensionsOf(jpeg)];
|
|
96
|
+
case 3:
|
|
97
|
+
// The defect: the old pipeline resized EVERYTHING to a fixed 512 square, inventing 5x the
|
|
98
|
+
// pixels for a 96px source — permanent blur baked into the master.
|
|
99
|
+
_a.apply(void 0, [_b.sent()]).toEqual({ width: 96, height: 96, format: 'jpeg' });
|
|
100
|
+
return [2 /*return*/];
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}); });
|
|
104
|
+
it('center-crops a small non-square source to its honest square (no enlargement)', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
105
|
+
var png, jpeg, _a;
|
|
106
|
+
return __generator(this, function (_b) {
|
|
107
|
+
switch (_b.label) {
|
|
108
|
+
case 0: return [4 /*yield*/, solidPng(300, 200, { r: 10, g: 120, b: 210 })];
|
|
109
|
+
case 1:
|
|
110
|
+
png = _b.sent();
|
|
111
|
+
return [4 /*yield*/, pipeline().toAvatarJpeg(png, 'image/png')];
|
|
112
|
+
case 2:
|
|
113
|
+
jpeg = _b.sent();
|
|
114
|
+
_a = expect;
|
|
115
|
+
return [4 /*yield*/, dimensionsOf(jpeg)];
|
|
116
|
+
case 3:
|
|
117
|
+
_a.apply(void 0, [_b.sent()]).toEqual({ width: 200, height: 200, format: 'jpeg' });
|
|
118
|
+
return [2 /*return*/];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}); });
|
|
122
|
+
it('extracts exactly the client-framed crop square', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
123
|
+
var left, source, jpeg, _a, color;
|
|
124
|
+
return __generator(this, function (_b) {
|
|
125
|
+
switch (_b.label) {
|
|
126
|
+
case 0: return [4 /*yield*/, solidPng(100, 100, { r: 20, g: 40, b: 220 })];
|
|
127
|
+
case 1:
|
|
128
|
+
left = _b.sent();
|
|
129
|
+
return [4 /*yield*/, (0, sharp_1.default)({
|
|
130
|
+
create: { width: 200, height: 100, channels: 3, background: { r: 220, g: 30, b: 30 } },
|
|
131
|
+
})
|
|
132
|
+
.composite([{ input: left, left: 0, top: 0 }])
|
|
133
|
+
.png()
|
|
134
|
+
.toBuffer()];
|
|
135
|
+
case 2:
|
|
136
|
+
source = _b.sent();
|
|
137
|
+
return [4 /*yield*/, pipeline().toAvatarJpeg(source, 'image/png', { sx: 100, sy: 0, size: 100 })];
|
|
138
|
+
case 3:
|
|
139
|
+
jpeg = _b.sent();
|
|
140
|
+
_a = expect;
|
|
141
|
+
return [4 /*yield*/, dimensionsOf(jpeg)];
|
|
142
|
+
case 4:
|
|
143
|
+
_a.apply(void 0, [_b.sent()]).toEqual({ width: 100, height: 100, format: 'jpeg' });
|
|
144
|
+
return [4 /*yield*/, averageColor(jpeg)];
|
|
145
|
+
case 5:
|
|
146
|
+
color = _b.sent();
|
|
147
|
+
expect(color.r).toBeGreaterThan(180);
|
|
148
|
+
expect(color.b).toBeLessThan(80);
|
|
149
|
+
return [2 /*return*/];
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}); });
|
|
153
|
+
it('clamps an out-of-bounds crop inside the image, staying square', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
154
|
+
var png, jpeg, _a;
|
|
155
|
+
return __generator(this, function (_b) {
|
|
156
|
+
switch (_b.label) {
|
|
157
|
+
case 0: return [4 /*yield*/, solidPng(300, 200, { r: 90, g: 90, b: 90 })];
|
|
158
|
+
case 1:
|
|
159
|
+
png = _b.sent();
|
|
160
|
+
return [4 /*yield*/, pipeline().toAvatarJpeg(png, 'image/png', { sx: 250, sy: 150, size: 120 })];
|
|
161
|
+
case 2:
|
|
162
|
+
jpeg = _b.sent();
|
|
163
|
+
_a = expect;
|
|
164
|
+
return [4 /*yield*/, dimensionsOf(jpeg)];
|
|
165
|
+
case 3:
|
|
166
|
+
_a.apply(void 0, [_b.sent()]).toEqual({ width: 120, height: 120, format: 'jpeg' });
|
|
167
|
+
return [2 /*return*/];
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}); });
|
|
171
|
+
it('still lands a large source at the 512 cap', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
172
|
+
var png, jpeg, _a;
|
|
173
|
+
return __generator(this, function (_b) {
|
|
174
|
+
switch (_b.label) {
|
|
175
|
+
case 0: return [4 /*yield*/, solidPng(1024, 768, { r: 40, g: 160, b: 90 })];
|
|
176
|
+
case 1:
|
|
177
|
+
png = _b.sent();
|
|
178
|
+
return [4 /*yield*/, pipeline().toAvatarJpeg(png, 'image/png')];
|
|
179
|
+
case 2:
|
|
180
|
+
jpeg = _b.sent();
|
|
181
|
+
_a = expect;
|
|
182
|
+
return [4 /*yield*/, dimensionsOf(jpeg)];
|
|
183
|
+
case 3:
|
|
184
|
+
_a.apply(void 0, [_b.sent()]).toEqual({ width: 512, height: 512, format: 'jpeg' });
|
|
185
|
+
return [2 /*return*/];
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}); });
|
|
189
|
+
it('keeps a small HEIC source at its honest centered square (the WASM decode path)', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
190
|
+
var heic, jpeg, _a;
|
|
191
|
+
return __generator(this, function (_b) {
|
|
192
|
+
switch (_b.label) {
|
|
193
|
+
case 0:
|
|
194
|
+
heic = fs_1.default.readFileSync(path_1.default.join(__dirname, 'fixtures', 'fixture.heic'));
|
|
195
|
+
return [4 /*yield*/, pipeline().toAvatarJpeg(heic, 'image/heic')];
|
|
196
|
+
case 1:
|
|
197
|
+
jpeg = _b.sent();
|
|
198
|
+
_a = expect;
|
|
199
|
+
return [4 /*yield*/, dimensionsOf(jpeg)];
|
|
200
|
+
case 2:
|
|
201
|
+
_a.apply(void 0, [_b.sent()]).toEqual({ width: 64, height: 64, format: 'jpeg' });
|
|
202
|
+
return [2 /*return*/];
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}); });
|
|
206
|
+
it('rejects a non-numeric crop in plain words', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
207
|
+
var png;
|
|
208
|
+
return __generator(this, function (_a) {
|
|
209
|
+
switch (_a.label) {
|
|
210
|
+
case 0: return [4 /*yield*/, solidPng(64, 64, { r: 10, g: 10, b: 10 })];
|
|
211
|
+
case 1:
|
|
212
|
+
png = _a.sent();
|
|
213
|
+
return [4 /*yield*/, expect(pipeline().toAvatarJpeg(png, 'image/png', { sx: NaN, sy: 0, size: 32 })).rejects.toThrow('Avatar crop must be numeric')];
|
|
214
|
+
case 2:
|
|
215
|
+
_a.sent();
|
|
216
|
+
return [2 /*return*/];
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}); });
|
|
220
|
+
});
|
|
221
|
+
//# sourceMappingURL=AvatarPhotoFidelity.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarPhotoFidelity.test.js","sourceRoot":"","sources":["../../test/AvatarPhotoFidelity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,8 @@ var getFileRow = function (fileId) { return __awaiter(void 0, void 0, void 0, fu
|
|
|
57
57
|
}
|
|
58
58
|
}); }); };
|
|
59
59
|
/**
|
|
60
|
-
* Avatars are photo OR emoji — exactly one active — stored as
|
|
60
|
+
* Avatars are photo OR emoji — exactly one active — stored as a square JPEG capped at 512px
|
|
61
|
+
* (never enlarged past the source's honest pixels; see AvatarPhotoFidelity.test.ts), previous photo file
|
|
61
62
|
* deleted on every change, and the server session cache refreshed in the same stroke (the same
|
|
62
63
|
* helper that fixes the updateName rename-staleness wart). All assertions are outcomes: rows,
|
|
63
64
|
* bytes, cache reads.
|
|
@@ -173,7 +174,7 @@ describe('UpdateUserInfo avatar mutations', function () {
|
|
|
173
174
|
}
|
|
174
175
|
});
|
|
175
176
|
}); });
|
|
176
|
-
it('updateAvatarPhoto normalizes HEIC (default iPhone camera format) to JPEG', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
177
|
+
it('updateAvatarPhoto normalizes HEIC (default iPhone camera format) to JPEG at its honest size', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
177
178
|
var user, heic, updated, bytes, _a, _b, metadata;
|
|
178
179
|
return __generator(this, function (_c) {
|
|
179
180
|
switch (_c.label) {
|
|
@@ -193,8 +194,8 @@ describe('UpdateUserInfo avatar mutations', function () {
|
|
|
193
194
|
return [4 /*yield*/, (0, sharp_1.default)(bytes).metadata()];
|
|
194
195
|
case 4:
|
|
195
196
|
metadata = _c.sent();
|
|
196
|
-
expect(metadata.width).toBe(
|
|
197
|
-
expect(metadata.height).toBe(
|
|
197
|
+
expect(metadata.width).toBe(64);
|
|
198
|
+
expect(metadata.height).toBe(64);
|
|
198
199
|
return [2 /*return*/];
|
|
199
200
|
}
|
|
200
201
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateUserInfoAvatar.test.js","sourceRoot":"","sources":["../../test/UpdateUserInfoAvatar.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAAoB;AACpB,8CAAwB;AACxB,gDAA0B;AAC1B,oCAA8C;AAC9C,8CAA6E;AAC7E,wCAAwE;AACxE,yEAAwE;AACxE,iEAAgE;AAEhE,IAAM,OAAO,GAAG,IAAI,qDAAyB,EAAE,CAAC;AAEhD,8CAA8C;AAC9C,IAAM,MAAM,GAAG,UAAC,MAAc,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAA9D,CAA8D,CAAC;AAElG,IAAM,UAAU,GAAG,UAAO,MAAc;;gBAAK,qBAAM,IAAA,0BAAmB,GAAQ,CAAC,GAAG,CAAC,gBAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAA;gBAAtE,sBAAA,SAAsE,EAAA;;SAAA,CAAC;AAEpH
|
|
1
|
+
{"version":3,"file":"UpdateUserInfoAvatar.test.js","sourceRoot":"","sources":["../../test/UpdateUserInfoAvatar.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -137,8 +137,10 @@ describe('GET /avatar/:userId', function () {
|
|
|
137
137
|
return [4 /*yield*/, (0, sharp_1.default)(bytes).metadata()];
|
|
138
138
|
case 6:
|
|
139
139
|
metadata = _a.sent();
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
// The 100px source stays its honest 100px square — masters are capped at 512, never
|
|
141
|
+
// enlarged to it (AvatarPhotoFidelity.test.ts owns the pipeline contract).
|
|
142
|
+
expect(metadata.width).toBe(100);
|
|
143
|
+
expect(metadata.height).toBe(100);
|
|
142
144
|
// The client-side URL contract carries the cache-buster.
|
|
143
145
|
expect(user_1.avatarRoute.path(owner.id, updated.avatarFileId)).toBe("/avatar/".concat(owner.id, "?v=").concat(updated.avatarFileId));
|
|
144
146
|
return [2 /*return*/];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatarRoute.test.js","sourceRoot":"","sources":["../../test/avatarRoute.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"avatarRoute.test.js","sourceRoot":"","sources":["../../test/avatarRoute.test.ts"],"names":[],"mappings":"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"}
|