@suphark/notify 0.10.1 → 0.11.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.
package/README.md CHANGED
@@ -169,6 +169,27 @@ const { url, code } = await createLink(user); // รับ use
169
169
  const { linked, label, manageUrl } = await getChannelStatus(user, "telegram");
170
170
  ```
171
171
 
172
+ ### ผูก Telegram/LINE จากหน้าตั้งค่าของแอป: `createChatLinkHandlers` (0.11.0)
173
+
174
+ คู่กับ `<ChatLinkRow />` ของ `@suphark/ui/pwa` (แบบเดียวกับ `createPushHandlers` + `WebPushRow`) — แอปเขียนแค่ server actions บาง ๆ:
175
+
176
+ ```ts
177
+ "use server";
178
+ import { createChatLinkHandlers } from "@suphark/notify";
179
+
180
+ const chat = createChatLinkHandlers({ getUser: async () => (await auth())?.user }); // { email, id? } จาก session ฝั่ง server
181
+ export async function chatStatus(c: "telegram" | "line") { return chat.getStatus(c); } // { linked, paused?, label, linkedAt, manageUrl }
182
+ export async function chatCreateLink(c: "telegram" | "line") { return chat.createLink(c); } // { url, code, expiresAt, botName?, command }
183
+ export async function chatUnlink(c: "telegram" | "line") { return chat.unlink(c); } // { paused }
184
+ ```
185
+
186
+ - `unlink` = **พักไว้** ไม่ลบ — การผูกใช้ร่วมทุกแอป จึงหยุดรับจากทุกแอป ผู้ใช้กดผูกใหม่ (หรือเปิดที่หน้า ช่องทางของฉัน) เพื่อรับคืน
187
+ - อีเมลมาจาก `getUser` ฝั่ง server เสมอ ไม่รับจาก client · ไม่ล็อกอิน = `MailError` auth
188
+
189
+ ### ลิงก์ relative ใน notify (0.11.0)
190
+
191
+ `notify({ …, link: "/memo/12" })` — SDK เติมโดเมนจาก `APP_URL` / `NEXT_PUBLIC_APP_URL` (หรือ `opts.appUrl`) ให้ก่อนส่ง เพราะลิงก์ถูกเปิดจาก Telegram/LINE/อีเมล ไม่มีโดเมน = `MailError` invalid
192
+
172
193
  ### LINE (0.7.0)
173
194
 
174
195
  ใช้เหมือน Telegram ทุกอย่าง — ผู้รับผูก LINE ของตัวเองครั้งเดียว (ที่ `/me` ของ hub หรือปุ่มในแอป) แล้วส่งด้วยอีเมล:
@@ -503,6 +524,8 @@ Pi Notify มี contract test (`apps/notify/src/test/contract/`) เก็บ b
503
524
 
504
525
  ## Changelog
505
526
 
527
+ - 0.11.0 — `createChatLinkHandlers` (getStatus / createLink / unlink=พักไว้) คู่ `ChatLinkRow` · `pauseChannel()` · `createLink()` คืน `botName` · `ChannelStatus.paused` · ลิงก์ relative ใน notify/notifyTopic เติมโดเมนจาก `APP_URL`/`NEXT_PUBLIC_APP_URL` (`absoluteLink`) — ต้องใช้ Pi Notify 2026-11-12+
528
+ - 0.10.2 — ข้อความสำรองของเทมเพลตไม่ส่งเมื่อ hub ตอบไม่ทันเวลา (ไม่รู้ผล — กันอีเมลล็อกอินซ้ำ) · `RequestStatus.status` เพิ่ม `"skipped"` (ไม่มีรายการไหนถูกส่ง) · text part ของเทมเพลต HTML เต็มฉบับไม่มี CSS/title ปน (`htmlToText`)
506
529
  - 0.10.1 — ข้อความสำรองของเทมเพลต `auth.*` ใช้ชื่อผู้ส่ง (`from` / `MAIL_FROM`) เป็นชื่อแอปในหัวเรื่องเมื่อแอปไม่ได้ส่ง `appName` (เดิมหัวเรื่องไม่มีชื่อแอป)
507
530
  - 0.10.0 — **อีเมลล็อกอินมาตรฐาน + ข้อความสำรอง** (เพิ่มอย่างเดียว; ต้องใช้ Pi Notify 2026-11-11+)
508
531
  - เทมเพลตมาตรฐาน `auth.magic-link` / `auth.reset-password` / `auth.verify-email` ใช้ได้ทุกแอปโดยไม่ต้องสร้าง (สร้างชื่อเดียวกันเพื่อปรับ)