Moved failed delivery download to api

This commit is contained in:
Will Browning 2025-02-02 18:13:08 +00:00
parent 6c5d9f8149
commit 2750a3e2ae
6 changed files with 478 additions and 315 deletions

View File

@ -21,6 +21,7 @@ class FailedDeliveryResource extends JsonResource
'email_type' => $this->email_type,
'status' => $this->status,
'code' => $this->code,
'is_stored' => $this->is_stored,
'attempted_at' => $this->attempted_at?->toDateTimeString(),
'created_at' => $this->created_at->toDateTimeString(),
'updated_at' => $this->updated_at->toDateTimeString(),

647
composer.lock generated

File diff suppressed because it is too large Load Diff

79
package-lock.json generated
View File

@ -68,11 +68,11 @@
}
},
"node_modules/@babel/parser": {
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz",
"integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==",
"version": "7.26.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz",
"integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==",
"dependencies": {
"@babel/types": "^7.26.5"
"@babel/types": "^7.26.7"
},
"bin": {
"parser": "bin/babel-parser.js"
@ -82,9 +82,9 @@
}
},
"node_modules/@babel/runtime": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
"integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
"version": "7.26.7",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz",
"integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@ -93,9 +93,9 @@
}
},
"node_modules/@babel/types": {
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz",
"integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==",
"version": "7.26.7",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz",
"integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
@ -730,20 +730,20 @@
}
},
"node_modules/@tanstack/virtual-core": {
"version": "3.11.2",
"resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz",
"integrity": "sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==",
"version": "3.11.3",
"resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.3.tgz",
"integrity": "sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/tannerlinsley"
}
},
"node_modules/@tanstack/vue-virtual": {
"version": "3.11.2",
"resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.11.2.tgz",
"integrity": "sha512-y0b1p1FTlzxcSt/ZdGWY1AZ52ddwSU69pvFRYAELUSdLLxV8QOPe9dyT/KATO43UCb3DAwiyzi96h2IoYstBOQ==",
"version": "3.11.3",
"resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.11.3.tgz",
"integrity": "sha512-BVZ00i5XBucetRj2doVd32jOPtJthvZSVJvx9GL4gSQsyngliSCtzlP1Op7TFrEtmebRKT8QUQE1tRhOQzWecQ==",
"dependencies": {
"@tanstack/virtual-core": "3.11.2"
"@tanstack/virtual-core": "3.11.3"
},
"funding": {
"type": "github",
@ -785,9 +785,9 @@
"peer": true
},
"node_modules/@types/node": {
"version": "22.10.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.9.tgz",
"integrity": "sha512-Ir6hwgsKyNESl/gLOcEz3krR4CBGgliDqBQ2ma4wIhEx0w+xnoeTq3tdrNw15kU3SxogDjOgv9sqdtLW8mIHaw==",
"version": "22.13.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz",
"integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==",
"peer": true,
"dependencies": {
"undici-types": "~6.20.0"
@ -1374,9 +1374,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001695",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz",
"integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==",
"version": "1.0.30001696",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz",
"integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==",
"funding": [
{
"type": "opencollective",
@ -1704,9 +1704,9 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/electron-to-chromium": {
"version": "1.5.86",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.86.tgz",
"integrity": "sha512-/D7GAAaCRBQFBBcop6SfAAGH37djtpWkOuYhyAajw0l5vsfeSsUQYxaFPwr1c/mC/flARCDdKFo5gpFqNI+18w=="
"version": "1.5.90",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz",
"integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug=="
},
"node_modules/emoji-regex": {
"version": "10.4.0",
@ -1980,9 +1980,9 @@
"peer": true
},
"node_modules/fastq": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
"integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz",
"integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==",
"dependencies": {
"reusify": "^1.0.4"
}
@ -2443,9 +2443,9 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
},
"node_modules/lint-staged": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.2.tgz",
"integrity": "sha512-gCqzB/Li281uZJgReNci+oXXqUEdrFAQAzTE/LwoxxiEuP41vozNe4BATS+4ehdqkWn+Z6bGc3EDcBja3npBVw==",
"version": "15.4.3",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.3.tgz",
"integrity": "sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==",
"dev": true,
"dependencies": {
"chalk": "^5.4.1",
@ -2521,7 +2521,8 @@
"node_modules/lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
"deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead."
},
"node_modules/log-update": {
"version": "6.1.0",
@ -3297,9 +3298,9 @@
},
"node_modules/rollup": {
"name": "@rollup/wasm-node",
"version": "4.31.0",
"resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.31.0.tgz",
"integrity": "sha512-4N3ttsYqUIjCVHXRZ/AMJoaEONWhXFop8h6tOkX+n+PyuYAZFp+QRNRfD+VAn5NmUnLzwwmT4GaKFu5RAQSEvg==",
"version": "4.34.0",
"resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.34.0.tgz",
"integrity": "sha512-TIec0kZZ3KpaaKp+e6XyeGxBVnr/PZnx+63yqC12D+S9z6YBJ3TTM13LjjMHu23oZUkVZghFITGPKciW804YHA==",
"dev": true,
"dependencies": {
"@types/estree": "1.0.6"
@ -3376,9 +3377,9 @@
}
},
"node_modules/semver": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"version": "7.7.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz",
"integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==",
"dev": true,
"bin": {
"semver": "bin/semver.js"

62
postfix/composer.lock generated
View File

@ -290,16 +290,16 @@
},
{
"name": "illuminate/collections",
"version": "v11.39.1",
"version": "v11.41.3",
"source": {
"type": "git",
"url": "https://github.com/illuminate/collections.git",
"reference": "7ad26e6f53da716901f9a2b95cad0cadce09a8b0"
"reference": "80c85f81573cc4c024da05312119f9149a6b64c1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/collections/zipball/7ad26e6f53da716901f9a2b95cad0cadce09a8b0",
"reference": "7ad26e6f53da716901f9a2b95cad0cadce09a8b0",
"url": "https://api.github.com/repos/illuminate/collections/zipball/80c85f81573cc4c024da05312119f9149a6b64c1",
"reference": "80c85f81573cc4c024da05312119f9149a6b64c1",
"shasum": ""
},
"require": {
@ -342,11 +342,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2025-01-21T16:13:55+00:00"
"time": "2025-01-24T15:40:32+00:00"
},
{
"name": "illuminate/conditionable",
"version": "v11.39.1",
"version": "v11.41.3",
"source": {
"type": "git",
"url": "https://github.com/illuminate/conditionable.git",
@ -392,16 +392,16 @@
},
{
"name": "illuminate/container",
"version": "v11.39.1",
"version": "v11.41.3",
"source": {
"type": "git",
"url": "https://github.com/illuminate/container.git",
"reference": "4a777578ce2388384565bf5c8e76881f0da68e54"
"reference": "1caf7d6cf42078fa8d30f26f1e43943ed6b01dae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/container/zipball/4a777578ce2388384565bf5c8e76881f0da68e54",
"reference": "4a777578ce2388384565bf5c8e76881f0da68e54",
"url": "https://api.github.com/repos/illuminate/container/zipball/1caf7d6cf42078fa8d30f26f1e43943ed6b01dae",
"reference": "1caf7d6cf42078fa8d30f26f1e43943ed6b01dae",
"shasum": ""
},
"require": {
@ -439,11 +439,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2024-12-08T15:40:56+00:00"
"time": "2025-01-28T20:44:34+00:00"
},
{
"name": "illuminate/contracts",
"version": "v11.39.1",
"version": "v11.41.3",
"source": {
"type": "git",
"url": "https://github.com/illuminate/contracts.git",
@ -491,16 +491,16 @@
},
{
"name": "illuminate/database",
"version": "v11.39.1",
"version": "v11.41.3",
"source": {
"type": "git",
"url": "https://github.com/illuminate/database.git",
"reference": "be6015812a11c183492b9de50a2f7c58d7792410"
"reference": "ca7441b61fa56e45286d98f130cb1c71eac3ac7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/database/zipball/be6015812a11c183492b9de50a2f7c58d7792410",
"reference": "be6015812a11c183492b9de50a2f7c58d7792410",
"url": "https://api.github.com/repos/illuminate/database/zipball/ca7441b61fa56e45286d98f130cb1c71eac3ac7f",
"reference": "ca7441b61fa56e45286d98f130cb1c71eac3ac7f",
"shasum": ""
},
"require": {
@ -556,11 +556,11 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2025-01-22T16:46:16+00:00"
"time": "2025-01-30T09:49:46+00:00"
},
{
"name": "illuminate/macroable",
"version": "v11.39.1",
"version": "v11.41.3",
"source": {
"type": "git",
"url": "https://github.com/illuminate/macroable.git",
@ -606,16 +606,16 @@
},
{
"name": "illuminate/support",
"version": "v11.39.1",
"version": "v11.41.3",
"source": {
"type": "git",
"url": "https://github.com/illuminate/support.git",
"reference": "5681fe5290479727e26ff255af4cde7157ee69c3"
"reference": "5dc4a31f34d8a0529cf1fd6b7fe167f6cae91e0c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/support/zipball/5681fe5290479727e26ff255af4cde7157ee69c3",
"reference": "5681fe5290479727e26ff255af4cde7157ee69c3",
"url": "https://api.github.com/repos/illuminate/support/zipball/5dc4a31f34d8a0529cf1fd6b7fe167f6cae91e0c",
"reference": "5dc4a31f34d8a0529cf1fd6b7fe167f6cae91e0c",
"shasum": ""
},
"require": {
@ -627,7 +627,7 @@
"illuminate/conditionable": "^11.0",
"illuminate/contracts": "^11.0",
"illuminate/macroable": "^11.0",
"nesbot/carbon": "^2.72.2|^3.4",
"nesbot/carbon": "^2.72.6|^3.8.4",
"php": "^8.2",
"voku/portable-ascii": "^2.0.2"
},
@ -679,29 +679,29 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2025-01-22T16:57:33+00:00"
"time": "2025-01-30T09:11:36+00:00"
},
{
"name": "laravel/serializable-closure",
"version": "v2.0.1",
"version": "v2.0.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
"reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8"
"reference": "2e1a362527783bcab6c316aad51bf36c5513ae44"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/613b2d4998f85564d40497e05e89cb6d9bd1cbe8",
"reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/2e1a362527783bcab6c316aad51bf36c5513ae44",
"reference": "2e1a362527783bcab6c316aad51bf36c5513ae44",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
"illuminate/support": "^10.0|^11.0",
"illuminate/support": "^10.0|^11.0|^12.0",
"nesbot/carbon": "^2.67|^3.0",
"pestphp/pest": "^2.36",
"pestphp/pest": "^2.36|^3.0",
"phpstan/phpstan": "^2.0",
"symfony/var-dumper": "^6.2.0|^7.0.0"
},
@ -740,7 +740,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
"time": "2024-12-16T15:26:28+00:00"
"time": "2025-01-24T15:42:37+00:00"
},
{
"name": "nesbot/carbon",

View File

@ -95,7 +95,7 @@
<span v-else class="flex items-center justify-center outline-none" tabindex="-1">
<a
v-if="props.row.is_stored"
:href="'failed-deliveries/' + props.row.id + '/download'"
:href="'api/v1/failed-deliveries/' + props.row.id + '/download'"
class="mr-4 text-indigo-500 hover:text-indigo-800 font-medium"
>
Download

View File

@ -1,6 +1,6 @@
<tr>
<td>
<div style="margin:0px auto;max-width:896px;padding:10px 20px;background-color:#f5f7fa;text-align:center;line-height:1.5;font-size:12px;width:100%;border-left: 3px solid #19216c;font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';color:#323f4b;overflow-wrap:break-word;">
<div style="margin:0px auto;max-width:896px;padding:10px 20px;background-color:#f5f7fa;text-align:center;line-height:1.5;font-size:12px;width:100%;border-left: 3px solid #19216c;font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';color:#323f4b;overflow-wrap:break-word;box-sizing:border-box;">
This email was sent to <span style="font-weight:500;color:#19216c;">{{ $aliasEmail }}</span>{{ $aliasDescription ? ' (' . $aliasDescription . ')' : '' }} from <span style="font-weight:500;color:#19216c;">{{ $fromEmail }}</span>{{ $replacedSubject }}<br>Click <a href="{{ $deactivateUrl }}" style="color:#2d3a8c;text-decoration:underline;" target="_blank" rel="noreferrer noopener nofollow">here</a> to deactivate this alias
</div>
</td>