@pvh-afl/core 1.1.15 → 1.1.17
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/config/config.service.d.ts +8 -0
- package/dist/config/config.service.d.ts.map +1 -1
- package/dist/config/config.service.js +22 -0
- package/dist/config/config.service.js.map +1 -1
- package/dist/integrations/index.d.ts +1 -0
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +2 -0
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/integration.types.d.ts +1 -1
- package/dist/integrations/integration.types.d.ts.map +1 -1
- package/dist/integrations/integrations.module.d.ts.map +1 -1
- package/dist/integrations/integrations.module.js +5 -0
- package/dist/integrations/integrations.module.js.map +1 -1
- package/dist/integrations/storage/azure-blob.service.d.ts +72 -0
- package/dist/integrations/storage/azure-blob.service.d.ts.map +1 -0
- package/dist/integrations/storage/azure-blob.service.js +236 -0
- package/dist/integrations/storage/azure-blob.service.js.map +1 -0
- package/dist/integrations/storage/index.d.ts +3 -0
- package/dist/integrations/storage/index.d.ts.map +1 -0
- package/dist/integrations/storage/index.js +6 -0
- package/dist/integrations/storage/index.js.map +1 -0
- package/dist/integrations/storage/storage.types.d.ts +82 -0
- package/dist/integrations/storage/storage.types.d.ts.map +1 -0
- package/dist/integrations/storage/storage.types.js +3 -0
- package/dist/integrations/storage/storage.types.js.map +1 -0
- package/package.json +2 -1
|
@@ -12,6 +12,10 @@ export interface BrandConfig {
|
|
|
12
12
|
landingPage?: {
|
|
13
13
|
staleTTL?: number;
|
|
14
14
|
};
|
|
15
|
+
staticPages?: {
|
|
16
|
+
ttl?: number;
|
|
17
|
+
staleTTL?: number;
|
|
18
|
+
};
|
|
15
19
|
};
|
|
16
20
|
features?: FeatureFlags;
|
|
17
21
|
}
|
|
@@ -51,5 +55,9 @@ export declare class ConfigService implements OnModuleInit {
|
|
|
51
55
|
defaultTTL: number;
|
|
52
56
|
staleTTL: number;
|
|
53
57
|
};
|
|
58
|
+
getStaticPagesCacheTTL(brand?: string): {
|
|
59
|
+
ttl: number;
|
|
60
|
+
staleTTL: number;
|
|
61
|
+
};
|
|
54
62
|
}
|
|
55
63
|
//# sourceMappingURL=config.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../src/config/config.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACtD,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,qBACa,aAAc,YAAW,YAAY;IAChD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAE9C;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,YAAY;IAKZ,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,uBAAuB;IAmC/B,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../src/config/config.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACtD,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,WAAW,CAAC,EAAE;YACZ,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,qBACa,aAAc,YAAW,YAAY;IAChD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAE9C;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,YAAY;IAKZ,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,uBAAuB;IAmC/B,OAAO,CAAC,WAAW;IAwGnB,OAAO,CAAC,cAAc;IAatB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/C,YAAY,IAAI,MAAM,EAAE;IAKxB,iBAAiB,IAAI,OAAO;IAI5B,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,oBAAoB,IAAI,WAAW,GAAG,SAAS;IAM/C,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAK7D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAmBvD,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOxD,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOrD,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOzD,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOxD,yBAAyB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAO7D,WAAW,IAAI,MAAM;IAKrB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAUrE,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;QACtC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAWD,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;QACtC,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;KAClB;CASF"}
|
|
@@ -153,6 +153,16 @@ let ConfigService = class ConfigService {
|
|
|
153
153
|
adminToken: getEnv("TOMMY_SWISH_ADMIN_TOKEN") || "",
|
|
154
154
|
shopDomain: getEnv("TOMMY_SHOPIFY_STORE_DOMAIN") || "",
|
|
155
155
|
},
|
|
156
|
+
storage: {
|
|
157
|
+
provider: "azure-blob",
|
|
158
|
+
baseUrl: "",
|
|
159
|
+
apiKey: "",
|
|
160
|
+
accountName: getEnv("TOMMY_AZURE_STORAGE_ACCOUNT") || "",
|
|
161
|
+
accountKey: getEnv("TOMMY_AZURE_STORAGE_KEY") || "",
|
|
162
|
+
containerName: getEnv("TOMMY_AZURE_REVIEWS_CONTAINER") || "",
|
|
163
|
+
uploadUrlTtlMinutes: 5,
|
|
164
|
+
readUrlTtlDays: 7,
|
|
165
|
+
},
|
|
156
166
|
},
|
|
157
167
|
cache: {
|
|
158
168
|
defaultTTL: 3600,
|
|
@@ -160,6 +170,10 @@ let ConfigService = class ConfigService {
|
|
|
160
170
|
landingPage: {
|
|
161
171
|
staleTTL: 86400,
|
|
162
172
|
},
|
|
173
|
+
staticPages: {
|
|
174
|
+
ttl: 86400, // 24 hours
|
|
175
|
+
staleTTL: 43200, // 12 hours
|
|
176
|
+
},
|
|
163
177
|
},
|
|
164
178
|
};
|
|
165
179
|
this.brands.set("tommy", tommyConfig);
|
|
@@ -274,6 +288,14 @@ let ConfigService = class ConfigService {
|
|
|
274
288
|
staleTTL: config?.cache?.landingPage?.staleTTL ?? baseTTL.staleTTL,
|
|
275
289
|
};
|
|
276
290
|
}
|
|
291
|
+
getStaticPagesCacheTTL(brand) {
|
|
292
|
+
const slug = brand || this.activeBrand;
|
|
293
|
+
const config = slug ? this.brands.get(slug) : undefined;
|
|
294
|
+
return {
|
|
295
|
+
ttl: config?.cache?.staticPages?.ttl ?? 86400, // Default: 24 hours
|
|
296
|
+
staleTTL: config?.cache?.staticPages?.staleTTL ?? 43200, // Default: 12 hours
|
|
297
|
+
};
|
|
298
|
+
}
|
|
277
299
|
};
|
|
278
300
|
exports.ConfigService = ConfigService;
|
|
279
301
|
exports.ConfigService = ConfigService = tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../src/config/config.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA0D;AAC1D,+CAAyB;AACzB,mDAA6B;
|
|
1
|
+
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../src/config/config.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export * from './shopify-theme';
|
|
|
7
7
|
export * from './search';
|
|
8
8
|
export * from './reviews';
|
|
9
9
|
export * from './swish';
|
|
10
|
+
export * from './storage';
|
|
10
11
|
export * from './integration.factory';
|
|
11
12
|
export * from './integrations.module';
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAG3C,cAAc,YAAY,CAAC;AAG3B,cAAc,OAAO,CAAC;AAGtB,cAAc,WAAW,CAAC;AAG1B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,UAAU,CAAC;AAGzB,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAG3C,cAAc,YAAY,CAAC;AAG3B,cAAc,OAAO,CAAC;AAGtB,cAAc,WAAW,CAAC;AAG1B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,UAAU,CAAC;AAGzB,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
@@ -18,6 +18,8 @@ tslib_1.__exportStar(require("./search"), exports);
|
|
|
18
18
|
tslib_1.__exportStar(require("./reviews"), exports);
|
|
19
19
|
// Wishlist integrations (Swish)
|
|
20
20
|
tslib_1.__exportStar(require("./swish"), exports);
|
|
21
|
+
// Storage integrations (Azure Blob)
|
|
22
|
+
tslib_1.__exportStar(require("./storage"), exports);
|
|
21
23
|
// Integration factory and module
|
|
22
24
|
tslib_1.__exportStar(require("./integration.factory"), exports);
|
|
23
25
|
tslib_1.__exportStar(require("./integrations.module"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,8DAAoC;AACpC,qEAA2C;AAE3C,kCAAkC;AAClC,qDAA2B;AAE3B,2BAA2B;AAC3B,gDAAsB;AAEtB,mCAAmC;AACnC,oDAA0B;AAE1B,oBAAoB;AACpB,0DAAgC;AAEhC,8BAA8B;AAC9B,mDAAyB;AAEzB,kCAAkC;AAClC,oDAA0B;AAE1B,gCAAgC;AAChC,kDAAwB;AAExB,iCAAiC;AACjC,gEAAsC;AACtC,gEAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,8DAAoC;AACpC,qEAA2C;AAE3C,kCAAkC;AAClC,qDAA2B;AAE3B,2BAA2B;AAC3B,gDAAsB;AAEtB,mCAAmC;AACnC,oDAA0B;AAE1B,oBAAoB;AACpB,0DAAgC;AAEhC,8BAA8B;AAC9B,mDAAyB;AAEzB,kCAAkC;AAClC,oDAA0B;AAE1B,gCAAgC;AAChC,kDAAwB;AAExB,oCAAoC;AACpC,oDAA0B;AAE1B,iCAAiC;AACjC,gEAAsC;AACtC,gEAAsC"}
|
|
@@ -46,7 +46,7 @@ export interface IntegrationHealth {
|
|
|
46
46
|
* Supported integration types
|
|
47
47
|
* Add new integration types here as you implement them
|
|
48
48
|
*/
|
|
49
|
-
export type IntegrationType = 'commerce' | 'loyalty' | 'reviews' | 'wishlist' | 'engagement' | 'oms' | 'checkout' | 'payments' | 'search' | 'analytics';
|
|
49
|
+
export type IntegrationType = 'commerce' | 'loyalty' | 'reviews' | 'wishlist' | 'engagement' | 'oms' | 'checkout' | 'payments' | 'search' | 'analytics' | 'storage';
|
|
50
50
|
/**
|
|
51
51
|
* Brand-specific integration configuration
|
|
52
52
|
* Add to your brand JSON config files
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.types.d.ts","sourceRoot":"","sources":["../../src/integrations/integration.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,SAAS,GACT,SAAS,GACT,UAAU,GACV,YAAY,GACZ,KAAK,GACL,UAAU,GACV,UAAU,GACV,QAAQ,GACR,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"integration.types.d.ts","sourceRoot":"","sources":["../../src/integrations/integration.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,SAAS,GACT,SAAS,GACT,UAAU,GACV,YAAY,GACZ,KAAK,GACL,UAAU,GACV,UAAU,GACV,QAAQ,GACR,WAAW,GACX,SAAS,CAAC;AAEd;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,wFAAwF;IACxF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations.module.d.ts","sourceRoot":"","sources":["../../src/integrations/integrations.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"integrations.module.d.ts","sourceRoot":"","sources":["../../src/integrations/integrations.module.ts"],"names":[],"mappings":"AAwBA,qBAsCa,kBAAkB;CAAG"}
|
|
@@ -20,6 +20,8 @@ const wizzy_service_1 = require("./search/wizzy.service");
|
|
|
20
20
|
const judgeme_service_1 = require("./reviews/judgeme.service");
|
|
21
21
|
// Wishlist
|
|
22
22
|
const swish_service_1 = require("./swish/swish.service");
|
|
23
|
+
// Storage
|
|
24
|
+
const azure_blob_service_1 = require("./storage/azure-blob.service");
|
|
23
25
|
// CacheModule and ConfigModule are @Global() so no import needed
|
|
24
26
|
let IntegrationsModule = class IntegrationsModule {
|
|
25
27
|
};
|
|
@@ -45,6 +47,8 @@ exports.IntegrationsModule = IntegrationsModule = tslib_1.__decorate([
|
|
|
45
47
|
judgeme_service_1.JudgeMeService,
|
|
46
48
|
// Wishlist
|
|
47
49
|
swish_service_1.SwishService,
|
|
50
|
+
// Storage
|
|
51
|
+
azure_blob_service_1.AzureBlobService,
|
|
48
52
|
],
|
|
49
53
|
exports: [
|
|
50
54
|
integration_factory_1.IntegrationFactory,
|
|
@@ -58,6 +62,7 @@ exports.IntegrationsModule = IntegrationsModule = tslib_1.__decorate([
|
|
|
58
62
|
wizzy_service_1.WizzyService,
|
|
59
63
|
judgeme_service_1.JudgeMeService,
|
|
60
64
|
swish_service_1.SwishService,
|
|
65
|
+
azure_blob_service_1.AzureBlobService,
|
|
61
66
|
],
|
|
62
67
|
})
|
|
63
68
|
], IntegrationsModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations.module.js","sourceRoot":"","sources":["../../src/integrations/integrations.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,+DAA2D;AAC3D,yEAAoE;AAEpE,8BAA8B;AAC9B,gEAAoE;AACpE,4EAAuE;AACvE,kFAA6E;AAC7E,iEAA4D;AAC5D,uDAAmD;AACnD,oBAAoB;AACpB,6EAAwE;AACxE,iFAA4E;AAC5E,SAAS;AACT,0DAAsD;AACtD,UAAU;AACV,+DAA2D;AAC3D,WAAW;AACX,yDAAqD;
|
|
1
|
+
{"version":3,"file":"integrations.module.js","sourceRoot":"","sources":["../../src/integrations/integrations.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,+DAA2D;AAC3D,yEAAoE;AAEpE,8BAA8B;AAC9B,gEAAoE;AACpE,4EAAuE;AACvE,kFAA6E;AAC7E,iEAA4D;AAC5D,uDAAmD;AACnD,oBAAoB;AACpB,6EAAwE;AACxE,iFAA4E;AAC5E,SAAS;AACT,0DAAsD;AACtD,UAAU;AACV,+DAA2D;AAC3D,WAAW;AACX,yDAAqD;AACrD,UAAU;AACV,qEAAgE;AAEhE,iEAAiE;AAwC1D,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAAG,CAAA;AAArB,gDAAkB;6BAAlB,kBAAkB;IAtC9B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,wCAAkB;YAClB,iDAAsB;YACtB,WAAW;YACX,wCAAsB;YACtB,2CAAmB;YACnB,iDAAsB;YACtB,MAAM;YACN,qCAAgB;YAChB,4BAAY;YACZ,UAAU;YACV,6CAAoB;YACpB,iDAAsB;YACtB,SAAS;YACT,4BAAY;YACZ,UAAU;YACV,gCAAc;YACd,WAAW;YACX,4BAAY;YACZ,UAAU;YACV,qCAAgB;SACjB;QACD,OAAO,EAAE;YACP,wCAAkB;YAClB,gEAAgE;YAChE,wCAAsB;YACtB,2CAAmB;YACnB,iDAAsB;YACtB,4BAAY;YACZ,6CAAoB;YACpB,iDAAsB;YACtB,4BAAY;YACZ,gCAAc;YACd,4BAAY;YACZ,qCAAgB;SACjB;KACF,CAAC;GACW,kBAAkB,CAAG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { IntegrationResponse } from '../integration.types';
|
|
2
|
+
import { AzureBlobConfig, AzureBlobUploadTarget, GenerateUploadUrlOptions, IStorageService } from './storage.types';
|
|
3
|
+
/**
|
|
4
|
+
* Azure Blob Storage Service
|
|
5
|
+
*
|
|
6
|
+
* Mints short-lived SAS URLs so a client can upload files (e.g. review photos)
|
|
7
|
+
* directly to Azure Blob Storage, then hand the resulting public read URL to a
|
|
8
|
+
* downstream consumer.
|
|
9
|
+
*
|
|
10
|
+
* Why this shape:
|
|
11
|
+
* - Some downstream providers (e.g. Judge.me) only accept publicly reachable
|
|
12
|
+
* image URLs; they fetch each URL server-side and re-host it. So the client
|
|
13
|
+
* must first put the file somewhere public.
|
|
14
|
+
* - The client uploads bytes straight to Azure (SAS write URL), keeping large
|
|
15
|
+
* binaries off the middleware.
|
|
16
|
+
* - The read URL carries a long-lived read SAS token so the file can be fetched
|
|
17
|
+
* even when the storage account has anonymous public access disabled.
|
|
18
|
+
*
|
|
19
|
+
* Brand-agnostic: configured per brand via `configure()`, mirroring the other
|
|
20
|
+
* integration services (Judge.me, Swish, etc.).
|
|
21
|
+
*/
|
|
22
|
+
export declare class AzureBlobService implements IStorageService {
|
|
23
|
+
private config;
|
|
24
|
+
private brand;
|
|
25
|
+
/** Default allowed content types (image uploads) when a caller omits its own. */
|
|
26
|
+
private static readonly DEFAULT_IMAGE_CONTENT_TYPES;
|
|
27
|
+
private static readonly DEFAULT_UPLOAD_TTL_MINUTES;
|
|
28
|
+
private static readonly DEFAULT_READ_TTL_DAYS;
|
|
29
|
+
/**
|
|
30
|
+
* Configure the service for a specific brand.
|
|
31
|
+
*
|
|
32
|
+
* Incomplete config is logged and leaves the service unconfigured (callers get
|
|
33
|
+
* a NOT_CONFIGURED error) rather than throwing at startup.
|
|
34
|
+
*/
|
|
35
|
+
configure(brand: string, config: AzureBlobConfig): void;
|
|
36
|
+
/**
|
|
37
|
+
* Check if the service is configured.
|
|
38
|
+
*/
|
|
39
|
+
isConfigured(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Generate a presigned upload target (SAS write URL) plus the read URL that
|
|
42
|
+
* downstream consumers can fetch.
|
|
43
|
+
*
|
|
44
|
+
* Generic across modules — pass a `pathPrefix` and, if needed, your own
|
|
45
|
+
* `allowedContentTypes`. Synchronous: SAS generation is a local crypto
|
|
46
|
+
* operation, no network I/O.
|
|
47
|
+
*
|
|
48
|
+
* @param options - See {@link GenerateUploadUrlOptions}.
|
|
49
|
+
*/
|
|
50
|
+
generateUploadUrl(options: GenerateUploadUrlOptions): IntegrationResponse<AzureBlobUploadTarget>;
|
|
51
|
+
/**
|
|
52
|
+
* Convenience wrapper for review image uploads: stores under
|
|
53
|
+
* `reviews/<brand>/` and accepts the default image content types.
|
|
54
|
+
*
|
|
55
|
+
* @param fileName - Original client file name.
|
|
56
|
+
* @param contentType - Image MIME type.
|
|
57
|
+
*/
|
|
58
|
+
generateReviewImageUploadUrl(fileName: string, contentType: string): IntegrationResponse<AzureBlobUploadTarget>;
|
|
59
|
+
/**
|
|
60
|
+
* Resolve the caller's allowed content types into a MIME→extension map.
|
|
61
|
+
* Accepts a MIME list (extension inferred from the subtype), a MIME→extension
|
|
62
|
+
* map, or nothing (defaults to the built-in image set).
|
|
63
|
+
*/
|
|
64
|
+
private resolveAllowedTypes;
|
|
65
|
+
/**
|
|
66
|
+
* Normalize a path prefix into a trailing-slash-terminated segment, or "".
|
|
67
|
+
*/
|
|
68
|
+
private normalizePrefix;
|
|
69
|
+
private asString;
|
|
70
|
+
private asNumber;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=azure-blob.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-blob.service.d.ts","sourceRoot":"","sources":["../../../src/integrations/storage/azure-blob.service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBACa,gBAAiB,YAAW,eAAe;IACtD,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,KAAK,CAAM;IAEnB,iFAAiF;IACjF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAMjD;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAM;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAK;IAElD;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAoCvD;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;;;;;;OASG;IACH,iBAAiB,CACf,OAAO,EAAE,wBAAwB,GAChC,mBAAmB,CAAC,qBAAqB,CAAC;IAoG7C;;;;;;OAMG;IACH,4BAA4B,CAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAAC,qBAAqB,CAAC;IAQ7C;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,QAAQ;CAQjB"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var AzureBlobService_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AzureBlobService = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
const common_1 = require("@nestjs/common");
|
|
8
|
+
const storage_blob_1 = require("@azure/storage-blob");
|
|
9
|
+
const logger_1 = require("../../common/logger");
|
|
10
|
+
/**
|
|
11
|
+
* Azure Blob Storage Service
|
|
12
|
+
*
|
|
13
|
+
* Mints short-lived SAS URLs so a client can upload files (e.g. review photos)
|
|
14
|
+
* directly to Azure Blob Storage, then hand the resulting public read URL to a
|
|
15
|
+
* downstream consumer.
|
|
16
|
+
*
|
|
17
|
+
* Why this shape:
|
|
18
|
+
* - Some downstream providers (e.g. Judge.me) only accept publicly reachable
|
|
19
|
+
* image URLs; they fetch each URL server-side and re-host it. So the client
|
|
20
|
+
* must first put the file somewhere public.
|
|
21
|
+
* - The client uploads bytes straight to Azure (SAS write URL), keeping large
|
|
22
|
+
* binaries off the middleware.
|
|
23
|
+
* - The read URL carries a long-lived read SAS token so the file can be fetched
|
|
24
|
+
* even when the storage account has anonymous public access disabled.
|
|
25
|
+
*
|
|
26
|
+
* Brand-agnostic: configured per brand via `configure()`, mirroring the other
|
|
27
|
+
* integration services (Judge.me, Swish, etc.).
|
|
28
|
+
*/
|
|
29
|
+
let AzureBlobService = class AzureBlobService {
|
|
30
|
+
static { AzureBlobService_1 = this; }
|
|
31
|
+
config = null;
|
|
32
|
+
brand = '';
|
|
33
|
+
/** Default allowed content types (image uploads) when a caller omits its own. */
|
|
34
|
+
static DEFAULT_IMAGE_CONTENT_TYPES = {
|
|
35
|
+
'image/jpeg': 'jpg',
|
|
36
|
+
'image/pjpeg': 'jpg',
|
|
37
|
+
'image/png': 'png',
|
|
38
|
+
'image/webp': 'webp',
|
|
39
|
+
'image/gif': 'gif',
|
|
40
|
+
};
|
|
41
|
+
static DEFAULT_UPLOAD_TTL_MINUTES = 15;
|
|
42
|
+
static DEFAULT_READ_TTL_DAYS = 7;
|
|
43
|
+
/**
|
|
44
|
+
* Configure the service for a specific brand.
|
|
45
|
+
*
|
|
46
|
+
* Incomplete config is logged and leaves the service unconfigured (callers get
|
|
47
|
+
* a NOT_CONFIGURED error) rather than throwing at startup.
|
|
48
|
+
*/
|
|
49
|
+
configure(brand, config) {
|
|
50
|
+
this.brand = brand;
|
|
51
|
+
const accountName = this.asString(config?.accountName);
|
|
52
|
+
const accountKey = this.asString(config?.accountKey);
|
|
53
|
+
const containerName = this.asString(config?.containerName);
|
|
54
|
+
if (!accountName || !accountKey || !containerName) {
|
|
55
|
+
this.config = null;
|
|
56
|
+
logger_1.logger.warn('Azure Blob storage config incomplete', {
|
|
57
|
+
brand,
|
|
58
|
+
hasAccountName: Boolean(accountName),
|
|
59
|
+
hasAccountKey: Boolean(accountKey),
|
|
60
|
+
hasContainerName: Boolean(containerName),
|
|
61
|
+
});
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this.config = {
|
|
65
|
+
accountName,
|
|
66
|
+
accountKey,
|
|
67
|
+
containerName,
|
|
68
|
+
uploadUrlTtlMinutes: this.asNumber(config.uploadUrlTtlMinutes) ??
|
|
69
|
+
AzureBlobService_1.DEFAULT_UPLOAD_TTL_MINUTES,
|
|
70
|
+
readUrlTtlDays: this.asNumber(config.readUrlTtlDays) ??
|
|
71
|
+
AzureBlobService_1.DEFAULT_READ_TTL_DAYS,
|
|
72
|
+
};
|
|
73
|
+
logger_1.logger.info('Azure Blob storage service configured', {
|
|
74
|
+
brand,
|
|
75
|
+
container: containerName,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if the service is configured.
|
|
80
|
+
*/
|
|
81
|
+
isConfigured() {
|
|
82
|
+
return this.config !== null;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate a presigned upload target (SAS write URL) plus the read URL that
|
|
86
|
+
* downstream consumers can fetch.
|
|
87
|
+
*
|
|
88
|
+
* Generic across modules — pass a `pathPrefix` and, if needed, your own
|
|
89
|
+
* `allowedContentTypes`. Synchronous: SAS generation is a local crypto
|
|
90
|
+
* operation, no network I/O.
|
|
91
|
+
*
|
|
92
|
+
* @param options - See {@link GenerateUploadUrlOptions}.
|
|
93
|
+
*/
|
|
94
|
+
generateUploadUrl(options) {
|
|
95
|
+
if (!this.config) {
|
|
96
|
+
return {
|
|
97
|
+
success: false,
|
|
98
|
+
error: {
|
|
99
|
+
code: 'NOT_CONFIGURED',
|
|
100
|
+
message: 'Azure Blob storage is not configured',
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const { fileName, contentType, pathPrefix } = options;
|
|
105
|
+
const allowed = this.resolveAllowedTypes(options.allowedContentTypes);
|
|
106
|
+
const normalizedType = (contentType || '').trim().toLowerCase();
|
|
107
|
+
const extension = allowed[normalizedType];
|
|
108
|
+
if (!extension) {
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
error: {
|
|
112
|
+
code: 'INVALID_FILE_TYPE',
|
|
113
|
+
message: `Unsupported file type "${contentType}". Allowed: ${Object.keys(allowed).join(', ')}`,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
void fileName; // filename is not trusted for storage; extension comes from MIME
|
|
118
|
+
const { accountName, accountKey, containerName } = this.config;
|
|
119
|
+
// Randomize the stored name — never trust the client path/filename.
|
|
120
|
+
const prefix = this.normalizePrefix(pathPrefix);
|
|
121
|
+
const blobName = `${prefix}${(0, crypto_1.randomUUID)()}.${extension}`;
|
|
122
|
+
const blobUrl = `https://${accountName}.blob.core.windows.net/${containerName}/${encodeURI(blobName)}`;
|
|
123
|
+
const credential = new storage_blob_1.StorageSharedKeyCredential(accountName, accountKey);
|
|
124
|
+
const uploadTtlMinutes = this.asNumber(options.uploadTtlMinutes) ??
|
|
125
|
+
this.config.uploadUrlTtlMinutes;
|
|
126
|
+
const readTtlDays = this.asNumber(options.readTtlDays) ?? this.config.readUrlTtlDays;
|
|
127
|
+
const now = new Date();
|
|
128
|
+
// Backdate start to tolerate client/server clock skew.
|
|
129
|
+
const startsOn = new Date(now.valueOf() - 5 * 60 * 1000);
|
|
130
|
+
const uploadExpiresOn = new Date(now.valueOf() + uploadTtlMinutes * 60 * 1000);
|
|
131
|
+
const readExpiresOn = new Date(now.valueOf() + readTtlDays * 24 * 60 * 60 * 1000);
|
|
132
|
+
// Write SAS: create + write, short-lived, single blob only.
|
|
133
|
+
const uploadSas = (0, storage_blob_1.generateBlobSASQueryParameters)({
|
|
134
|
+
containerName,
|
|
135
|
+
blobName,
|
|
136
|
+
permissions: storage_blob_1.BlobSASPermissions.parse('cw'),
|
|
137
|
+
startsOn,
|
|
138
|
+
expiresOn: uploadExpiresOn,
|
|
139
|
+
protocol: storage_blob_1.SASProtocol.Https,
|
|
140
|
+
contentType: normalizedType,
|
|
141
|
+
}, credential).toString();
|
|
142
|
+
// Read SAS: read-only, long-lived, so downstream consumers can fetch it.
|
|
143
|
+
// The content-type override guarantees the blob is served with its MIME type.
|
|
144
|
+
const readSas = (0, storage_blob_1.generateBlobSASQueryParameters)({
|
|
145
|
+
containerName,
|
|
146
|
+
blobName,
|
|
147
|
+
permissions: storage_blob_1.BlobSASPermissions.parse('r'),
|
|
148
|
+
startsOn,
|
|
149
|
+
expiresOn: readExpiresOn,
|
|
150
|
+
protocol: storage_blob_1.SASProtocol.Https,
|
|
151
|
+
contentType: normalizedType,
|
|
152
|
+
}, credential).toString();
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
data: {
|
|
156
|
+
uploadUrl: `${blobUrl}?${uploadSas}`,
|
|
157
|
+
fileUrl: `${blobUrl}?${readSas}`,
|
|
158
|
+
blobName,
|
|
159
|
+
method: 'PUT',
|
|
160
|
+
headers: {
|
|
161
|
+
'x-ms-blob-type': 'BlockBlob',
|
|
162
|
+
'Content-Type': normalizedType,
|
|
163
|
+
},
|
|
164
|
+
expiresAt: readExpiresOn.toISOString(),
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Convenience wrapper for review image uploads: stores under
|
|
170
|
+
* `reviews/<brand>/` and accepts the default image content types.
|
|
171
|
+
*
|
|
172
|
+
* @param fileName - Original client file name.
|
|
173
|
+
* @param contentType - Image MIME type.
|
|
174
|
+
*/
|
|
175
|
+
generateReviewImageUploadUrl(fileName, contentType) {
|
|
176
|
+
return this.generateUploadUrl({
|
|
177
|
+
fileName,
|
|
178
|
+
contentType,
|
|
179
|
+
pathPrefix: `reviews/${this.brand}`,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Resolve the caller's allowed content types into a MIME→extension map.
|
|
184
|
+
* Accepts a MIME list (extension inferred from the subtype), a MIME→extension
|
|
185
|
+
* map, or nothing (defaults to the built-in image set).
|
|
186
|
+
*/
|
|
187
|
+
resolveAllowedTypes(allowed) {
|
|
188
|
+
if (!allowed) {
|
|
189
|
+
return AzureBlobService_1.DEFAULT_IMAGE_CONTENT_TYPES;
|
|
190
|
+
}
|
|
191
|
+
if (Array.isArray(allowed)) {
|
|
192
|
+
const map = {};
|
|
193
|
+
for (const mime of allowed) {
|
|
194
|
+
const normalized = mime.trim().toLowerCase();
|
|
195
|
+
if (!normalized)
|
|
196
|
+
continue;
|
|
197
|
+
// Infer extension from the MIME subtype (e.g. "application/pdf" -> "pdf").
|
|
198
|
+
const subtype = normalized.split('/')[1] || 'bin';
|
|
199
|
+
map[normalized] = subtype.split('+')[0];
|
|
200
|
+
}
|
|
201
|
+
return map;
|
|
202
|
+
}
|
|
203
|
+
// Already a MIME->extension map; normalize keys.
|
|
204
|
+
const map = {};
|
|
205
|
+
for (const [mime, ext] of Object.entries(allowed)) {
|
|
206
|
+
map[mime.trim().toLowerCase()] = ext;
|
|
207
|
+
}
|
|
208
|
+
return map;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Normalize a path prefix into a trailing-slash-terminated segment, or "".
|
|
212
|
+
*/
|
|
213
|
+
normalizePrefix(pathPrefix) {
|
|
214
|
+
const trimmed = (pathPrefix || '').trim().replace(/^\/+|\/+$/g, '');
|
|
215
|
+
return trimmed ? `${trimmed}/` : '';
|
|
216
|
+
}
|
|
217
|
+
asString(value) {
|
|
218
|
+
return typeof value === 'string' && value.trim() !== ''
|
|
219
|
+
? value.trim()
|
|
220
|
+
: undefined;
|
|
221
|
+
}
|
|
222
|
+
asNumber(value) {
|
|
223
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
224
|
+
return value;
|
|
225
|
+
if (typeof value === 'string' && value.trim() !== '') {
|
|
226
|
+
const n = Number(value);
|
|
227
|
+
return Number.isFinite(n) ? n : undefined;
|
|
228
|
+
}
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
exports.AzureBlobService = AzureBlobService;
|
|
233
|
+
exports.AzureBlobService = AzureBlobService = AzureBlobService_1 = tslib_1.__decorate([
|
|
234
|
+
(0, common_1.Injectable)()
|
|
235
|
+
], AzureBlobService);
|
|
236
|
+
//# sourceMappingURL=azure-blob.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-blob.service.js","sourceRoot":"","sources":["../../../src/integrations/storage/azure-blob.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./storage.types"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./azure-blob.service"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/storage/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,+DAAqC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Integration Types
|
|
3
|
+
*
|
|
4
|
+
* Types for object-storage integrations (e.g. Azure Blob Storage) used for
|
|
5
|
+
* things like direct client uploads via presigned URLs.
|
|
6
|
+
*/
|
|
7
|
+
import { IntegrationResponse } from '../integration.types';
|
|
8
|
+
/**
|
|
9
|
+
* Azure Blob Storage configuration for a brand.
|
|
10
|
+
*/
|
|
11
|
+
export interface AzureBlobConfig {
|
|
12
|
+
/** Storage account name (e.g. "devtommy"). */
|
|
13
|
+
accountName: string;
|
|
14
|
+
/** Storage account key (base64) used to sign SAS tokens. */
|
|
15
|
+
accountKey: string;
|
|
16
|
+
/** Container name (bucket-level) where blobs are stored. Must already exist. */
|
|
17
|
+
containerName: string;
|
|
18
|
+
/** TTL (minutes) for the SAS write URL the client PUTs to (default 15). */
|
|
19
|
+
uploadUrlTtlMinutes?: number;
|
|
20
|
+
/** TTL (days) for the SAS read URL handed to downstream consumers (default 7). */
|
|
21
|
+
readUrlTtlDays?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Options for generating a presigned upload target.
|
|
25
|
+
*
|
|
26
|
+
* Generic across modules — reviews, returns evidence, support attachments, etc.
|
|
27
|
+
* each pass their own `pathPrefix` and, if needed, `allowedContentTypes`.
|
|
28
|
+
*/
|
|
29
|
+
export interface GenerateUploadUrlOptions {
|
|
30
|
+
/** Original client file name — used only to derive a sensible stored extension. */
|
|
31
|
+
fileName: string;
|
|
32
|
+
/** MIME type of the file; must be in `allowedContentTypes`. */
|
|
33
|
+
contentType: string;
|
|
34
|
+
/**
|
|
35
|
+
* Blob path prefix (folder) the file is stored under, e.g. "reviews/tommy"
|
|
36
|
+
* or "returns/evidence". The stored blob name is `${pathPrefix}/${uuid}.${ext}`.
|
|
37
|
+
* Leading/trailing slashes are trimmed. Defaults to "" (container root).
|
|
38
|
+
*/
|
|
39
|
+
pathPrefix?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Allowed MIME types for this upload. Provide either a list of MIME strings
|
|
42
|
+
* (extensions are inferred), or a MIME→extension map for full control.
|
|
43
|
+
* Defaults to the built-in image set (jpeg/pjpeg/png/webp/gif).
|
|
44
|
+
*/
|
|
45
|
+
allowedContentTypes?: string[] | Record<string, string>;
|
|
46
|
+
/** Override the SAS write URL TTL (minutes) for this call. */
|
|
47
|
+
uploadTtlMinutes?: number;
|
|
48
|
+
/** Override the SAS read URL TTL (days) for this call. */
|
|
49
|
+
readTtlDays?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Result of minting a presigned upload target.
|
|
53
|
+
*
|
|
54
|
+
* Flow for the client:
|
|
55
|
+
* 1. PUT the raw bytes to `uploadUrl` using `method` and `headers`.
|
|
56
|
+
* 2. Use `fileUrl` wherever a publicly reachable URL is needed (e.g. pass it to
|
|
57
|
+
* a reviews provider). `fileUrl` carries a long-lived read SAS token so it can
|
|
58
|
+
* be fetched server-side even when anonymous public access is disabled.
|
|
59
|
+
*/
|
|
60
|
+
export interface AzureBlobUploadTarget {
|
|
61
|
+
/** SAS write URL — client PUTs the bytes here. Short-lived. */
|
|
62
|
+
uploadUrl: string;
|
|
63
|
+
/** SAS read URL — publicly fetchable. Long-lived. */
|
|
64
|
+
fileUrl: string;
|
|
65
|
+
/** Server-generated blob name (randomized). */
|
|
66
|
+
blobName: string;
|
|
67
|
+
/** HTTP method to use for the upload. */
|
|
68
|
+
method: 'PUT';
|
|
69
|
+
/** Headers the client must send on the upload request. */
|
|
70
|
+
headers: Record<string, string>;
|
|
71
|
+
/** ISO timestamp when the read URL's access expires. */
|
|
72
|
+
expiresAt: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Storage service interface.
|
|
76
|
+
*/
|
|
77
|
+
export interface IStorageService {
|
|
78
|
+
configure(brand: string, config: AzureBlobConfig): void;
|
|
79
|
+
isConfigured(): boolean;
|
|
80
|
+
generateUploadUrl(options: GenerateUploadUrlOptions): IntegrationResponse<AzureBlobUploadTarget>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=storage.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.types.d.ts","sourceRoot":"","sources":["../../../src/integrations/storage/storage.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,MAAM,EAAE,KAAK,CAAC;IACd,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IACxD,YAAY,IAAI,OAAO,CAAC;IACxB,iBAAiB,CACf,OAAO,EAAE,wBAAwB,GAChC,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;CAC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.types.js","sourceRoot":"","sources":["../../../src/integrations/storage/storage.types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pvh-afl/core",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.17",
|
|
4
4
|
"description": "AFL Core - Shared services for multi-brand commerce platform",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"rxjs": "^7.0.0"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
+
"@azure/storage-blob": "^12.33.0",
|
|
27
28
|
"cheerio": "^1.0.0",
|
|
28
29
|
"zod": "^3.23.0"
|
|
29
30
|
},
|