@trokky/trokky 3.1.0 → 3.3.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.
Files changed (114) hide show
  1. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts +140 -0
  2. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts.map +1 -0
  3. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js +853 -0
  4. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js.map +1 -0
  5. package/dist/adapters/cloudflare-d1/index.d.ts +5 -0
  6. package/dist/adapters/cloudflare-d1/index.d.ts.map +1 -0
  7. package/dist/adapters/cloudflare-d1/index.js +12 -0
  8. package/dist/adapters/cloudflare-d1/index.js.map +1 -0
  9. package/dist/adapters/cloudflare-d1/rate-limit-store.d.ts +46 -0
  10. package/dist/adapters/cloudflare-d1/rate-limit-store.d.ts.map +1 -0
  11. package/dist/adapters/cloudflare-d1/rate-limit-store.js +96 -0
  12. package/dist/adapters/cloudflare-d1/rate-limit-store.js.map +1 -0
  13. package/dist/adapters/cloudflare-d1/types.d.ts +69 -0
  14. package/dist/adapters/cloudflare-d1/types.d.ts.map +1 -0
  15. package/dist/adapters/cloudflare-d1/types.js +2 -0
  16. package/dist/adapters/cloudflare-d1/types.js.map +1 -0
  17. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.d.ts +86 -0
  18. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.d.ts.map +1 -0
  19. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.js +493 -0
  20. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.js.map +1 -0
  21. package/dist/adapters/cloudflare-r2/index.d.ts +3 -0
  22. package/dist/adapters/cloudflare-r2/index.d.ts.map +1 -0
  23. package/dist/adapters/cloudflare-r2/index.js +11 -0
  24. package/dist/adapters/cloudflare-r2/index.js.map +1 -0
  25. package/dist/adapters/cloudflare-r2/types.d.ts +43 -0
  26. package/dist/adapters/cloudflare-r2/types.d.ts.map +1 -0
  27. package/dist/adapters/cloudflare-r2/types.js +2 -0
  28. package/dist/adapters/cloudflare-r2/types.js.map +1 -0
  29. package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts +9 -0
  30. package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts.map +1 -1
  31. package/dist/adapters/filesystem-data/filesystem-data-adapter.js +28 -0
  32. package/dist/adapters/filesystem-data/filesystem-data-adapter.js.map +1 -1
  33. package/dist/adapters/postgres-data/postgres-data-adapter.d.ts +9 -0
  34. package/dist/adapters/postgres-data/postgres-data-adapter.d.ts.map +1 -1
  35. package/dist/adapters/postgres-data/postgres-data-adapter.js +59 -0
  36. package/dist/adapters/postgres-data/postgres-data-adapter.js.map +1 -1
  37. package/dist/core/core/engine.d.ts +10 -0
  38. package/dist/core/core/engine.d.ts.map +1 -1
  39. package/dist/core/core/engine.js +16 -2
  40. package/dist/core/core/engine.js.map +1 -1
  41. package/dist/core/media/image-processor.d.ts.map +1 -1
  42. package/dist/core/media/image-processor.js +5 -13
  43. package/dist/core/media/image-processor.js.map +1 -1
  44. package/dist/core/media/processors/sharp.d.ts.map +1 -1
  45. package/dist/core/media/processors/sharp.js +13 -2
  46. package/dist/core/media/processors/sharp.js.map +1 -1
  47. package/dist/core/media/processors/types.d.ts +1 -1
  48. package/dist/core/media/processors/types.d.ts.map +1 -1
  49. package/dist/core/security/rate-limit-store.d.ts +56 -0
  50. package/dist/core/security/rate-limit-store.d.ts.map +1 -0
  51. package/dist/core/security/rate-limit-store.js +55 -0
  52. package/dist/core/security/rate-limit-store.js.map +1 -0
  53. package/dist/core/security/rate-limiter.d.ts +39 -2
  54. package/dist/core/security/rate-limiter.d.ts.map +1 -1
  55. package/dist/core/security/rate-limiter.js +52 -20
  56. package/dist/core/security/rate-limiter.js.map +1 -1
  57. package/dist/core/services/media-service.d.ts +34 -0
  58. package/dist/core/services/media-service.d.ts.map +1 -1
  59. package/dist/core/services/media-service.js +172 -120
  60. package/dist/core/services/media-service.js.map +1 -1
  61. package/dist/core/services/user-service.d.ts +42 -0
  62. package/dist/core/services/user-service.d.ts.map +1 -1
  63. package/dist/core/services/user-service.js +114 -1
  64. package/dist/core/services/user-service.js.map +1 -1
  65. package/dist/core/types/storage-adapters.d.ts +18 -0
  66. package/dist/core/types/storage-adapters.d.ts.map +1 -1
  67. package/dist/core/utils/retry.d.ts +45 -0
  68. package/dist/core/utils/retry.d.ts.map +1 -0
  69. package/dist/core/utils/retry.js +47 -0
  70. package/dist/core/utils/retry.js.map +1 -0
  71. package/dist/i18n/config.d.ts +32 -0
  72. package/dist/i18n/config.d.ts.map +1 -1
  73. package/dist/i18n/locales/en/auth.json +16 -0
  74. package/dist/i18n/locales/fr/auth.json +16 -0
  75. package/dist/integrations/workers/adapter.d.ts +28 -0
  76. package/dist/integrations/workers/adapter.d.ts.map +1 -0
  77. package/dist/integrations/workers/adapter.js +111 -0
  78. package/dist/integrations/workers/adapter.js.map +1 -0
  79. package/dist/integrations/workers/index.d.ts +22 -0
  80. package/dist/integrations/workers/index.d.ts.map +1 -0
  81. package/dist/integrations/workers/index.js +60 -0
  82. package/dist/integrations/workers/index.js.map +1 -0
  83. package/dist/routes/auth/auth-flow-store.d.ts +17 -0
  84. package/dist/routes/auth/auth-flow-store.d.ts.map +1 -1
  85. package/dist/routes/auth/auth-flow-store.js +27 -0
  86. package/dist/routes/auth/auth-flow-store.js.map +1 -1
  87. package/dist/routes/auth/oauth.d.ts.map +1 -1
  88. package/dist/routes/auth/oauth.js +5 -12
  89. package/dist/routes/auth/oauth.js.map +1 -1
  90. package/dist/routes/auth/passkey.d.ts.map +1 -1
  91. package/dist/routes/auth/passkey.js +5 -8
  92. package/dist/routes/auth/passkey.js.map +1 -1
  93. package/dist/routes/handlers/auth.d.ts +14 -0
  94. package/dist/routes/handlers/auth.d.ts.map +1 -1
  95. package/dist/routes/handlers/auth.js +55 -0
  96. package/dist/routes/handlers/auth.js.map +1 -1
  97. package/dist/structure/validation/schemas.d.ts +60 -60
  98. package/package.json +20 -1
  99. package/dist/core/media/processors/cloudflare-images.d.ts +0 -83
  100. package/dist/core/media/processors/cloudflare-images.d.ts.map +0 -1
  101. package/dist/core/media/processors/cloudflare-images.js +0 -241
  102. package/dist/core/media/processors/cloudflare-images.js.map +0 -1
  103. package/dist/core/media/processors/cloudflare-transform-store.d.ts +0 -127
  104. package/dist/core/media/processors/cloudflare-transform-store.d.ts.map +0 -1
  105. package/dist/core/media/processors/cloudflare-transform-store.js +0 -237
  106. package/dist/core/media/processors/cloudflare-transform-store.js.map +0 -1
  107. package/dist/core/media/processors/cloudflare-transformations.d.ts +0 -81
  108. package/dist/core/media/processors/cloudflare-transformations.d.ts.map +0 -1
  109. package/dist/core/media/processors/cloudflare-transformations.js +0 -144
  110. package/dist/core/media/processors/cloudflare-transformations.js.map +0 -1
  111. package/dist/core/media/processors/workers-images.d.ts +0 -112
  112. package/dist/core/media/processors/workers-images.d.ts.map +0 -1
  113. package/dist/core/media/processors/workers-images.js +0 -257
  114. package/dist/core/media/processors/workers-images.js.map +0 -1
