@stacksjs/email 0.72.103 → 0.73.1
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/idempotency.js +1 -1
- package/package.json +6 -6
package/dist/idempotency.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{db}from"@stacksjs/database";let warnedAboutMissingEmailIdempotencyTable=!1;function warnOnceAboutMissingTable(){if(warnedAboutMissingEmailIdempotencyTable)return;warnedAboutMissingEmailIdempotencyTable=!0;console.warn("[email/idempotency] email_idempotency table missing - idempotency keys are accepted but NOT enforced. Run migrations to enable dedup.")}function isMissingTableError(err){const msg=(err?.message??"").toLowerCase();return msg.includes("no such table")||msg.includes("doesn't exist")||msg.includes("connection closed")||msg.includes("unable to open database")||msg.includes("econnrefused")||msg.includes("connection terminated")||msg.includes("no database")||msg.includes("database connection")}export async function findEmailByIdempotencyKey(key){try{const row=await db.selectFrom("email_idempotency").where("idempotency_key","=",key).selectAll().executeTakeFirst();if(!row)return null;return{success:Boolean(row.success),message:`Idempotent replay - original send recorded ${row.created_at}`,provider:String(row.provider??"cache"),messageId:row.message_id
|
|
1
|
+
import{db}from"@stacksjs/database";let warnedAboutMissingEmailIdempotencyTable=!1;function warnOnceAboutMissingTable(){if(warnedAboutMissingEmailIdempotencyTable)return;warnedAboutMissingEmailIdempotencyTable=!0;console.warn("[email/idempotency] email_idempotency table missing - idempotency keys are accepted but NOT enforced. Run migrations to enable dedup.")}function isMissingTableError(err){const msg=(err?.message??"").toLowerCase();return msg.includes("no such table")||msg.includes("doesn't exist")||msg.includes("connection closed")||msg.includes("unable to open database")||msg.includes("econnrefused")||msg.includes("connection terminated")||msg.includes("no database")||msg.includes("database connection")}export async function findEmailByIdempotencyKey(key){try{const row=await db.selectFrom("email_idempotency").where("idempotency_key","=",key).selectAll().executeTakeFirst();if(!row)return null;return{success:Boolean(row.success),message:`Idempotent replay - original send recorded ${row.created_at}`,provider:String(row.provider??"cache"),messageId:row.message_id==null?void 0:String(row.message_id)}}catch(err){if(isMissingTableError(err)){warnOnceAboutMissingTable();return null}throw err}}export async function recordEmailIdempotency(key,message,result){if(!result.success)return;const recipient=Array.isArray(message.to)?message.to.map((t)=>typeof t==="string"?t:t.address).join(", "):typeof message.to==="string"?message.to:message.to.address;try{await db.insertInto("email_idempotency").values({idempotency_key:key,message_id:result.messageId??null,recipient,subject:message.subject,provider:result.provider,success:1,created_at:new Date().toISOString().slice(0,19).replace("T"," ")}).execute()}catch(err){if(isMissingTableError(err)){warnOnceAboutMissingTable();return}const msg=err?.message??"";if(msg.includes("UNIQUE constraint")||msg.includes("Duplicate entry"))return;throw err}}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/email",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.73.1",
|
|
6
6
|
"description": "The Stacks Email integration. Painlessly create & manage your inboxes, templates, and send emails.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -61,14 +61,14 @@
|
|
|
61
61
|
"prepublishOnly": "bun run build"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@stacksjs/ts-cloud": "^0.12.
|
|
64
|
+
"@stacksjs/ts-cloud": "^0.12.10",
|
|
65
65
|
"postal-mime": "^2.7.6"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@stacksjs/cli": "0.
|
|
69
|
-
"@stacksjs/config": "0.
|
|
68
|
+
"@stacksjs/cli": "0.73.1",
|
|
69
|
+
"@stacksjs/config": "0.73.1",
|
|
70
70
|
"better-dx": "^0.2.24",
|
|
71
|
-
"@stacksjs/error-handling": "0.
|
|
72
|
-
"@stacksjs/types": "0.
|
|
71
|
+
"@stacksjs/error-handling": "0.73.1",
|
|
72
|
+
"@stacksjs/types": "0.73.1"
|
|
73
73
|
}
|
|
74
74
|
}
|