payload-notifications 0.1.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 (144) hide show
  1. package/README.md +164 -0
  2. package/dist/api.d.ts +11 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +144 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/components/NotificationBell.d.ts +4 -0
  7. package/dist/components/NotificationBell.d.ts.map +1 -0
  8. package/dist/components/NotificationBell.js +318 -0
  9. package/dist/components/NotificationBell.js.map +1 -0
  10. package/dist/components/NotificationBell.module.css +184 -0
  11. package/dist/components/NotificationItem.d.ts +11 -0
  12. package/dist/components/NotificationItem.d.ts.map +1 -0
  13. package/dist/components/NotificationItem.js +97 -0
  14. package/dist/components/NotificationItem.js.map +1 -0
  15. package/dist/components/NotificationItem.module.css +136 -0
  16. package/dist/components/notification-reducer.d.ts +36 -0
  17. package/dist/components/notification-reducer.d.ts.map +1 -0
  18. package/dist/components/notification-reducer.js +74 -0
  19. package/dist/components/notification-reducer.js.map +1 -0
  20. package/dist/const.d.ts +2 -0
  21. package/dist/const.d.ts.map +1 -0
  22. package/dist/const.js +3 -0
  23. package/dist/const.js.map +1 -0
  24. package/dist/context.d.ts +19 -0
  25. package/dist/context.d.ts.map +1 -0
  26. package/dist/context.js +20 -0
  27. package/dist/context.js.map +1 -0
  28. package/dist/email/default-email.d.ts +10 -0
  29. package/dist/email/default-email.d.ts.map +1 -0
  30. package/dist/email/default-email.js +34 -0
  31. package/dist/email/default-email.js.map +1 -0
  32. package/dist/email/email-token.d.ts +17 -0
  33. package/dist/email/email-token.d.ts.map +1 -0
  34. package/dist/email/email-token.js +26 -0
  35. package/dist/email/email-token.js.map +1 -0
  36. package/dist/email/index.d.ts +2 -0
  37. package/dist/email/index.d.ts.map +1 -0
  38. package/dist/email/index.js +3 -0
  39. package/dist/email/index.js.map +1 -0
  40. package/dist/email/send-email.d.ts +11 -0
  41. package/dist/email/send-email.d.ts.map +1 -0
  42. package/dist/email/send-email.js +48 -0
  43. package/dist/email/send-email.js.map +1 -0
  44. package/dist/endpoints/delete-notification.d.ts +3 -0
  45. package/dist/endpoints/delete-notification.d.ts.map +1 -0
  46. package/dist/endpoints/delete-notification.js +20 -0
  47. package/dist/endpoints/delete-notification.js.map +1 -0
  48. package/dist/endpoints/email-unsubscribe.d.ts +2 -0
  49. package/dist/endpoints/email-unsubscribe.d.ts.map +1 -0
  50. package/dist/endpoints/email-unsubscribe.js +39 -0
  51. package/dist/endpoints/email-unsubscribe.js.map +1 -0
  52. package/dist/endpoints/map-notification.d.ts +5 -0
  53. package/dist/endpoints/map-notification.d.ts.map +1 -0
  54. package/dist/endpoints/map-notification.js +19 -0
  55. package/dist/endpoints/map-notification.js.map +1 -0
  56. package/dist/endpoints/mark-all-read.d.ts +3 -0
  57. package/dist/endpoints/mark-all-read.d.ts.map +1 -0
  58. package/dist/endpoints/mark-all-read.js +36 -0
  59. package/dist/endpoints/mark-all-read.js.map +1 -0
  60. package/dist/endpoints/mark-read.d.ts +3 -0
  61. package/dist/endpoints/mark-read.d.ts.map +1 -0
  62. package/dist/endpoints/mark-read.js +23 -0
  63. package/dist/endpoints/mark-read.js.map +1 -0
  64. package/dist/endpoints/open-notification.d.ts +7 -0
  65. package/dist/endpoints/open-notification.d.ts.map +1 -0
  66. package/dist/endpoints/open-notification.js +65 -0
  67. package/dist/endpoints/open-notification.js.map +1 -0
  68. package/dist/endpoints/read-notifications.d.ts +3 -0
  69. package/dist/endpoints/read-notifications.d.ts.map +1 -0
  70. package/dist/endpoints/read-notifications.js +39 -0
  71. package/dist/endpoints/read-notifications.js.map +1 -0
  72. package/dist/endpoints/unread-notifications.d.ts +3 -0
  73. package/dist/endpoints/unread-notifications.d.ts.map +1 -0
  74. package/dist/endpoints/unread-notifications.js +69 -0
  75. package/dist/endpoints/unread-notifications.js.map +1 -0
  76. package/dist/endpoints/unsubscribe.d.ts +2 -0
  77. package/dist/endpoints/unsubscribe.d.ts.map +1 -0
  78. package/dist/endpoints/unsubscribe.js +17 -0
  79. package/dist/endpoints/unsubscribe.js.map +1 -0
  80. package/dist/endpoints/update-preferences.d.ts +2 -0
  81. package/dist/endpoints/update-preferences.d.ts.map +1 -0
  82. package/dist/endpoints/update-preferences.js +33 -0
  83. package/dist/endpoints/update-preferences.js.map +1 -0
  84. package/dist/entities.d.ts +7 -0
  85. package/dist/entities.d.ts.map +1 -0
  86. package/dist/entities.js +161 -0
  87. package/dist/entities.js.map +1 -0
  88. package/dist/exports/client.d.ts +2 -0
  89. package/dist/exports/client.d.ts.map +1 -0
  90. package/dist/exports/client.js +4 -0
  91. package/dist/exports/client.js.map +1 -0
  92. package/dist/exports/rsc.d.ts +2 -0
  93. package/dist/exports/rsc.d.ts.map +1 -0
  94. package/dist/exports/rsc.js +3 -0
  95. package/dist/exports/rsc.js.map +1 -0
  96. package/dist/helpers.d.ts +14 -0
  97. package/dist/helpers.d.ts.map +1 -0
  98. package/dist/helpers.js +50 -0
  99. package/dist/helpers.js.map +1 -0
  100. package/dist/index.d.ts +19 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +75 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/internals/index.d.ts +30 -0
  105. package/dist/internals/index.d.ts.map +1 -0
  106. package/dist/internals/index.js +81 -0
  107. package/dist/internals/index.js.map +1 -0
  108. package/dist/internals/procedure.d.ts +34 -0
  109. package/dist/internals/procedure.d.ts.map +1 -0
  110. package/dist/internals/procedure.js +111 -0
  111. package/dist/internals/procedure.js.map +1 -0
  112. package/dist/internals/urls.d.ts +11 -0
  113. package/dist/internals/urls.d.ts.map +1 -0
  114. package/dist/internals/urls.js +23 -0
  115. package/dist/internals/urls.js.map +1 -0
  116. package/dist/internals/utils.d.ts +8 -0
  117. package/dist/internals/utils.d.ts.map +1 -0
  118. package/dist/internals/utils.js +57 -0
  119. package/dist/internals/utils.js.map +1 -0
  120. package/dist/message/builder.d.ts +23 -0
  121. package/dist/message/builder.d.ts.map +1 -0
  122. package/dist/message/builder.js +43 -0
  123. package/dist/message/builder.js.map +1 -0
  124. package/dist/message/index.d.ts +3 -0
  125. package/dist/message/index.d.ts.map +1 -0
  126. package/dist/message/index.js +4 -0
  127. package/dist/message/index.js.map +1 -0
  128. package/dist/message/resolve-message.d.ts +23 -0
  129. package/dist/message/resolve-message.d.ts.map +1 -0
  130. package/dist/message/resolve-message.js +72 -0
  131. package/dist/message/resolve-message.js.map +1 -0
  132. package/dist/payload-types.d.ts +317 -0
  133. package/dist/payload-types.d.ts.map +1 -0
  134. package/dist/payload-types.js +15 -0
  135. package/dist/payload-types.js.map +1 -0
  136. package/dist/procedures.d.ts +58 -0
  137. package/dist/procedures.d.ts.map +1 -0
  138. package/dist/procedures.js +62 -0
  139. package/dist/procedures.js.map +1 -0
  140. package/dist/types.d.ts +123 -0
  141. package/dist/types.d.ts.map +1 -0
  142. package/dist/types.js +35 -0
  143. package/dist/types.js.map +1 -0
  144. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import {\n type DocumentID,\n type DocumentReference,\n documentIdSchema,\n documentReferenceSchema,\n} from '@repo/common';\nimport type { PayloadRequest } from 'payload';\nimport { z } from 'zod';\nimport type { NotificationsPluginConfig } from '.';\nimport type { User } from './payload-types';\n\nexport type ResolvedPluginOptions<\n K extends keyof NotificationsPluginConfig = keyof NotificationsPluginConfig,\n> = Pick<Required<NotificationsPluginConfig>, K>;\n\nexport interface ResolvedUser extends User {\n displayName: string;\n}\n\n// ── Notification types ─────────────────────────────────────────────────\n\nexport interface NotificationEmailConfig {\n generateSubject: (args: {\n notification: MinimalNotification;\n recipient: ResolvedUser;\n links: NotificationEmailLinks;\n }) => string | Promise<string>;\n generateHTML: (args: {\n notification: MinimalNotification;\n recipient: ResolvedUser;\n links: NotificationEmailLinks;\n }) => string | Promise<string>;\n}\n\nexport type NotificationCallback = (args: {\n req: PayloadRequest;\n notification: MinimalNotification;\n recipient: ResolvedUser;\n}) => void | Promise<void>;\n\nexport interface NotifyInput<Actor extends DocumentID | null> {\n recipient: DocumentID;\n event: string;\n actor: Actor;\n message: string | MessageFn<Actor> | LiveMessage;\n url?: string;\n meta?: Record<string, unknown>;\n documentReference?: DocumentReference;\n}\n\nexport interface MinimalNotification {\n message: string;\n event: string;\n}\n\nexport interface NotificationData {\n id: string | number;\n event: string;\n /** Pre-resolved message string for display. */\n message: string;\n readAt?: string | null;\n documentReference: StoredDocumentReference;\n createdAt: string;\n}\n\nexport interface NotificationEmailLinks {\n /** Marks notification as read and redirects to its target. Requires login. */\n openURL: string;\n /** Unsubscribes the user from this notification source. No login required. */\n unsubscribeURL: string | undefined;\n}\n\n// ── Message schemas & types ────────────────────────────────────────────\n\nconst staticMessageSchema = z.object({\n type: z.literal('static'),\n value: z.string(),\n});\n\nconst liveMessageTokenSchema = z.object({\n type: z.enum(['actor', 'document', 'meta']),\n field: z.string(),\n});\n\nconst liveMessageSchema = z.object({\n type: z.literal('live'),\n parts: z.array(z.union([z.string(), liveMessageTokenSchema])),\n});\n\nexport const messageSchema = z.discriminatedUnion('type', [\n staticMessageSchema,\n liveMessageSchema,\n]);\n\nexport type LiveMessageToken = z.infer<typeof liveMessageTokenSchema>;\n\nexport type LiveMessage = Readonly<z.infer<typeof liveMessageSchema>>;\n\n/** Resolved actor data available inside a {@link MessageFn}. */\nexport interface ResolvedActor {\n id: string | number;\n displayName: string;\n}\n\n/** Context passed to a `MessageFn` when resolving the notification message. */\nexport interface MessageContext<Actor extends DocumentID | null> {\n actor: Actor extends DocumentID ? ResolvedActor : null;\n document?: Record<string, unknown>;\n meta?: Record<string, unknown>;\n}\n\n/** A function that receives context and returns a resolved message string. */\nexport type MessageFn<Actor extends DocumentID | null> = (\n ctx: MessageContext<Actor>,\n) => string;\n\n// ── Endpoint schemas ───────────────────────────────────────────────────\n\nexport const markReadSchema = z.object({\n id: documentIdSchema,\n});\n\n/** The flat shape stored in the Subscriptions group field. */\nexport interface StoredDocumentReference {\n entity: 'collection' | 'global';\n slug: string;\n documentId?: string;\n}\n\nexport const subscriptionSchema = z.object({\n documentReference: documentReferenceSchema,\n});\n"],"names":["documentIdSchema","documentReferenceSchema","z","staticMessageSchema","object","type","literal","value","string","liveMessageTokenSchema","enum","field","liveMessageSchema","parts","array","union","messageSchema","discriminatedUnion","markReadSchema","id","subscriptionSchema","documentReference"],"mappings":"AAAA,SAGEA,gBAAgB,EAChBC,uBAAuB,QAClB,eAAe;AAEtB,SAASC,CAAC,QAAQ,MAAM;AAiExB,0EAA0E;AAE1E,MAAMC,sBAAsBD,EAAEE,MAAM,CAAC;IACnCC,MAAMH,EAAEI,OAAO,CAAC;IAChBC,OAAOL,EAAEM,MAAM;AACjB;AAEA,MAAMC,yBAAyBP,EAAEE,MAAM,CAAC;IACtCC,MAAMH,EAAEQ,IAAI,CAAC;QAAC;QAAS;QAAY;KAAO;IAC1CC,OAAOT,EAAEM,MAAM;AACjB;AAEA,MAAMI,oBAAoBV,EAAEE,MAAM,CAAC;IACjCC,MAAMH,EAAEI,OAAO,CAAC;IAChBO,OAAOX,EAAEY,KAAK,CAACZ,EAAEa,KAAK,CAAC;QAACb,EAAEM,MAAM;QAAIC;KAAuB;AAC7D;AAEA,OAAO,MAAMO,gBAAgBd,EAAEe,kBAAkB,CAAC,QAAQ;IACxDd;IACAS;CACD,EAAE;AAwBH,0EAA0E;AAE1E,OAAO,MAAMM,iBAAiBhB,EAAEE,MAAM,CAAC;IACrCe,IAAInB;AACN,GAAG;AASH,OAAO,MAAMoB,qBAAqBlB,EAAEE,MAAM,CAAC;IACzCiB,mBAAmBpB;AACrB,GAAG"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "payload-notifications",
