@zssz-soft/firebase-functions-shared 1.1.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/README.md +391 -0
- package/lib/config/app.config.d.ts +106 -0
- package/lib/config/app.config.d.ts.map +1 -0
- package/lib/config/app.config.js +55 -0
- package/lib/config/app.config.js.map +1 -0
- package/lib/config/index.d.ts +2 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +18 -0
- package/lib/config/index.js.map +1 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +29 -0
- package/lib/index.js.map +1 -0
- package/lib/modules/bootstrap/bootstrap.d.ts +4 -0
- package/lib/modules/bootstrap/bootstrap.d.ts.map +1 -0
- package/lib/modules/bootstrap/bootstrap.js +162 -0
- package/lib/modules/bootstrap/bootstrap.js.map +1 -0
- package/lib/modules/bootstrap/bootstrap.models.d.ts +20 -0
- package/lib/modules/bootstrap/bootstrap.models.d.ts.map +1 -0
- package/lib/modules/bootstrap/bootstrap.models.js +3 -0
- package/lib/modules/bootstrap/bootstrap.models.js.map +1 -0
- package/lib/modules/bootstrap/index.d.ts +3 -0
- package/lib/modules/bootstrap/index.d.ts.map +1 -0
- package/lib/modules/bootstrap/index.js +19 -0
- package/lib/modules/bootstrap/index.js.map +1 -0
- package/lib/modules/email/email.d.ts +5 -0
- package/lib/modules/email/email.d.ts.map +1 -0
- package/lib/modules/email/email.js +105 -0
- package/lib/modules/email/email.js.map +1 -0
- package/lib/modules/email/email.models.d.ts +25 -0
- package/lib/modules/email/email.models.d.ts.map +1 -0
- package/lib/modules/email/email.models.js +3 -0
- package/lib/modules/email/email.models.js.map +1 -0
- package/lib/modules/email/email.service.d.ts +11 -0
- package/lib/modules/email/email.service.d.ts.map +1 -0
- package/lib/modules/email/email.service.js +227 -0
- package/lib/modules/email/email.service.js.map +1 -0
- package/lib/modules/email/email.validator.d.ts +2 -0
- package/lib/modules/email/email.validator.d.ts.map +1 -0
- package/lib/modules/email/email.validator.js +9 -0
- package/lib/modules/email/email.validator.js.map +1 -0
- package/lib/modules/email/index.d.ts +5 -0
- package/lib/modules/email/index.d.ts.map +1 -0
- package/lib/modules/email/index.js +21 -0
- package/lib/modules/email/index.js.map +1 -0
- package/lib/modules/security/effective-permissions.d.ts +28 -0
- package/lib/modules/security/effective-permissions.d.ts.map +1 -0
- package/lib/modules/security/effective-permissions.js +133 -0
- package/lib/modules/security/effective-permissions.js.map +1 -0
- package/lib/modules/security/effective-permissions.models.d.ts +96 -0
- package/lib/modules/security/effective-permissions.models.d.ts.map +1 -0
- package/lib/modules/security/effective-permissions.models.js +24 -0
- package/lib/modules/security/effective-permissions.models.js.map +1 -0
- package/lib/modules/security/effective-permissions.triggers.d.ts +83 -0
- package/lib/modules/security/effective-permissions.triggers.d.ts.map +1 -0
- package/lib/modules/security/effective-permissions.triggers.js +307 -0
- package/lib/modules/security/effective-permissions.triggers.js.map +1 -0
- package/lib/modules/security/index.d.ts +10 -0
- package/lib/modules/security/index.d.ts.map +1 -0
- package/lib/modules/security/index.js +28 -0
- package/lib/modules/security/index.js.map +1 -0
- package/lib/modules/storage/index.d.ts +2 -0
- package/lib/modules/storage/index.d.ts.map +1 -0
- package/lib/modules/storage/index.js +18 -0
- package/lib/modules/storage/index.js.map +1 -0
- package/lib/modules/storage/thumbnail-functions.d.ts +10 -0
- package/lib/modules/storage/thumbnail-functions.d.ts.map +1 -0
- package/lib/modules/storage/thumbnail-functions.js +482 -0
- package/lib/modules/storage/thumbnail-functions.js.map +1 -0
- package/lib/modules/user/index.d.ts +4 -0
- package/lib/modules/user/index.d.ts.map +1 -0
- package/lib/modules/user/index.js +20 -0
- package/lib/modules/user/index.js.map +1 -0
- package/lib/modules/user/user-management.d.ts +29 -0
- package/lib/modules/user/user-management.d.ts.map +1 -0
- package/lib/modules/user/user-management.js +134 -0
- package/lib/modules/user/user-management.js.map +1 -0
- package/lib/modules/user/user.d.ts +2 -0
- package/lib/modules/user/user.d.ts.map +1 -0
- package/lib/modules/user/user.js +15 -0
- package/lib/modules/user/user.js.map +1 -0
- package/lib/modules/user/user.models.d.ts +15 -0
- package/lib/modules/user/user.models.d.ts.map +1 -0
- package/lib/modules/user/user.models.js +6 -0
- package/lib/modules/user/user.models.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateThumbnail = void 0;
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const firestore_1 = require("firebase-admin/firestore");
|
|
39
|
+
const storage_1 = require("firebase-admin/storage");
|
|
40
|
+
const firebase_functions_1 = require("firebase-functions");
|
|
41
|
+
const https_1 = require("firebase-functions/v2/https");
|
|
42
|
+
const path_1 = require("path");
|
|
43
|
+
const config_1 = require("../../config");
|
|
44
|
+
// Permitted extensions for thumbnail generation
|
|
45
|
+
const PERMITTED_EXTENSIONS = new Set([
|
|
46
|
+
// Image formats (processed with Sharp)
|
|
47
|
+
'jpg',
|
|
48
|
+
'jpeg',
|
|
49
|
+
'png',
|
|
50
|
+
'webp',
|
|
51
|
+
'avif',
|
|
52
|
+
'gif', // will be converted to first frame
|
|
53
|
+
'bmp',
|
|
54
|
+
'tiff',
|
|
55
|
+
'heic',
|
|
56
|
+
'heif',
|
|
57
|
+
// Document formats (will generate empty thumbnails)
|
|
58
|
+
'pdf',
|
|
59
|
+
'doc',
|
|
60
|
+
'docx',
|
|
61
|
+
'xls',
|
|
62
|
+
'xlsx',
|
|
63
|
+
'ppt',
|
|
64
|
+
'pptx',
|
|
65
|
+
'txt',
|
|
66
|
+
'rtf',
|
|
67
|
+
'odt',
|
|
68
|
+
'ods',
|
|
69
|
+
'odp',
|
|
70
|
+
]);
|
|
71
|
+
// Helper: detect HEIC format from buffer magic bytes
|
|
72
|
+
function isHeicBuffer(buffer) {
|
|
73
|
+
// HEIC files have 'ftyp' box at bytes 4-7, followed by brand like 'heic', 'heix', 'hevc', 'hevx', 'mif1'
|
|
74
|
+
if (buffer.length < 12)
|
|
75
|
+
return false;
|
|
76
|
+
const ftyp = buffer.toString('ascii', 4, 8);
|
|
77
|
+
if (ftyp !== 'ftyp')
|
|
78
|
+
return false;
|
|
79
|
+
const brand = buffer.toString('ascii', 8, 12);
|
|
80
|
+
const heicBrands = ['heic', 'heix', 'hevc', 'hevx', 'mif1', 'msf1'];
|
|
81
|
+
return heicBrands.includes(brand);
|
|
82
|
+
}
|
|
83
|
+
// Helper: check if caller has ADMIN or createThumbnail permission
|
|
84
|
+
async function hasThumbnailPermission(uid) {
|
|
85
|
+
var _a, _b;
|
|
86
|
+
const config = (0, config_1.getConfig)();
|
|
87
|
+
const db = config.firestoreDatabaseId ? (0, firestore_1.getFirestore)(config.firestoreDatabaseId) : (0, firestore_1.getFirestore)();
|
|
88
|
+
const userSnap = await db.collection('user').doc(uid).get();
|
|
89
|
+
if (!userSnap.exists)
|
|
90
|
+
return false;
|
|
91
|
+
const data = userSnap.data();
|
|
92
|
+
const roleIds = (_a = data === null || data === void 0 ? void 0 : data.roleIds) !== null && _a !== void 0 ? _a : [];
|
|
93
|
+
if (!roleIds.length)
|
|
94
|
+
return false;
|
|
95
|
+
const roles = await Promise.all(roleIds.map((rid) => db.collection('role').doc(rid).get()));
|
|
96
|
+
const permissions = new Set();
|
|
97
|
+
for (const r of roles) {
|
|
98
|
+
const rd = r.data();
|
|
99
|
+
if (rd === null || rd === void 0 ? void 0 : rd.name)
|
|
100
|
+
permissions.add(rd.name);
|
|
101
|
+
for (const p of (_b = rd === null || rd === void 0 ? void 0 : rd.permissions) !== null && _b !== void 0 ? _b : [])
|
|
102
|
+
permissions.add(p);
|
|
103
|
+
}
|
|
104
|
+
// For now, allow any authenticated user with roles to test thumbnail generation
|
|
105
|
+
// TODO: Restore strict permission check: return permissions.has('ADMIN') || permissions.has('createThumbnail');
|
|
106
|
+
const hasPermission = permissions.has('ADMIN') || permissions.has('createThumbnail') || permissions.has('USER');
|
|
107
|
+
firebase_functions_1.logger.info('Thumbnail permission check', {
|
|
108
|
+
uid,
|
|
109
|
+
roleIds,
|
|
110
|
+
permissions: Array.from(permissions),
|
|
111
|
+
hasPermission,
|
|
112
|
+
});
|
|
113
|
+
return hasPermission;
|
|
114
|
+
}
|
|
115
|
+
function isHttpUrl(input) {
|
|
116
|
+
return input.startsWith('http://') || input.startsWith('https://');
|
|
117
|
+
}
|
|
118
|
+
// Normalize input storage path (accepts gs://, raw object path, or Firebase download URL)
|
|
119
|
+
function normalizeStoragePath(input) {
|
|
120
|
+
if (input.startsWith('gs://')) {
|
|
121
|
+
const withoutScheme = input.slice('gs://'.length);
|
|
122
|
+
const firstSlash = withoutScheme.indexOf('/');
|
|
123
|
+
if (firstSlash === -1) {
|
|
124
|
+
return { bucketName: withoutScheme, objectPath: '' };
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
bucketName: withoutScheme.slice(0, firstSlash),
|
|
128
|
+
objectPath: withoutScheme.slice(firstSlash + 1),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (isHttpUrl(input)) {
|
|
132
|
+
try {
|
|
133
|
+
const url = new URL(input);
|
|
134
|
+
// Formats we support: https://firebasestorage.googleapis.com/v0/b/<bucket>/o/<encodedPath>
|
|
135
|
+
// or https://storage.googleapis.com/download/storage/v1/b/<bucket>/o/<encodedPath>
|
|
136
|
+
const segments = url.pathname.split('/').filter(Boolean);
|
|
137
|
+
const bIndex = segments.indexOf('b');
|
|
138
|
+
const oIndex = segments.indexOf('o');
|
|
139
|
+
if (bIndex !== -1 && oIndex !== -1 && segments[oIndex + 1]) {
|
|
140
|
+
const bucket = segments[bIndex + 1];
|
|
141
|
+
const encoded = segments[oIndex + 1];
|
|
142
|
+
return { bucketName: bucket, objectPath: decodeURIComponent(encoded) };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (_a) {
|
|
146
|
+
// fallthrough
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return { objectPath: input };
|
|
150
|
+
}
|
|
151
|
+
async function ensureDownloadUrl(bucketName, objectPath) {
|
|
152
|
+
var _a;
|
|
153
|
+
const bucket = (0, storage_1.getStorage)().bucket(bucketName);
|
|
154
|
+
const file = bucket.file(objectPath);
|
|
155
|
+
const [meta] = await file.getMetadata().catch(() => [{ metadata: {} }]);
|
|
156
|
+
let token = (_a = meta.metadata) === null || _a === void 0 ? void 0 : _a.firebaseStorageDownloadTokens;
|
|
157
|
+
if (!token) {
|
|
158
|
+
token = (0, crypto_1.randomUUID)();
|
|
159
|
+
await file.setMetadata({
|
|
160
|
+
metadata: Object.assign(Object.assign({}, (meta.metadata || {})), { firebaseStorageDownloadTokens: token }),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
const encodedPath = encodeURIComponent(objectPath);
|
|
164
|
+
return `https://firebasestorage.googleapis.com/v0/b/${bucketName}/o/${encodedPath}?alt=media&token=${token}`;
|
|
165
|
+
}
|
|
166
|
+
async function updateDocumentWithThumb(documentId, fileUrlForLookup, thumbUrl, webImageUrl, originalFilePath) {
|
|
167
|
+
const config = (0, config_1.getConfig)();
|
|
168
|
+
const db = config.firestoreDatabaseId ? (0, firestore_1.getFirestore)(config.firestoreDatabaseId) : (0, firestore_1.getFirestore)();
|
|
169
|
+
try {
|
|
170
|
+
const updateData = {
|
|
171
|
+
thumbPath: thumbUrl,
|
|
172
|
+
meta: { updatedAt: new Date().toISOString() },
|
|
173
|
+
};
|
|
174
|
+
// If we have a web-optimized image, update filePath to point to it
|
|
175
|
+
if (webImageUrl) {
|
|
176
|
+
updateData.filePath = webImageUrl;
|
|
177
|
+
}
|
|
178
|
+
// Store original HEIC path as backup (only for HEIC conversions)
|
|
179
|
+
if (originalFilePath) {
|
|
180
|
+
updateData.originalFilePath = originalFilePath;
|
|
181
|
+
}
|
|
182
|
+
if (documentId) {
|
|
183
|
+
await db.collection('document').doc(documentId).set(updateData, { merge: true });
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
if (fileUrlForLookup) {
|
|
187
|
+
const snap = await db
|
|
188
|
+
.collection('document')
|
|
189
|
+
.where('filePath', '==', fileUrlForLookup)
|
|
190
|
+
.limit(1)
|
|
191
|
+
.get();
|
|
192
|
+
if (!snap.empty) {
|
|
193
|
+
const docRef = snap.docs[0].ref;
|
|
194
|
+
await docRef.set(updateData, { merge: true });
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
firebase_functions_1.logger.error('Failed to update Document with thumbnail URL', {
|
|
201
|
+
documentId,
|
|
202
|
+
fileUrlForLookup,
|
|
203
|
+
error: e.message,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
// Helper: Generate empty/blank thumbnail when processing fails
|
|
209
|
+
async function generateEmptyThumbnail(maxWidth = 512, maxHeight = 512) {
|
|
210
|
+
var _a;
|
|
211
|
+
const sharpModule = await Promise.resolve().then(() => __importStar(require('sharp')));
|
|
212
|
+
const sharp = (_a = sharpModule === null || sharpModule === void 0 ? void 0 : sharpModule.default) !== null && _a !== void 0 ? _a : sharpModule;
|
|
213
|
+
// Create a simple empty/blank thumbnail
|
|
214
|
+
const svgContent = `
|
|
215
|
+
<svg width="${maxWidth}" height="${maxHeight}" xmlns="http://www.w3.org/2000/svg">
|
|
216
|
+
<rect width="100%" height="100%" fill="#F8F9FA"/>
|
|
217
|
+
<rect x="25%" y="25%" width="50%" height="50%" fill="none" stroke="#DEE2E6" stroke-width="2" stroke-dasharray="10,5" rx="8"/>
|
|
218
|
+
<circle cx="50%" cy="50%" r="20" fill="none" stroke="#CED4DA" stroke-width="2"/>
|
|
219
|
+
<line x1="40%" y1="40%" x2="60%" y2="60%" stroke="#CED4DA" stroke-width="2"/>
|
|
220
|
+
<line x1="60%" y1="40%" x2="40%" y2="60%" stroke="#CED4DA" stroke-width="2"/>
|
|
221
|
+
</svg>
|
|
222
|
+
`;
|
|
223
|
+
return sharp(Buffer.from(svgContent))
|
|
224
|
+
.resize(maxWidth, maxHeight, { fit: 'inside', withoutEnlargement: true })
|
|
225
|
+
.webp({ quality: 82 })
|
|
226
|
+
.toBuffer();
|
|
227
|
+
}
|
|
228
|
+
// Helper: Convert HEIC to web-optimized JPEG and save it to storage
|
|
229
|
+
async function convertAndSaveHeicToWebJpeg(bucket, originalPath, heicBuffer) {
|
|
230
|
+
var _a, _b;
|
|
231
|
+
try {
|
|
232
|
+
const convertModule = await Promise.resolve().then(() => __importStar(require('heic-convert')));
|
|
233
|
+
const convert = (_a = convertModule === null || convertModule === void 0 ? void 0 : convertModule.default) !== null && _a !== void 0 ? _a : convertModule;
|
|
234
|
+
firebase_functions_1.logger.info('Converting HEIC to JPEG', {
|
|
235
|
+
path: originalPath,
|
|
236
|
+
originalSize: heicBuffer.length,
|
|
237
|
+
});
|
|
238
|
+
// Convert HEIC to JPEG
|
|
239
|
+
const jpegBuffer = await convert({
|
|
240
|
+
buffer: heicBuffer,
|
|
241
|
+
format: 'JPEG',
|
|
242
|
+
quality: 1, // Max quality for conversion
|
|
243
|
+
});
|
|
244
|
+
const fullBuffer = Buffer.from(jpegBuffer);
|
|
245
|
+
// Optimize for web: resize to max 1920px width while maintaining aspect ratio
|
|
246
|
+
const sharpModule = await Promise.resolve().then(() => __importStar(require('sharp')));
|
|
247
|
+
const sharp = (_b = sharpModule === null || sharpModule === void 0 ? void 0 : sharpModule.default) !== null && _b !== void 0 ? _b : sharpModule;
|
|
248
|
+
const optimizedBuffer = await sharp(fullBuffer)
|
|
249
|
+
.rotate() // respect EXIF
|
|
250
|
+
.resize({
|
|
251
|
+
width: 1920,
|
|
252
|
+
height: 1920,
|
|
253
|
+
fit: 'inside',
|
|
254
|
+
withoutEnlargement: true,
|
|
255
|
+
})
|
|
256
|
+
.jpeg({ quality: 85, progressive: true })
|
|
257
|
+
.toBuffer();
|
|
258
|
+
// Create web image path (add _web suffix before extension)
|
|
259
|
+
const fileName = (0, path_1.basename)(originalPath, (0, path_1.extname)(originalPath));
|
|
260
|
+
const dir = (0, path_1.dirname)(originalPath);
|
|
261
|
+
const jpegPath = (0, path_1.join)(dir === '.' ? '' : dir, `${fileName}_web.jpg`);
|
|
262
|
+
// Save the web-optimized JPEG to storage
|
|
263
|
+
const jpegFile = bucket.file(jpegPath);
|
|
264
|
+
const token = (0, crypto_1.randomUUID)();
|
|
265
|
+
await jpegFile.save(optimizedBuffer, {
|
|
266
|
+
contentType: 'image/jpeg',
|
|
267
|
+
metadata: {
|
|
268
|
+
cacheControl: 'public, max-age=31536000, immutable',
|
|
269
|
+
metadata: {
|
|
270
|
+
firebaseStorageDownloadTokens: token,
|
|
271
|
+
convertedFrom: 'heic',
|
|
272
|
+
originalPath,
|
|
273
|
+
optimizedForWeb: 'true',
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
resumable: false,
|
|
277
|
+
public: false,
|
|
278
|
+
validation: 'md5',
|
|
279
|
+
});
|
|
280
|
+
firebase_functions_1.logger.info('HEIC converted and saved as web-optimized JPEG', {
|
|
281
|
+
originalPath,
|
|
282
|
+
jpegPath,
|
|
283
|
+
originalSize: heicBuffer.length,
|
|
284
|
+
fullJpegSize: fullBuffer.length,
|
|
285
|
+
optimizedSize: optimizedBuffer.length,
|
|
286
|
+
compressionRatio: ((1 - optimizedBuffer.length / fullBuffer.length) * 100).toFixed(1) + '%',
|
|
287
|
+
});
|
|
288
|
+
return { jpegPath, jpegBuffer: optimizedBuffer };
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
firebase_functions_1.logger.error('HEIC conversion failed', {
|
|
292
|
+
path: originalPath,
|
|
293
|
+
error: error.message,
|
|
294
|
+
});
|
|
295
|
+
throw new Error(`Failed to convert HEIC to JPEG: ${error.message}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
exports.generateThumbnail = (0, https_1.onCall)({ memory: '2GiB', timeoutSeconds: 120 }, async (request) => {
|
|
299
|
+
var _a, _b, _c, _d;
|
|
300
|
+
// Log every function call for debugging
|
|
301
|
+
firebase_functions_1.logger.info('=== THUMBNAIL FUNCTION CALLED ===', {
|
|
302
|
+
requestData: request.data,
|
|
303
|
+
auth: ((_a = request.auth) === null || _a === void 0 ? void 0 : _a.uid) || 'UNAUTHENTICATED',
|
|
304
|
+
});
|
|
305
|
+
// Auth check - TEMPORARY: Allow unauthenticated calls for testing
|
|
306
|
+
const uid = (_b = request.auth) === null || _b === void 0 ? void 0 : _b.uid;
|
|
307
|
+
if (!uid) {
|
|
308
|
+
firebase_functions_1.logger.warn('Unauthenticated call to generateThumbnail - allowing for testing');
|
|
309
|
+
// Temporarily allow unauthenticated calls for testing
|
|
310
|
+
// throw new HttpsError('unauthenticated', 'Authentication is required');
|
|
311
|
+
}
|
|
312
|
+
// Permission check - TEMPORARY: Skip for unauthenticated users
|
|
313
|
+
if (uid) {
|
|
314
|
+
const permitted = await hasThumbnailPermission(uid);
|
|
315
|
+
if (!permitted) {
|
|
316
|
+
throw new https_1.HttpsError('permission-denied', 'Missing ADMIN or createThumbnail permission');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const { path, maxWidth = 512, maxHeight = 512, force = false, documentId, } = (request.data || {});
|
|
320
|
+
if (!path) {
|
|
321
|
+
throw new https_1.HttpsError('invalid-argument', 'Argument `path` is required');
|
|
322
|
+
}
|
|
323
|
+
const originalInput = path; // Keep original for lookup if it's a URL
|
|
324
|
+
const { bucketName, objectPath } = normalizeStoragePath(path);
|
|
325
|
+
if (!objectPath) {
|
|
326
|
+
throw new https_1.HttpsError('invalid-argument', 'Invalid storage object path');
|
|
327
|
+
}
|
|
328
|
+
const bucket = bucketName ? (0, storage_1.getStorage)().bucket(bucketName) : (0, storage_1.getStorage)().bucket();
|
|
329
|
+
// Validate object exists and is an image by extension or contentType
|
|
330
|
+
const original = bucket.file(objectPath);
|
|
331
|
+
const [existsOrig] = await original.exists();
|
|
332
|
+
if (!existsOrig) {
|
|
333
|
+
throw new https_1.HttpsError('not-found', `Original file not found at ${objectPath}`);
|
|
334
|
+
}
|
|
335
|
+
const [meta] = await original.getMetadata();
|
|
336
|
+
const contentType = (meta === null || meta === void 0 ? void 0 : meta.contentType) || ((_c = meta === null || meta === void 0 ? void 0 : meta.metadata) === null || _c === void 0 ? void 0 : _c.contentType) || '';
|
|
337
|
+
const isImageType = typeof contentType === 'string' && contentType.startsWith('image/');
|
|
338
|
+
const isHeicType = typeof contentType === 'string' &&
|
|
339
|
+
(contentType === 'image/heic' || contentType === 'image/heif');
|
|
340
|
+
const ext = (0, path_1.extname)(objectPath).toLowerCase().replace('.', '');
|
|
341
|
+
// Check if it's a permitted document type by contentType as well
|
|
342
|
+
const isDocumentType = typeof contentType === 'string' &&
|
|
343
|
+
(contentType.includes('word') ||
|
|
344
|
+
contentType.includes('document') ||
|
|
345
|
+
contentType.includes('pdf') ||
|
|
346
|
+
contentType.includes('excel') ||
|
|
347
|
+
contentType.includes('powerpoint') ||
|
|
348
|
+
contentType.includes('text') ||
|
|
349
|
+
contentType.includes('spreadsheet') ||
|
|
350
|
+
contentType.includes('presentation'));
|
|
351
|
+
firebase_functions_1.logger.info('File analysis', {
|
|
352
|
+
objectPath,
|
|
353
|
+
ext,
|
|
354
|
+
contentType,
|
|
355
|
+
isImageType,
|
|
356
|
+
isHeicType,
|
|
357
|
+
isDocumentType,
|
|
358
|
+
isPermitted: PERMITTED_EXTENSIONS.has(ext),
|
|
359
|
+
});
|
|
360
|
+
if (!isImageType && !isHeicType && !PERMITTED_EXTENSIONS.has(ext) && !isDocumentType) {
|
|
361
|
+
throw new https_1.HttpsError('failed-precondition', `Unsupported file type ${ext ? '.' + ext : ''}${contentType ? ` (${contentType})` : ''}`);
|
|
362
|
+
}
|
|
363
|
+
const fileName = (0, path_1.basename)(objectPath, (0, path_1.extname)(objectPath));
|
|
364
|
+
const dir = (0, path_1.dirname)(objectPath);
|
|
365
|
+
const thumbObjectPath = (0, path_1.join)(dir === '.' ? '' : dir, `${fileName}_thumb.webp`);
|
|
366
|
+
const thumb = bucket.file(thumbObjectPath);
|
|
367
|
+
// Skip if exists and not forcing
|
|
368
|
+
const [exists] = await thumb.exists();
|
|
369
|
+
if (exists && !force) {
|
|
370
|
+
const thumbUrl = await ensureDownloadUrl(bucket.name, thumbObjectPath);
|
|
371
|
+
firebase_functions_1.logger.info('Thumbnail already exists, skipping', { path: objectPath, thumbPath: thumbUrl });
|
|
372
|
+
const updated = await updateDocumentWithThumb(documentId, isHttpUrl(originalInput) ? originalInput : undefined, thumbUrl);
|
|
373
|
+
const result = {
|
|
374
|
+
success: true,
|
|
375
|
+
path: objectPath,
|
|
376
|
+
thumbPath: thumbUrl,
|
|
377
|
+
created: false,
|
|
378
|
+
skipped: true,
|
|
379
|
+
reason: 'exists',
|
|
380
|
+
documentUpdated: updated,
|
|
381
|
+
};
|
|
382
|
+
return result;
|
|
383
|
+
}
|
|
384
|
+
// Download original and process thumbnail
|
|
385
|
+
let outputBuffer;
|
|
386
|
+
let webImageUrl;
|
|
387
|
+
let originalFilePath; // Track original HEIC path
|
|
388
|
+
try {
|
|
389
|
+
const imageExtensions = new Set([
|
|
390
|
+
'jpg',
|
|
391
|
+
'jpeg',
|
|
392
|
+
'png',
|
|
393
|
+
'webp',
|
|
394
|
+
'avif',
|
|
395
|
+
'gif',
|
|
396
|
+
'bmp',
|
|
397
|
+
'tiff',
|
|
398
|
+
'heic',
|
|
399
|
+
'heif',
|
|
400
|
+
]);
|
|
401
|
+
const isImageFile = isImageType || isHeicType || imageExtensions.has(ext);
|
|
402
|
+
if (isImageFile) {
|
|
403
|
+
const [buffer] = await original.download();
|
|
404
|
+
const isHeicFile = isHeicType || ext === 'heic' || ext === 'heif' || isHeicBuffer(buffer);
|
|
405
|
+
const sharpModule = await Promise.resolve().then(() => __importStar(require('sharp')));
|
|
406
|
+
const sharp = (_d = sharpModule === null || sharpModule === void 0 ? void 0 : sharpModule.default) !== null && _d !== void 0 ? _d : sharpModule;
|
|
407
|
+
try {
|
|
408
|
+
let processBuffer = buffer;
|
|
409
|
+
// Convert HEIC to web-optimized JPEG and save it
|
|
410
|
+
if (isHeicFile) {
|
|
411
|
+
const { jpegPath, jpegBuffer } = await convertAndSaveHeicToWebJpeg(bucket, objectPath, buffer);
|
|
412
|
+
processBuffer = jpegBuffer;
|
|
413
|
+
webImageUrl = await ensureDownloadUrl(bucket.name, jpegPath);
|
|
414
|
+
originalFilePath = objectPath; // Store original HEIC path
|
|
415
|
+
firebase_functions_1.logger.info('Web-optimized JPEG created', {
|
|
416
|
+
originalPath: objectPath,
|
|
417
|
+
jpegPath,
|
|
418
|
+
webImageUrl,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
// Process image -> webp thumbnail
|
|
422
|
+
outputBuffer = await sharp(processBuffer)
|
|
423
|
+
.rotate()
|
|
424
|
+
.resize({ width: maxWidth, height: maxHeight, fit: 'inside', withoutEnlargement: true })
|
|
425
|
+
.webp({ quality: 82 })
|
|
426
|
+
.toBuffer();
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
firebase_functions_1.logger.warn('Image processing failed, generating empty thumbnail', {
|
|
430
|
+
path: objectPath,
|
|
431
|
+
error: error.message,
|
|
432
|
+
});
|
|
433
|
+
outputBuffer = await generateEmptyThumbnail(maxWidth, maxHeight);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
firebase_functions_1.logger.info('Non-image file detected, generating empty thumbnail', {
|
|
438
|
+
path: objectPath,
|
|
439
|
+
extension: ext,
|
|
440
|
+
contentType,
|
|
441
|
+
});
|
|
442
|
+
outputBuffer = await generateEmptyThumbnail(maxWidth, maxHeight);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
firebase_functions_1.logger.error('Thumbnail generation completely failed, generating empty thumbnail', {
|
|
447
|
+
path: objectPath,
|
|
448
|
+
error: error.message,
|
|
449
|
+
});
|
|
450
|
+
outputBuffer = await generateEmptyThumbnail(maxWidth, maxHeight);
|
|
451
|
+
}
|
|
452
|
+
// Save thumbnail with a download token
|
|
453
|
+
const token = (0, crypto_1.randomUUID)();
|
|
454
|
+
await thumb.save(outputBuffer, {
|
|
455
|
+
contentType: 'image/webp',
|
|
456
|
+
metadata: {
|
|
457
|
+
cacheControl: 'public, max-age=31536000, immutable',
|
|
458
|
+
metadata: { firebaseStorageDownloadTokens: token },
|
|
459
|
+
},
|
|
460
|
+
resumable: false,
|
|
461
|
+
public: false,
|
|
462
|
+
validation: 'md5',
|
|
463
|
+
});
|
|
464
|
+
const thumbUrl = `https://firebasestorage.googleapis.com/v0/b/${bucket.name}/o/${encodeURIComponent(thumbObjectPath)}?alt=media&token=${token}`;
|
|
465
|
+
firebase_functions_1.logger.info('Thumbnail created', {
|
|
466
|
+
path: objectPath,
|
|
467
|
+
thumbPath: thumbUrl,
|
|
468
|
+
size: outputBuffer.length,
|
|
469
|
+
});
|
|
470
|
+
const updated = await updateDocumentWithThumb(documentId, isHttpUrl(originalInput) ? originalInput : undefined, thumbUrl, webImageUrl, originalFilePath);
|
|
471
|
+
const result = {
|
|
472
|
+
success: true,
|
|
473
|
+
path: objectPath,
|
|
474
|
+
thumbPath: thumbUrl,
|
|
475
|
+
webImagePath: webImageUrl,
|
|
476
|
+
originalFilePath,
|
|
477
|
+
created: true,
|
|
478
|
+
documentUpdated: updated,
|
|
479
|
+
};
|
|
480
|
+
return result;
|
|
481
|
+
});
|
|
482
|
+
//# sourceMappingURL=thumbnail-functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbnail-functions.js","sourceRoot":"","sources":["../../../src/modules/storage/thumbnail-functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/user/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./user.models"), exports);
|
|
18
|
+
__exportStar(require("./user"), exports);
|
|
19
|
+
__exportStar(require("./user-management"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/user/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,yCAAuB;AACvB,oDAAkC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface UserData {
|
|
2
|
+
email: string;
|
|
3
|
+
firstName: string;
|
|
4
|
+
lastName: string;
|
|
5
|
+
displayName?: string;
|
|
6
|
+
phoneNumber?: string;
|
|
7
|
+
photoURL?: string;
|
|
8
|
+
roleIds?: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface CreateUserData extends UserData {
|
|
11
|
+
password: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
sendWelcomeEmail?: boolean;
|
|
14
|
+
loginUrl?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CreateUserResponse {
|
|
17
|
+
success: boolean;
|
|
18
|
+
id: string;
|
|
19
|
+
email: string;
|
|
20
|
+
emailSent?: boolean;
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function createCreateUserWithEmailFunction(): import("firebase-functions/v2/https").CallableFunction<any, Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
uid: string;
|
|
26
|
+
email: string;
|
|
27
|
+
emailSent: boolean;
|
|
28
|
+
}>, unknown>;
|
|
29
|
+
//# sourceMappingURL=user-management.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-management.d.ts","sourceRoot":"","sources":["../../../src/modules/user/user-management.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iCAAiC;;;;;aA8HhD"}
|