@@ -1,48 +1,80 @@
1
1
  import { RateLimitError } from '../errors/index.js';
2
+ import { MemoryRateLimitStore } from './rate-limit-store.js';
2
3
  export class RateLimiter {
3
- operationCounts = new Map();
4
4
  defaultConfig = {
5
5
  windowMs: 60 * 1000, // 1 minute
6
6
  maxRequests: 1000
7
7
  };
8
+ config;
9
+ store;
10
+ memoryStore;
11
+ leaseSize;
12
+ leases = new Map();
8
13
  constructor(config = {}) {
9
14
  this.config = { ...this.defaultConfig, ...config };
15
+ const store = config.store ?? new MemoryRateLimitStore();
16
+ this.store = store;
17
+ // Kept typed so cleanup() can still prune, which only makes sense in memory.
18
+ this.memoryStore = store instanceof MemoryRateLimitStore ? store : null;
19
+ this.leaseSize = Math.max(1, config.leaseSize ?? 1);
10
20
  }
11
- config;
12
21
  async checkRateLimit(operation, context) {
13
- const key = this.config.keyGenerator
14
- ? this.config.keyGenerator(operation, context)
15
- : operation;
22
+ const key = this.config.keyGenerator ? this.config.keyGenerator(operation, context) : operation;
23
+ const { windowMs, maxRequests } = this.config.limits?.[operation] ?? this.config;
16
24
  const now = Date.now();
17
- const windowStart = Math.floor(now / this.config.windowMs) * this.config.windowMs;
18
- const current = this.operationCounts.get(key);
19
- if (!current || current.windowStart < windowStart) {
20
- // New window or first request
21
- this.operationCounts.set(key, { count: 1, windowStart });
25
+ const windowStart = Math.floor(now / windowMs) * windowMs;
26
+ const lease = this.leases.get(key);
27
+ if (lease && lease.windowStart === windowStart && lease.remaining > 0) {
28
+ lease.remaining -= 1;
22
29
  return;
23
30
  }
24
- if (current.count >= this.config.maxRequests) {
31
+ const granted = await this.store.reserve({
32
+ key,
33
+ windowStart,
34
+ windowMs,
35
+ want: this.leaseSize,
36
+ max: maxRequests
37
+ });
38
+ if (granted <= 0) {
39
+ // A spent lease from this window must not be resurrected by a later call.
40
+ this.leases.set(key, { windowStart, remaining: 0 });
25
41
  throw new RateLimitError(operation);
26
42
  }
27
- current.count++;
43
+ // One unit pays for this request; the rest is credit for the next ones.
44
+ this.leases.set(key, { windowStart, remaining: granted - 1 });
28
45
  }
46
+ /**
47
+ * Drop bookkeeping for windows that are well past. Only meaningful for the
48
+ * in-memory store; a shared store expires its own rows.
49
+ */
29
50
  cleanup() {
30
51
  const now = Date.now();
31
- const cutoff = now - this.config.windowMs * 2; // Keep 2 windows of history
32
- for (const [key, data] of this.operationCounts.entries()) {
33
- if (data.windowStart < cutoff) {
34
- this.operationCounts.delete(key);
52
+ const cutoff = now - this.config.windowMs * 2;
53
+ for (const [key, lease] of this.leases.entries()) {
54
+ if (lease.windowStart < cutoff) {
55
+ this.leases.delete(key);
35
56
  }
36
57
  }
58
+ this.memoryStore?.cleanup(this.config.windowMs, now);
37
59
  }
60
+ /**
61
+ * Requests left in the current window, as far as this instance can tell.
62
+ * With a shared store and a lease larger than one this is a local view: it
63
+ * counts what this instance still holds, not what every instance has spent.
64
+ */
38
65
  getRemainingRequests(operation) {
39
66
  const now = Date.now();
40
67
  const windowStart = Math.floor(now / this.config.windowMs) * this.config.windowMs;
41
- const current = this.operationCounts.get(operation);
42
- if (!current || current.windowStart < windowStart) {
43
- return this.config.maxRequests;
68
+ if (this.memoryStore) {
69
+ const used = this.memoryStore.used(operation, windowStart);
70
+ const held = this.leases.get(operation);
71
+ const unspent = held && held.windowStart === windowStart ? held.remaining : 0;
72
+ // `used` counts leased units, some of which are still in hand.
73
+ return Math.max(0, this.config.maxRequests - used + unspent);
44
74
  }
45
- return Math.max(0, this.config.maxRequests - current.count);
75
+ const lease = this.leases.get(operation);
76
+ return lease && lease.windowStart === windowStart ? lease.remaining : this.config.maxRequests;
46
77
  }
47
78
  }
79
+ export { MemoryRateLimitStore } from './rate-limit-store.js';
48
80
  //# sourceMappingURL=rate-limiter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/core/security/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAQnD,MAAM,OAAO,WAAW;IACd,eAAe,GAAG,IAAI,GAAG,EAAkD,CAAA;IAClE,aAAa,GAAoB;QAChD,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW;QAChC,WAAW,EAAE,IAAI;KAClB,CAAA;IAED,YAAY,SAAmC,EAAE;QAC/C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE,CAAA;IACpD,CAAC;IAEO,MAAM,CAAiB;IAExB,KAAK,CAAC,cAAc,CACzB,SAAiB,EACjB,OAAiC;QAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;YAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA;QAEjF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE7C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC;YAClD,8BAA8B;YAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC;IAEM,OAAO;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAA,CAAC,4BAA4B;QAE1E,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,oBAAoB,CAAC,SAAiB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA;QAEjF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAEnD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;QAChC,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7D,CAAC;CACF"}
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/core/security/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,21 @@ export interface MediaServiceDependencies {
15
15
  eventsEnabled: boolean;
16
16
  getImageProcessor: () => ImageProcessor;
17
17
  }
18
+ /** One step of media processing that did not succeed, even after retries. */
19
+ export interface VariantFailure {
20
+ stage: 'process' | 'save-variant' | 'persist-metadata';
21
+ variant?: string;
22
+ error: string;
23
+ }
24
+ /**
25
+ * What happened while generating variants, recorded on the media file when it was not clean.
26
+ * Its absence means every variant was generated and stored.
27
+ */
28
+ export interface ImageProcessingReport {
29
+ status: 'partial' | 'failed';
30
+ failures: VariantFailure[];
31
+ failedAt: string;
32
+ }
18
33
  /**
19
34
  * Media upload, retrieval, image variants and filename sanitization.
20
35
  */
@@ -22,6 +37,25 @@ export declare class MediaService {
22
37
  private readonly deps;
23
38
  constructor(deps: MediaServiceDependencies);
24
39
  uploadMedia(file: File): Promise<MediaFile>;
40
+ /**
41
+ * Retry policy for the remote-backed steps of media processing.
42
+ *
43
+ * Cloudflare's Images service fails a small share of calls transiently — measured at roughly
44
+ * one in fifteen for a 6MB JPEG — and every one of those used to cost a thumbnail silently.
45
+ * Input the service will never accept is not retried: that is a permanent failure and should
46
+ * surface immediately rather than after three waits.
47
+ */
48
+ private retryOptions;
49
+ /**
50
+ * Generate every variant for an image and write them to storage.
51
+ *
52
+ * Shared by upload and regeneration so both get the same retries and the same reporting. A
53
+ * failure never throws: the original file is already stored and is what the caller actually
54
+ * uploaded. But a failure is never swallowed either — it comes back in `report`, which the
55
+ * caller attaches to the media record, so an image with missing variants says so instead of
56
+ * looking complete.
57
+ */
58
+ private generateVariants;
25
59
  getMedia(id: string): Promise<MediaFile | null>;
26
60
  updateMedia(id: string, metadata: Record<string, any>): Promise<MediaFile>;
27
61
  getMediaContent(id: string): Promise<ArrayBuffer | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"media-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,SAAS,EAET,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,EAAE,mBAAmB,CAAA;IACjC,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,cAAc,CAAA;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,iBAAiB,EAAE,MAAM,cAAc,CAAA;CACxC;AAED;;GAEG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,wBAAwB;IAG9C,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;IAkI3C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAY/C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB1E,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAYxD,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAalF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtC,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAkH7D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAKlD,4BAA4B,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAiDhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAgC1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAIlD"}
1
+ {"version":3,"file":"media-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,SAAS,EAET,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,EAAE,mBAAmB,CAAA;IACjC,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,cAAc,CAAA;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,iBAAiB,EAAE,MAAM,cAAc,CAAA;CACxC;AAGD,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,GAAG,cAAc,GAAG,kBAAkB,CAAA;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAQD;;GAEG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,wBAAwB;IAG9C,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;IA2FxD;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAqBpB;;;;;;;;OAQG;YACW,gBAAgB;IAsFjB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAY/C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB1E,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAYxD,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAalF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtC,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA0F7D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAKlD,4BAA4B,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAiDhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAgC1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAIlD"}
@@ -1,4 +1,5 @@
1
1
  import { SecurityValidator } from '../security/validation.js';
2
+ import { withRetry } from '../utils/retry.js';
2
3
  import { mediaUploaded, mediaDeleted } from '../events/index.js';
3
4
  import { DocumentNotFoundError, InvalidInputError } from '../errors/index.js';
4
5
  /**
@@ -29,90 +30,52 @@ export class MediaService {
29
30
  const mediaFile = await this.deps.mediaStorage.uploadFile(file, metadata);
30
31
  // Process image if it's an image file
31
32
  if (file.type.startsWith('image/')) {
32
- try {
33
- const processedImage = await this.deps.getImageProcessor().processImage(file, {
34
- id: metadata.id,
35
- filename: metadata.filename,
36
- path: metadata.filename // Use filename as fallback since we don't have the full path here
37
- });
38
- // Save variant files directly to storage without creating separate MediaFile records
39
- const savedVariants = {};
40
- for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
41
- if (variantData.buffer) {
42
- try {
43
- // Save variant file directly using storage adapter's variant support
44
- if (this.deps.mediaStorage.saveVariantFile) {
45
- const variantPath = await this.deps.mediaStorage.saveVariantFile(metadata.id, variantName, variantData.buffer, variantData.format);
46
- // Store variant info without URL - let frontend handle URL construction
47
- savedVariants[variantName] = {
48
- width: variantData.width,
49
- height: variantData.height,
50
- format: variantData.format,
51
- size: variantData.size
52
- };
53
- this.deps.logger.info('Variant file saved directly', {
54
- parentId: metadata.id,
55
- variantName,
56
- path: variantPath
57
- });
58
- }
59
- else {
60
- // Fallback: just store metadata without physical files for now
61
- savedVariants[variantName] = {
62
- url: variantData.url,
63
- width: variantData.width,
64
- height: variantData.height,
65
- format: variantData.format,
66
- size: variantData.size
67
- };
68
- this.deps.logger.warn('Storage adapter does not support variant files - storing metadata only', {
69
- parentId: metadata.id,
70
- variantName
71
- });
72
- }
73
- }
74
- catch (variantError) {
75
- this.deps.logger.warn('Failed to save variant file', {
76
- parentId: metadata.id,
77
- variantName,
78
- error: variantError instanceof Error ? variantError.message : 'Unknown error'
79
- });
80
- }
81
- }
82
- }
83
- // Store processed image metadata in the media file
84
- mediaFile.metadata = {
85
- ...mediaFile.metadata,
86
- imageVariants: savedVariants,
87
- originalDimensions: {
88
- width: processedImage.original.width,
89
- height: processedImage.original.height
90
- }
91
- };
92
- // Save the updated metadata back to storage
33
+ const outcome = await this.generateVariants(metadata.id, file, {
34
+ id: metadata.id,
35
+ filename: metadata.filename,
36
+ // Use filename as fallback since we don't have the full path here
37
+ path: metadata.filename
38
+ });
39
+ mediaFile.metadata = {
40
+ ...mediaFile.metadata,
41
+ imageVariants: outcome.variants,
42
+ ...(outcome.originalDimensions ? { originalDimensions: outcome.originalDimensions } : {}),
43
+ ...(outcome.report ? { imageProcessing: outcome.report } : {})
44
+ };
45
+ // Persist the variant metadata. Without this the variant files exist in storage and
46
+ // nothing references them, which is invisible until someone notices missing thumbnails —
47
+ // so it retries, and a final failure is reported rather than logged and forgotten.
48
+ if (this.deps.mediaStorage.updateFile) {
49
+ const update = this.deps.mediaStorage.updateFile.bind(this.deps.mediaStorage);
93
50
  try {
94
- if (this.deps.mediaStorage.updateFile) {
95
- await this.deps.mediaStorage.updateFile(mediaFile.id, mediaFile.metadata);
96
- }
51
+ await withRetry(() => update(mediaFile.id, mediaFile.metadata), this.retryOptions('persist image variant metadata', { fileId: metadata.id }));
97
52
  this.deps.logger.info('Image variants metadata saved', {
98
53
  fileId: metadata.id,
99
- variantCount: Object.keys(processedImage.variants).length
54
+ variantCount: Object.keys(outcome.variants).length
100
55
  });
101
56
  }
102
57
  catch (updateError) {
103
- this.deps.logger.warn('Failed to save image variants metadata', {
58
+ const message = updateError instanceof Error ? updateError.message : 'Unknown error';
59
+ // The upload itself succeeded and the original is stored, so throwing here would tell
60
+ // the caller to re-upload a file that is already safe. Report it on the record the
61
+ // caller receives instead, and at error level rather than as a warning.
62
+ this.deps.logger.error('Image variants metadata could not be saved', {
104
63
  fileId: metadata.id,
105
- error: updateError instanceof Error ? updateError.message : 'Unknown error'
64
+ error: message
106
65
  });
66
+ mediaFile.metadata = {
67
+ ...mediaFile.metadata,
68
+ imageProcessing: {
69
+ status: 'failed',
70
+ failures: [
71
+ ...(outcome.report?.failures ?? []),
72
+ { stage: 'persist-metadata', error: message }
73
+ ],
74
+ failedAt: new Date().toISOString()
75
+ }
76
+ };
107
77
  }
108
78
  }
109
- catch (error) {
110
- // Log error but don't fail the upload - image processing is optional
111
- this.deps.logger.warn('Image processing failed', {
112
- fileId: metadata.id,
113
- error: error instanceof Error ? error.message : 'Unknown error'
114
- });
115
- }
116
79
  }
117
80
  // Emit media uploaded event
118
81
  if (this.deps.eventsEnabled) {
@@ -128,6 +91,113 @@ export class MediaService {
128
91
  }
129
92
  return mediaFile;
130
93
  }
94
+ /**
95
+ * Retry policy for the remote-backed steps of media processing.
96
+ *
97
+ * Cloudflare's Images service fails a small share of calls transiently — measured at roughly
98
+ * one in fifteen for a 6MB JPEG — and every one of those used to cost a thumbnail silently.
99
+ * Input the service will never accept is not retried: that is a permanent failure and should
100
+ * surface immediately rather than after three waits.
101
+ */
102
+ retryOptions(operation, context) {
103
+ return {
104
+ attempts: 3,
105
+ isRetryable: (error) => {
106
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
107
+ const permanent = [
108
+ 'unsupported', 'invalid', 'too large', 'not an image', 'unsupported format', 'malformed'
109
+ ];
110
+ return !permanent.some(marker => message.includes(marker));
111
+ },
112
+ onRetry: ({ error, attempt, delayMs }) => {
113
+ this.deps.logger.warn(`Retrying: ${operation}`, {
114
+ ...context,
115
+ attempt,
116
+ delayMs,
117
+ error: error instanceof Error ? error.message : 'Unknown error'
118
+ });
119
+ }
120
+ };
121
+ }
122
+ /**
123
+ * Generate every variant for an image and write them to storage.
124
+ *
125
+ * Shared by upload and regeneration so both get the same retries and the same reporting. A
126
+ * failure never throws: the original file is already stored and is what the caller actually
127
+ * uploaded. But a failure is never swallowed either — it comes back in `report`, which the
128
+ * caller attaches to the media record, so an image with missing variants says so instead of
129
+ * looking complete.
130
+ */
131
+ async generateVariants(id, file, metadata) {
132
+ const failures = [];
133
+ let processedImage;
134
+ try {
135
+ processedImage = await withRetry(() => this.deps.getImageProcessor().processImage(file, metadata), this.retryOptions('process image', { fileId: id }));
136
+ }
137
+ catch (error) {
138
+ const message = error instanceof Error ? error.message : 'Unknown error';
139
+ this.deps.logger.error('Image processing failed after retries', { fileId: id, error: message });
140
+ return {
141
+ variants: {},
142
+ report: {
143
+ status: 'failed',
144
+ failures: [{ stage: 'process', error: message }],
145
+ failedAt: new Date().toISOString()
146
+ }
147
+ };
148
+ }
149
+ const variants = {};
150
+ const saveVariantFile = this.deps.mediaStorage.saveVariantFile?.bind(this.deps.mediaStorage);
151
+ for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
152
+ if (!variantData.buffer)
153
+ continue;
154
+ if (!saveVariantFile) {
155
+ // No variant storage: keep the processor's own URL, which is all there is to keep.
156
+ variants[variantName] = {
157
+ url: variantData.url,
158
+ width: variantData.width,
159
+ height: variantData.height,
160
+ format: variantData.format,
161
+ size: variantData.size
162
+ };
163
+ this.deps.logger.warn('Storage adapter does not support variant files - storing metadata only', {
164
+ parentId: id,
165
+ variantName
166
+ });
167
+ continue;
168
+ }
169
+ try {
170
+ const variantPath = await withRetry(() => saveVariantFile(id, variantName, variantData.buffer, variantData.format), this.retryOptions('save variant file', { parentId: id, variantName }));
171
+ // Store variant info without URL - let frontend handle URL construction
172
+ variants[variantName] = {
173
+ width: variantData.width,
174
+ height: variantData.height,
175
+ format: variantData.format,
176
+ size: variantData.size
177
+ };
178
+ this.deps.logger.info('Variant file saved', { parentId: id, variantName, path: variantPath });
179
+ }
180
+ catch (variantError) {
181
+ const message = variantError instanceof Error ? variantError.message : 'Unknown error';
182
+ this.deps.logger.error('Variant file could not be saved after retries', {
183
+ parentId: id,
184
+ variantName,
185
+ error: message
186
+ });
187
+ failures.push({ stage: 'save-variant', variant: variantName, error: message });
188
+ }
189
+ }
190
+ return {
191
+ variants,
192
+ originalDimensions: {
193
+ width: processedImage.original.width,
194
+ height: processedImage.original.height
195
+ },
196
+ report: failures.length === 0
197
+ ? undefined
198
+ : { status: 'partial', failures, failedAt: new Date().toISOString() }
199
+ };
200
+ }
131
201
  async getMedia(id) {
132
202
  if (this.deps.rateLimiter) {
133
203
  await this.deps.rateLimiter.checkRateLimit('getMedia');
@@ -235,69 +305,51 @@ export class MediaService {
235
305
  const file = new File([new Uint8Array(fileContent)], mediaFile.filename, {
236
306
  type: mediaFile.contentType
237
307
  });
238
- // Process the image to generate new variants
239
- const processedImage = await this.deps.getImageProcessor().processImage(file, {
240
- id: mediaFile.id,
241
- filename: mediaFile.filename,
242
- path: mediaFile.metadata?.path || mediaFile.filename
243
- });
244
- // Delete existing variants first
308
+ // Delete existing variants first. A failure here is not fatal — the names are about to be
309
+ // overwritten anyway — but it is reported rather than dropped, because leftovers of a
310
+ // format no longer generated would linger in storage.
311
+ const staleVariantFailures = [];
245
312
  if (this.deps.mediaStorage.deleteVariantFiles) {
313
+ const deleteVariantFiles = this.deps.mediaStorage.deleteVariantFiles.bind(this.deps.mediaStorage);
246
314
  try {
247
- await this.deps.mediaStorage.deleteVariantFiles(id);
315
+ await withRetry(() => deleteVariantFiles(id), this.retryOptions('delete existing variants', { id }));
248
316
  this.deps.logger.info('Existing variants deleted', { id });
249
317
  }
250
318
  catch (deleteError) {
251
- this.deps.logger.warn('Failed to delete existing variants', { id, error: deleteError });
252
- }
253
- }
254
- // Save new variant files
255
- const savedVariants = {};
256
- for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
257
- if (variantData.buffer) {
258
- try {
259
- if (this.deps.mediaStorage.saveVariantFile) {
260
- const variantPath = await this.deps.mediaStorage.saveVariantFile(id, variantName, variantData.buffer, variantData.format);
261
- // Store variant info without URL - let frontend handle URL construction
262
- savedVariants[variantName] = {
263
- width: variantData.width,
264
- height: variantData.height,
265
- format: variantData.format,
266
- size: variantData.size
267
- };
268
- this.deps.logger.info('New variant saved', {
269
- parentId: id,
270
- variantName,
271
- path: variantPath
272
- });
273
- }
274
- }
275
- catch (variantError) {
276
- this.deps.logger.warn('Failed to save new variant', {
277
- parentId: id,
278
- variantName,
279
- error: variantError instanceof Error ? variantError.message : 'Unknown error'
280
- });
281
- }
319
+ const message = deleteError instanceof Error ? deleteError.message : 'Unknown error';
320
+ this.deps.logger.error('Existing variants could not be deleted after retries', { id, error: message });
321
+ staleVariantFailures.push({ stage: 'save-variant', error: `stale variants left in place: ${message}` });
282
322
  }
283
323
  }
324
+ // The same generation path as upload, so retries and reporting cannot drift apart.
325
+ const outcome = await this.generateVariants(id, file, {
326
+ id: mediaFile.id,
327
+ filename: mediaFile.filename,
328
+ path: mediaFile.metadata?.path || mediaFile.filename
329
+ });
330
+ const failures = [...staleVariantFailures, ...(outcome.report?.failures ?? [])];
284
331
  // Update metadata with new variants
285
332
  const updatedMetadata = {
286
333
  ...mediaFile.metadata,
287
- imageVariants: savedVariants,
288
- originalDimensions: {
289
- width: processedImage.original.width,
290
- height: processedImage.original.height
291
- }
334
+ imageVariants: outcome.variants,
335
+ ...(outcome.originalDimensions ? { originalDimensions: outcome.originalDimensions } : {}),
336
+ imageProcessing: failures.length === 0
337
+ ? undefined
338
+ : {
339
+ status: outcome.report?.status ?? 'partial',
340
+ failures,
341
+ failedAt: new Date().toISOString()
342
+ }
292
343
  };
293
344
  // Save updated metadata
294
345
  const updatedMediaFile = await this.deps.mediaStorage.updateFile?.(id, updatedMetadata);
295
346
  if (!updatedMediaFile) {
296
347
  throw new Error('Failed to update media file metadata');
297
348
  }
298
- this.deps.logger.info('Variants regenerated successfully', {
349
+ this.deps.logger.info('Variants regenerated', {
299
350
  id,
300
- variantCount: Object.keys(savedVariants).length
351
+ variantCount: Object.keys(outcome.variants).length,
352
+ failureCount: failures.length
301
353
  });
302
354
  return updatedMediaFile;
303
355
  }
@@ -1 +1 @@
1
- {"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAM7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAqB7E;;GAEG;AACH,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,IAA8B;QAA9B,SAAI,GAAJ,IAAI,CAA0B;IAAG,CAAC;IAE/D,mBAAmB;IACZ,KAAK,CAAC,WAAW,CAAC,IAAU;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAA;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YACvD,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;SACpD,CAAA;QAED,0BAA0B;QAC1B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAEzE,sCAAsC;QACtC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE;oBAC5E,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,kEAAkE;iBAC3F,CAAC,CAAA;gBAEF,qFAAqF;gBACrF,MAAM,aAAa,GAAwB,EAAE,CAAA;gBAC7C,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAsC,EAAE,CAAC;oBACtH,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;wBACvB,IAAI,CAAC;4BACH,qEAAqE;4BACrE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;gCAC3C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAC9D,QAAQ,CAAC,EAAE,EACX,WAAW,EACX,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,MAAM,CACnB,CAAA;gCAED,wEAAwE;gCACxE,aAAa,CAAC,WAAW,CAAC,GAAG;oCAC3B,KAAK,EAAE,WAAW,CAAC,KAAK;oCACxB,MAAM,EAAE,WAAW,CAAC,MAAM;oCAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;oCAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;iCACvB,CAAA;gCAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;oCACnD,QAAQ,EAAE,QAAQ,CAAC,EAAE;oCACrB,WAAW;oCACX,IAAI,EAAE,WAAW;iCAClB,CAAC,CAAA;4BACJ,CAAC;iCAAM,CAAC;gCACN,+DAA+D;gCAC/D,aAAa,CAAC,WAAW,CAAC,GAAG;oCAC3B,GAAG,EAAE,WAAW,CAAC,GAAG;oCACpB,KAAK,EAAE,WAAW,CAAC,KAAK;oCACxB,MAAM,EAAE,WAAW,CAAC,MAAM;oCAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;oCAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;iCACvB,CAAA;gCACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wEAAwE,EAAE;oCAC9F,QAAQ,EAAE,QAAQ,CAAC,EAAE;oCACrB,WAAW;iCACZ,CAAC,CAAA;4BACJ,CAAC;wBACH,CAAC;wBAAC,OAAO,YAAY,EAAE,CAAC;4BACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;gCACnD,QAAQ,EAAE,QAAQ,CAAC,EAAE;gCACrB,WAAW;gCACX,KAAK,EAAE,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;6BAC9E,CAAC,CAAA;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,mDAAmD;gBACnD,SAAS,CAAC,QAAQ,GAAG;oBACnB,GAAG,SAAS,CAAC,QAAQ;oBACrB,aAAa,EAAE,aAAa;oBAC5B,kBAAkB,EAAE;wBAClB,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK;wBACpC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM;qBACvC;iBACF,CAAA;gBAED,4CAA4C;gBAC5C,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;wBACtC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;oBAC3E,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;wBACrD,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM;qBAC1D,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;wBAC9D,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,KAAK,EAAE,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5E,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qEAAqE;gBACrE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;oBAC/C,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;oBAC3D,KAAK;oBACL,MAAM,EAAE,SAAS,CAAC,EAAE;iBACrB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,EAAU;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACjD,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,QAA6B;QAChE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,8BAA8B;QAC9B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAClE,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC9D,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,EAAU;QACrC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;QAC/D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,OAA6C;QAClE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QACzD,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;QACnE,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAC9D,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,EAAU;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,yCAAyC;QACzC,IAAI,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,uEAAuE;gBACvE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;oBACrD,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAE3C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAA;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;oBAC1D,KAAK;oBACL,MAAM,EAAE,EAAE;iBACX,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,EAAU;QAC7C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAA;YAEtE,8BAA8B;YAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAA;YACvD,CAAC;YAED,8BAA8B;YAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,iBAAiB,CAAC,wDAAwD,EAAE,aAAa,CAAC,CAAA;YACtG,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;YAE5F,gCAAgC;YAChC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YACnE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACzD,CAAC;YAED,0DAA0D;YAC1D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,EAAE;gBACvE,IAAI,EAAE,SAAS,CAAC,WAAW;aAC5B,CAAC,CAAA;YAEF,6CAA6C;YAC7C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE;gBAC5E,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,IAAI,EAAG,SAAS,CAAC,QAAgB,EAAE,IAAI,IAAI,SAAS,CAAC,QAAQ;aAC9D,CAAC,CAAA;YAEF,iCAAiC;YACjC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;gBAC9C,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;oBACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;gBAC5D,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;gBACzF,CAAC;YACH,CAAC;YAED,yBAAyB;YACzB,MAAM,aAAa,GAAwB,EAAE,CAAA;YAC7C,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAsC,EAAE,CAAC;gBACtH,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;oBACvB,IAAI,CAAC;wBACH,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;4BAC3C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAC9D,EAAE,EACF,WAAW,EACX,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,MAAM,CACnB,CAAA;4BAED,wEAAwE;4BACxE,aAAa,CAAC,WAAW,CAAC,GAAG;gCAC3B,KAAK,EAAE,WAAW,CAAC,KAAK;gCACxB,MAAM,EAAE,WAAW,CAAC,MAAM;gCAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;gCAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;6BACvB,CAAA;4BAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;gCACzC,QAAQ,EAAE,EAAE;gCACZ,WAAW;gCACX,IAAI,EAAE,WAAW;6BAClB,CAAC,CAAA;wBACJ,CAAC;oBACH,CAAC;oBAAC,OAAO,YAAY,EAAE,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;4BAClD,QAAQ,EAAE,EAAE;4BACZ,WAAW;4BACX,KAAK,EAAE,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;yBAC9E,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,MAAM,eAAe,GAAG;gBACtB,GAAG,SAAS,CAAC,QAAQ;gBACrB,aAAa,EAAE,aAAa;gBAC5B,kBAAkB,EAAE;oBAClB,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK;oBACpC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM;iBACvC;aACF,CAAA;YAED,wBAAwB;YACxB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;YACvF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACzD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;gBACzD,EAAE;gBACF,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM;aAChD,CAAC,CAAA;YAEF,OAAO,gBAAgB,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBACtD,EAAE;gBACF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC,CAAA;YACF,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,8BAA8B;IACvB,WAAW,CAAC,OAAe,EAAE,WAAoB;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACxE,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAA;IACtC,CAAC;IAED,kBAAkB;IACX,4BAA4B,CAAC,IAAU;QAC5C,6CAA6C;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAA;QAC1D,MAAM,OAAO,GAAG,eAAe,EAAE,WAAW,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA,CAAC,gBAAgB;QACpF,MAAM,YAAY,GAAG,eAAe,EAAE,YAAY,IAAI;YACpD,SAAS;YACT,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe;YACrE,QAAQ;YACR,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW;YACnD,4DAA4D;YAC5D,YAAY,EAAQ,0BAA0B;YAC9C,WAAW,EAAS,8BAA8B;YAClD,WAAW,EAAS,MAAM;YAC1B,YAAY,EAAQ,8BAA8B;YAClD,WAAW,EAAS,MAAM;YAC1B,WAAW,EAAS,MAAM;YAC1B,WAAW,EAAS,kBAAkB;YACtC,aAAa,EAAO,8BAA8B;YAClD,YAAY,EAAQ,OAAO;YAC3B,YAAY,EAAQ,aAAa;YACjC,YAAY;YACZ,iBAAiB;YACjB,oBAAoB;YACpB,yEAAyE;YACzE,OAAO;YACP,YAAY,EAAE,UAAU;YACxB,kBAAkB;SACnB,CAAA;QAED,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,OAAO,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,MAAM,CAAC,CAAA;QACxF,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,iBAAiB,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;QAC5E,CAAC;QAED,4CAA4C;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBAC3C,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,SAAS,EAAE,aAAa;aACzB,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAEM,gBAAgB,CAAC,QAAgB;QACtC,0BAA0B;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QACpE,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEhE,yBAAyB;QACzB,IAAI,SAAS,GAAG,IAAI;YAClB,qDAAqD;aACpD,SAAS,CAAC,KAAK,CAAC;aAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAChC,qDAAqD;aACpD,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;YACjC,sCAAsC;aACrC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YACpB,kCAAkC;aACjC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YACxB,wBAAwB;eACrB,MAAM,CAAA;QAEX,wDAAwD;QACxD,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAElE,0DAA0D;QAC1D,MAAM,aAAa,GAAG,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAA;QACrD,IAAI,SAAS,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YACrC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QACnD,CAAC;QAED,OAAO,SAAS,GAAG,kBAAkB,CAAA;IACvC,CAAC;IAEM,gBAAgB,CAAC,QAAgB;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"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"}