3
+ "version": "0.1.0",
4
+ "description": "Generic notification infrastructure for Payload CMS with email, in-app, and external callback channels.",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "import": "./dist/index.js",
10
+ "default": "./dist/index.js"
11
+ },
12
+ "./client": {
13
+ "types": "./dist/exports/client.d.ts",
14
+ "import": "./dist/exports/client.js",
15
+ "default": "./dist/exports/client.js"
16
+ },
17
+ "./rsc": {
18
+ "types": "./dist/exports/rsc.d.ts",
19
+ "import": "./dist/exports/rsc.js",
20
+ "default": "./dist/exports/rsc.js"
21
+ }
22
+ },
23
+ "main": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "scripts": {
29
+ "prebuild": "rm -f src/internals 2>/dev/null; pnpm check:types",
30
+ "build": "plugin-build",
31
+ "check:types": "tsc --noEmit",
32
+ "clean": "rm -rf dist && rm -rf node_modules",
33
+ "dev": "plugin-build --watch",
34
+ "generate:types": "generate-types",
35
+ "lint": "biome check .",
36
+ "lint:fix": "biome check --write .",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest"
39
+ },
40
+ "dependencies": {
41
+ "@base-ui/react": "^1.1.0",
42
+ "@repo/common": "workspace:*",
43
+ "@tabler/icons-react": "^3.36.1",
44
+ "zod": "catalog:"
45
+ },
46
+ "devDependencies": {
47
+ "@payloadcms/ui": "catalog:payload-stack",
48
+ "@repo/common": "workspace:*",
49
+ "@types/json-schema": "^7.0.15",
50
+ "@types/node": "^22.5.4",
51
+ "@types/react": "catalog:payload-stack",
52
+ "@types/react-dom": "catalog:payload-stack",
53
+ "next": "catalog:payload-stack",
54
+ "payload": "catalog:payload-stack",
55
+ "react": "catalog:payload-stack",
56
+ "react-dom": "catalog:payload-stack",
57
+ "typescript": "catalog:payload-stack",
58
+ "vite": "catalog:vite",
59
+ "vite-tsconfig-paths": "^5.1.4",
60
+ "vitest": "^3.1.2"
61
+ },
62
+ "peerDependencies": {
63
+ "@payloadcms/next": ">=3.72.0",
64
+ "@payloadcms/ui": ">=3.72.0",
65
+ "next": ">=15.2.3",
66
+ "payload": ">=3.72.0"
67
+ },
68
+ "engines": {
69
+ "node": "^18.20.2 || >=20.9.0",
70
+ "pnpm": "^9 || ^10"
71
+ }
72
+ }