egame-shared-lib 1.0.29 → 1.0.30
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/services/cloudflare-images.module.d.ts +2 -0
- package/dist/services/cloudflare-images.module.js +23 -0
- package/dist/services/cloudflare-images.module.js.map +1 -0
- package/dist/services/cloudflare-images.service.d.ts +39 -0
- package/dist/services/cloudflare-images.service.js +109 -0
- package/dist/services/cloudflare-images.service.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CloudflareImagesModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const config_1 = require("@nestjs/config");
|
|
12
|
+
const cloudflare_images_service_1 = require("./cloudflare-images.service");
|
|
13
|
+
let CloudflareImagesModule = class CloudflareImagesModule {
|
|
14
|
+
};
|
|
15
|
+
exports.CloudflareImagesModule = CloudflareImagesModule;
|
|
16
|
+
exports.CloudflareImagesModule = CloudflareImagesModule = __decorate([
|
|
17
|
+
(0, common_1.Module)({
|
|
18
|
+
imports: [config_1.ConfigModule],
|
|
19
|
+
providers: [cloudflare_images_service_1.CloudflareImagesService],
|
|
20
|
+
exports: [cloudflare_images_service_1.CloudflareImagesService],
|
|
21
|
+
})
|
|
22
|
+
], CloudflareImagesModule);
|
|
23
|
+
//# sourceMappingURL=cloudflare-images.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-images.module.js","sourceRoot":"","sources":["../../src/services/cloudflare-images.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,2EAAsE;AAmB/D,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAAG,CAAA;AAAzB,wDAAsB;iCAAtB,sBAAsB;IALlC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC;QACvB,SAAS,EAAE,CAAC,mDAAuB,CAAC;QACpC,OAAO,EAAE,CAAC,mDAAuB,CAAC;KACnC,CAAC;GACW,sBAAsB,CAAG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
export interface CloudflareUploadResult {
|
|
3
|
+
imageId: string;
|
|
4
|
+
url: string;
|
|
5
|
+
variants: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class CloudflareImagesService {
|
|
8
|
+
private readonly configService;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
private readonly accountId;
|
|
11
|
+
private readonly apiToken;
|
|
12
|
+
private readonly deliveryUrl;
|
|
13
|
+
private readonly baseUrl;
|
|
14
|
+
constructor(configService: ConfigService);
|
|
15
|
+
uploadImage(fileBuffer: Buffer, fileName: string, customId: string, metadata?: Record<string, string>): Promise<CloudflareUploadResult>;
|
|
16
|
+
uploadAvatar(fileBuffer: Buffer, fileName: string, userId: string): Promise<CloudflareUploadResult>;
|
|
17
|
+
uploadGameImage(fileBuffer: Buffer, fileName: string, gameId: string, type?: 'banner' | 'icon' | 'screenshot'): Promise<CloudflareUploadResult>;
|
|
18
|
+
uploadGameImages(gameMongoId: string, gameName: string, thumbnail?: {
|
|
19
|
+
buffer: Buffer;
|
|
20
|
+
originalname: string;
|
|
21
|
+
}, screenshots?: Array<{
|
|
22
|
+
buffer: Buffer;
|
|
23
|
+
originalname: string;
|
|
24
|
+
}>): Promise<{
|
|
25
|
+
thumbnail: {
|
|
26
|
+
url: string;
|
|
27
|
+
cloudflareImageId: string;
|
|
28
|
+
type: string;
|
|
29
|
+
order: number;
|
|
30
|
+
} | null;
|
|
31
|
+
screenshots: Array<{
|
|
32
|
+
url: string;
|
|
33
|
+
cloudflareImageId: string;
|
|
34
|
+
type: string;
|
|
35
|
+
order: number;
|
|
36
|
+
}>;
|
|
37
|
+
}>;
|
|
38
|
+
deleteImage(imageId: string): Promise<boolean>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
var CloudflareImagesService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.CloudflareImagesService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const config_1 = require("@nestjs/config");
|
|
19
|
+
const axios_1 = __importDefault(require("axios"));
|
|
20
|
+
const FormData = require('form-data');
|
|
21
|
+
let CloudflareImagesService = CloudflareImagesService_1 = class CloudflareImagesService {
|
|
22
|
+
constructor(configService) {
|
|
23
|
+
this.configService = configService;
|
|
24
|
+
this.logger = new common_1.Logger(CloudflareImagesService_1.name);
|
|
25
|
+
this.accountId = this.configService.get('CLOUDFLARE_ACCOUNT_ID', '');
|
|
26
|
+
this.apiToken = this.configService.get('CLOUDFLARE_API_TOKEN', '');
|
|
27
|
+
this.deliveryUrl = this.configService.get('CLOUDFLARE_IMAGES_DELIVERY_URL', 'https://imagedelivery.net/YOUR_ACCOUNT_HASH');
|
|
28
|
+
this.baseUrl = `https://api.cloudflare.com/client/v4/accounts/${this.accountId}/images/v1`;
|
|
29
|
+
}
|
|
30
|
+
async uploadImage(fileBuffer, fileName, customId, metadata) {
|
|
31
|
+
const form = new FormData();
|
|
32
|
+
form.append('file', fileBuffer, { filename: fileName });
|
|
33
|
+
form.append('id', customId);
|
|
34
|
+
form.append('requireSignedURLs', 'false');
|
|
35
|
+
if (metadata) {
|
|
36
|
+
form.append('metadata', JSON.stringify(metadata));
|
|
37
|
+
}
|
|
38
|
+
const response = await axios_1.default.post(this.baseUrl, form, {
|
|
39
|
+
headers: {
|
|
40
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
41
|
+
...form.getHeaders(),
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
if (!response.data.success) {
|
|
45
|
+
throw new Error(`Cloudflare upload failed: ${JSON.stringify(response.data.errors)}`);
|
|
46
|
+
}
|
|
47
|
+
const result = response.data.result;
|
|
48
|
+
const imageId = result.id;
|
|
49
|
+
const url = `${this.deliveryUrl}/${imageId}/public`;
|
|
50
|
+
this.logger.log(`Image uploaded to Cloudflare: ${customId} → ${url}`);
|
|
51
|
+
return {
|
|
52
|
+
imageId,
|
|
53
|
+
url,
|
|
54
|
+
variants: result.variants ?? [url],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async uploadAvatar(fileBuffer, fileName, userId) {
|
|
58
|
+
return this.uploadImage(fileBuffer, fileName, `avatar_${userId}`, {
|
|
59
|
+
userId,
|
|
60
|
+
type: 'avatar',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async uploadGameImage(fileBuffer, fileName, gameId, type = 'banner') {
|
|
64
|
+
return this.uploadImage(fileBuffer, fileName, `game_${gameId}_${type}`, {
|
|
65
|
+
gameId,
|
|
66
|
+
type,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async uploadGameImages(gameMongoId, gameName, thumbnail, screenshots) {
|
|
70
|
+
const sanitizedName = gameName.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();
|
|
71
|
+
let thumbnailResult = null;
|
|
72
|
+
const screenshotResults = [];
|
|
73
|
+
if (thumbnail) {
|
|
74
|
+
const customId = `${sanitizedName}_${gameMongoId}_thumbnail`;
|
|
75
|
+
const result = await this.uploadImage(thumbnail.buffer, thumbnail.originalname, customId, {
|
|
76
|
+
gameId: gameMongoId,
|
|
77
|
+
gameName,
|
|
78
|
+
type: 'thumbnail',
|
|
79
|
+
});
|
|
80
|
+
thumbnailResult = { url: result.url, cloudflareImageId: result.imageId, type: 'thumbnail', order: 0 };
|
|
81
|
+
}
|
|
82
|
+
if (screenshots?.length) {
|
|
83
|
+
for (let i = 0; i < screenshots.length; i++) {
|
|
84
|
+
const customId = `${sanitizedName}_${gameMongoId}_screenshot_${i + 1}`;
|
|
85
|
+
const result = await this.uploadImage(screenshots[i].buffer, screenshots[i].originalname, customId, { gameId: gameMongoId, gameName, type: 'screenshot', order: String(i + 1) });
|
|
86
|
+
screenshotResults.push({ url: result.url, cloudflareImageId: result.imageId, type: 'screenshot', order: i + 1 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { thumbnail: thumbnailResult, screenshots: screenshotResults };
|
|
90
|
+
}
|
|
91
|
+
async deleteImage(imageId) {
|
|
92
|
+
try {
|
|
93
|
+
const response = await axios_1.default.delete(`${this.baseUrl}/${imageId}`, {
|
|
94
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
95
|
+
});
|
|
96
|
+
return response.data.success === true;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
this.logger.error(`Failed to delete Cloudflare image ${imageId}: ${error.message}`);
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
exports.CloudflareImagesService = CloudflareImagesService;
|
|
105
|
+
exports.CloudflareImagesService = CloudflareImagesService = CloudflareImagesService_1 = __decorate([
|
|
106
|
+
(0, common_1.Injectable)(),
|
|
107
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
108
|
+
], CloudflareImagesService);
|
|
109
|
+
//# sourceMappingURL=cloudflare-images.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-images.service.js","sourceRoot":"","sources":["../../src/services/cloudflare-images.service.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
package/dist/services/index.js
CHANGED
|
@@ -16,4 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./email.service"), exports);
|
|
18
18
|
__exportStar(require("./email.module"), exports);
|
|
19
|
+
__exportStar(require("./cloudflare-images.service"), exports);
|
|
20
|
+
__exportStar(require("./cloudflare-images.module"), exports);
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,iDAA+B;AAC/B,8DAA4C;AAC5C,6DAA2C"}
|