@growth-labs/push 0.1.3 → 0.4.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 +6 -2
- package/dist/routes/subscribe.d.ts.map +1 -1
- package/dist/routes/subscribe.js +5 -4
- package/dist/routes/subscribe.js.map +1 -1
- package/dist/routes/unsubscribe.d.ts.map +1 -1
- package/dist/routes/unsubscribe.js +3 -3
- package/dist/routes/unsubscribe.js.map +1 -1
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/analytics.d.ts +3 -2
- package/dist/utils/analytics.d.ts.map +1 -1
- package/dist/utils/analytics.js +3 -2
- package/dist/utils/analytics.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/queue.d.ts +18 -2
- package/dist/utils/queue.d.ts.map +1 -1
- package/dist/utils/queue.js +43 -9
- package/dist/utils/queue.js.map +1 -1
- package/dist/utils/scheduled.d.ts +1 -0
- package/dist/utils/scheduled.d.ts.map +1 -1
- package/dist/utils/scheduled.js +1 -1
- package/dist/utils/scheduled.js.map +1 -1
- package/dist/utils/subscriptions.js +1 -1
- package/dist/utils/subscriptions.js.map +1 -1
- package/package.json +82 -76
- package/src/client/push-sw.d.ts.map +0 -1
- package/src/client/push-sw.js +0 -25
- package/src/client/push-sw.js.map +0 -1
package/README.md
CHANGED
|
@@ -46,7 +46,11 @@ import { sendPushNotification, enqueuePushBatchAll } from '@growth-labs/push/uti
|
|
|
46
46
|
await sendPushNotification(subscription, { title: 'Breaking', body: '...' }, sendContext)
|
|
47
47
|
|
|
48
48
|
// Batch send to all subscribers (via Queue)
|
|
49
|
-
await enqueuePushBatchAll(env.SITE_DB, payload, {
|
|
49
|
+
await enqueuePushBatchAll(env.SITE_DB, payload, {
|
|
50
|
+
queue: env.PUSH_QUEUE,
|
|
51
|
+
siteId: 'fronts', // required since 0.4.0
|
|
52
|
+
batchSize: 100,
|
|
53
|
+
})
|
|
50
54
|
```
|
|
51
55
|
|
|
52
56
|
## Queue Consumer
|
|
@@ -54,7 +58,7 @@ await enqueuePushBatchAll(env.SITE_DB, payload, { queue: env.PUSH_QUEUE, batchSi
|
|
|
54
58
|
Package provides handler, consumer wires it up:
|
|
55
59
|
|
|
56
60
|
```typescript
|
|
57
|
-
import { handlePushQueue } from '@growth-labs/push/
|
|
61
|
+
import { handlePushQueue } from '@growth-labs/push/consumer'
|
|
58
62
|
|
|
59
63
|
export default {
|
|
60
64
|
async queue(batch, env) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../src/routes/subscribe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../src/routes/subscribe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAKrC,eAAO,MAAM,IAAI,EAAE,QA0ElB,CAAA"}
|
package/dist/routes/subscribe.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { env } from 'cloudflare:workers';
|
|
1
2
|
import config from 'virtual:growth-labs/push/config';
|
|
2
3
|
import { trackPushSubscription } from '../utils/analytics.js';
|
|
3
4
|
import { findSubscriptionByEndpoint, saveSubscription } from '../utils/subscriptions.js';
|
|
4
5
|
import { verifyTurnstile } from '../utils/turnstile.js';
|
|
5
|
-
export const POST = async ({ request
|
|
6
|
+
export const POST = async ({ request }) => {
|
|
6
7
|
const body = (await request.json());
|
|
7
8
|
const turnstileToken = body.turnstileToken;
|
|
8
9
|
if (!turnstileToken) {
|
|
@@ -11,8 +12,8 @@ export const POST = async ({ request, locals }) => {
|
|
|
11
12
|
headers: { 'Content-Type': 'application/json' },
|
|
12
13
|
});
|
|
13
14
|
}
|
|
14
|
-
const
|
|
15
|
-
const turnstileSecret =
|
|
15
|
+
const envMap = env;
|
|
16
|
+
const turnstileSecret = envMap[config.turnstile.secretKey] ?? envMap.TURNSTILE_SECRET;
|
|
16
17
|
const turnstileValid = await verifyTurnstile(turnstileToken, turnstileSecret, request.headers.get('CF-Connecting-IP'));
|
|
17
18
|
if (!turnstileValid) {
|
|
18
19
|
return new Response(JSON.stringify({ error: 'Bot detected' }), {
|
|
@@ -29,7 +30,7 @@ export const POST = async ({ request, locals }) => {
|
|
|
29
30
|
headers: { 'Content-Type': 'application/json' },
|
|
30
31
|
});
|
|
31
32
|
}
|
|
32
|
-
const db =
|
|
33
|
+
const db = envMap[config.d1Binding];
|
|
33
34
|
const existing = await findSubscriptionByEndpoint(db, endpoint);
|
|
34
35
|
if (existing) {
|
|
35
36
|
await saveSubscription(db, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/routes/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iCAAiC,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,MAAM,IAAI,GAAa,KAAK,EAAE,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/routes/subscribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsubscribe.d.ts","sourceRoot":"","sources":["../../src/routes/unsubscribe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unsubscribe.d.ts","sourceRoot":"","sources":["../../src/routes/unsubscribe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAIrC,eAAO,MAAM,IAAI,EAAE,QAsBlB,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { env } from 'cloudflare:workers';
|
|
1
2
|
import config from 'virtual:growth-labs/push/config';
|
|
2
3
|
import { trackPushSubscription } from '../utils/analytics.js';
|
|
3
4
|
import { deleteSubscriptionByEndpoint } from '../utils/subscriptions.js';
|
|
4
|
-
export const POST = async ({ request
|
|
5
|
+
export const POST = async ({ request }) => {
|
|
5
6
|
const body = (await request.json());
|
|
6
7
|
const endpoint = body.endpoint;
|
|
7
8
|
if (!endpoint) {
|
|
@@ -10,8 +11,7 @@ export const POST = async ({ request, locals }) => {
|
|
|
10
11
|
headers: { 'Content-Type': 'application/json' },
|
|
11
12
|
});
|
|
12
13
|
}
|
|
13
|
-
const
|
|
14
|
-
const db = runtime.env[config.d1Binding];
|
|
14
|
+
const db = env[config.d1Binding];
|
|
15
15
|
const deleted = await deleteSubscriptionByEndpoint(db, endpoint);
|
|
16
16
|
if (deleted) {
|
|
17
17
|
trackPushSubscription('unsubscribed').catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsubscribe.js","sourceRoot":"","sources":["../../src/routes/unsubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iCAAiC,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAExE,MAAM,CAAC,MAAM,IAAI,GAAa,KAAK,EAAE,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"unsubscribe.js","sourceRoot":"","sources":["../../src/routes/unsubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,MAAM,MAAM,iCAAiC,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAExE,MAAM,CAAC,MAAM,IAAI,GAAa,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAA;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAA;IAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE;YAClE,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAC/C,CAAC,CAAA;IACH,CAAC;IAED,MAAM,EAAE,GAAI,GAA+B,CAAC,MAAM,CAAC,SAAS,CAAe,CAAA;IAC3E,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAEhE,IAAI,OAAO,EAAE,CAAC;QACb,qBAAqB,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;QAC1D,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAC/C,CAAC,CAAA;AACH,CAAC,CAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -35,12 +35,40 @@ export interface PushSubscriptionRecord {
|
|
|
35
35
|
* VAPID credentials are NOT included. The Queue consumer Worker reads them
|
|
36
36
|
* from its own env bindings (Cloudflare Secrets). This keeps the private key
|
|
37
37
|
* in exactly one place and avoids serializing it into every Queue message.
|
|
38
|
+
*
|
|
39
|
+
* `siteId` identifies which site enqueued the message. The realm consumer
|
|
40
|
+
* uses it with `siteConfigLookup` to apply per-site overrides (icon URL,
|
|
41
|
+
* VAPID identity, etc.). Sites in single-tenant mode can pass any string.
|
|
38
42
|
*/
|
|
39
43
|
export interface PushQueueMessage {
|
|
44
|
+
siteId: string;
|
|
40
45
|
subscriptions: PushSubscriptionRecord[];
|
|
41
46
|
payload: PushPayload;
|
|
42
47
|
options: PushSendOptions;
|
|
43
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Per-site config override applied at consumer time. Returned from
|
|
51
|
+
* SitePushConfigLookup. All fields are optional — only the ones present
|
|
52
|
+
* will override the consumer context for that message.
|
|
53
|
+
*/
|
|
54
|
+
export interface SitePushConfig {
|
|
55
|
+
defaults?: {
|
|
56
|
+
icon?: string;
|
|
57
|
+
ttl?: number;
|
|
58
|
+
urgency?: 'very-low' | 'low' | 'normal' | 'high';
|
|
59
|
+
};
|
|
60
|
+
vapid?: {
|
|
61
|
+
subject?: string;
|
|
62
|
+
publicKey?: string;
|
|
63
|
+
privateKey?: string;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Per-message lookup. The realm consumer calls it with the message's
|
|
68
|
+
* `siteId`. Returns the per-site config to apply, or `null` to skip the
|
|
69
|
+
* override and use the consumer's context as-is.
|
|
70
|
+
*/
|
|
71
|
+
export type SitePushConfigLookup = (siteId: string, env: Record<string, unknown>) => Promise<SitePushConfig | null>;
|
|
44
72
|
/** Result of a single push send attempt */
|
|
45
73
|
export interface PushSendResult {
|
|
46
74
|
subscriptionId: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;KACX,CAAA;IACD,GAAG,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CAChD;AAED,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,9 @@ export declare function trackPushCleanup(removed: number): Promise<void>;
|
|
|
30
30
|
* Emit a client-side analytics event using the gl:* CustomEvent pattern.
|
|
31
31
|
* This is meant to be called from browser-side code (service worker or page).
|
|
32
32
|
*
|
|
33
|
-
* Packages emit CustomEvent on document with gl: prefix.
|
|
34
|
-
*
|
|
33
|
+
* Packages emit CustomEvent on document with gl: prefix. These are local
|
|
34
|
+
* browser signals; consumers call window.glAnalytics.track(...) when an event
|
|
35
|
+
* should be persisted to WAE.
|
|
35
36
|
*
|
|
36
37
|
* Usage in service worker notificationclick handler:
|
|
37
38
|
* ```javascript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAK/D;;;;;;GAMG;AACH,wBAAsB,cAAc,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAShG;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,YAAY,GAAG,cAAc,EACrC,QAAQ,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxE,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAK/D;;;;;;GAMG;AACH,wBAAsB,cAAc,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAShG;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,YAAY,GAAG,cAAc,EACrC,QAAQ,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxE,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,IAAI,CASN"}
|
package/dist/utils/analytics.js
CHANGED
|
@@ -53,8 +53,9 @@ export async function trackPushCleanup(removed) {
|
|
|
53
53
|
* Emit a client-side analytics event using the gl:* CustomEvent pattern.
|
|
54
54
|
* This is meant to be called from browser-side code (service worker or page).
|
|
55
55
|
*
|
|
56
|
-
* Packages emit CustomEvent on document with gl: prefix.
|
|
57
|
-
*
|
|
56
|
+
* Packages emit CustomEvent on document with gl: prefix. These are local
|
|
57
|
+
* browser signals; consumers call window.glAnalytics.track(...) when an event
|
|
58
|
+
* should be persisted to WAE.
|
|
58
59
|
*
|
|
59
60
|
* Usage in service worker notificationclick handler:
|
|
60
61
|
* ```javascript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,MAAM,gBAAgB,GAAG,wBAAwB,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,SAAiB,EACjB,IAA6B;IAE7B,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAA4B,CAAA;QAChG,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACnE,MACC,SAAS,CAAC,gBACV,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACnB,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,uDAAuD;IACxD,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAoB,EAAE,MAAuB;IAChF,MAAM,cAAc,CAAC,wBAAwB,EAAE;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;KACvB,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,MAAqC,EACrC,WAAwE,EAAE;IAE1E,MAAM,cAAc,CAAC,QAAQ,MAAM,EAAE,EAAE;QACtC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC7B,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe;IACrD,MAAM,cAAc,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AAClD,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,MAAM,gBAAgB,GAAG,wBAAwB,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,SAAiB,EACjB,IAA6B;IAE7B,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAA4B,CAAA;QAChG,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACnE,MACC,SAAS,CAAC,gBACV,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACnB,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,uDAAuD;IACxD,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAoB,EAAE,MAAuB;IAChF,MAAM,cAAc,CAAC,wBAAwB,EAAE;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;KACvB,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,MAAqC,EACrC,WAAwE,EAAE;IAE1E,MAAM,cAAc,CAAC,QAAQ,MAAM,EAAE,EAAE;QACtC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC7B,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe;IACrD,MAAM,cAAc,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CACrC,SAAiB,EACjB,SAAkC,EAAE;IAEpC,yEAAyE;IACzE,MAAM,GAAG,GACR,OAAO,UAAU,KAAK,WAAW;QAChC,CAAC,CAAE,UAAiF,CAAC,QAAQ;QAC7F,CAAC,CAAC,SAAS,CAAA;IACb,IAAI,GAAG,EAAE,CAAC;QACT,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAClE,CAAC;AACF,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { emitPushAnalyticsEvent, trackPushCleanup, trackPushEvent, trackPushSend, trackPushSubscription, } from './analytics.js';
|
|
2
2
|
export { cleanupStaleSubscriptions } from './cleanup.js';
|
|
3
3
|
export { composePushPayload, type PushTemplate, type TemplateVariables, templates, } from './composer.js';
|
|
4
|
-
export { enqueuePushBatch, enqueuePushBatchAll
|
|
4
|
+
export { enqueuePushBatch, enqueuePushBatchAll } from './queue.js';
|
|
5
5
|
export { handleScheduledPush, type ScheduledContentProvider, type ScheduledPushContext, type ScheduledPushResult, } from './scheduled.js';
|
|
6
6
|
export { type SendContext, sendPushBatch, sendPushNotification, } from './send.js';
|
|
7
7
|
export { countSubscriptions, deleteSubscriptionByEndpoint, deleteSubscriptionById, findSubscriptionByEndpoint, getAllSubscriptions, incrementFailureCount, markDelivered, saveSubscription, } from './subscriptions.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,qBAAqB,GACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EACN,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,SAAS,GACT,MAAM,eAAe,CAAA;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,qBAAqB,GACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EACN,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,SAAS,GACT,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,EACN,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACN,KAAK,WAAW,EAChB,aAAa,EACb,oBAAoB,GACpB,MAAM,WAAW,CAAA;AAClB,OAAO,EACN,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,GAChB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { emitPushAnalyticsEvent, trackPushCleanup, trackPushEvent, trackPushSend, trackPushSubscription, } from './analytics.js';
|
|
2
2
|
export { cleanupStaleSubscriptions } from './cleanup.js';
|
|
3
3
|
export { composePushPayload, templates, } from './composer.js';
|
|
4
|
-
export { enqueuePushBatch, enqueuePushBatchAll
|
|
4
|
+
export { enqueuePushBatch, enqueuePushBatchAll } from './queue.js';
|
|
5
5
|
export { handleScheduledPush, } from './scheduled.js';
|
|
6
6
|
export { sendPushBatch, sendPushNotification, } from './send.js';
|
|
7
7
|
export { countSubscriptions, deleteSubscriptionByEndpoint, deleteSubscriptionById, findSubscriptionByEndpoint, getAllSubscriptions, incrementFailureCount, markDelivered, saveSubscription, } from './subscriptions.js';
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,qBAAqB,GACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EACN,kBAAkB,EAGlB,SAAS,GACT,MAAM,eAAe,CAAA;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,qBAAqB,GACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EACN,kBAAkB,EAGlB,SAAS,GACT,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,EACN,mBAAmB,GAInB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAEN,aAAa,EACb,oBAAoB,GACpB,MAAM,WAAW,CAAA;AAClB,OAAO,EACN,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,GAChB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/utils/queue.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import type { PushPayload, PushQueueMessage, PushSendOptions, PushSubscriptionRecord } from '../types.js';
|
|
1
|
+
import type { PushPayload, PushQueueMessage, PushSendOptions, PushSubscriptionRecord, SitePushConfigLookup } from '../types.js';
|
|
2
2
|
interface EnqueueContext {
|
|
3
3
|
queue: Queue;
|
|
4
|
+
siteId: string;
|
|
4
5
|
batchSize?: number;
|
|
5
6
|
}
|
|
6
7
|
/**
|
|
7
8
|
* Split a known set of subscriptions into batches and enqueue each batch.
|
|
9
|
+
* Each emitted message carries the caller's `siteId` so the realm consumer
|
|
10
|
+
* can apply per-site overrides via `siteConfigLookup`.
|
|
8
11
|
*/
|
|
9
12
|
export declare function enqueuePushBatch(subscriptions: PushSubscriptionRecord[], payload: PushPayload, context: EnqueueContext, options?: PushSendOptions): Promise<{
|
|
10
13
|
batches: number;
|
|
@@ -30,10 +33,23 @@ interface QueueConsumerContext {
|
|
|
30
33
|
ttl: number;
|
|
31
34
|
urgency: 'very-low' | 'low' | 'normal' | 'high';
|
|
32
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* Optional realm-level multi-tenant lookup. When provided, the consumer
|
|
38
|
+
* calls it per message using `message.body.siteId` and merges the result
|
|
39
|
+
* over the base context for that batch.
|
|
40
|
+
*/
|
|
41
|
+
siteConfigLookup?: SitePushConfigLookup;
|
|
42
|
+
/**
|
|
43
|
+
* Worker env, forwarded to `siteConfigLookup` so the lookup can read
|
|
44
|
+
* KV / D1 / etc. Required when `siteConfigLookup` is set.
|
|
45
|
+
*/
|
|
46
|
+
env?: Record<string, unknown>;
|
|
33
47
|
}
|
|
34
48
|
/**
|
|
35
49
|
* Queue consumer handler. Process a batch of push notification sends.
|
|
36
|
-
* VAPID credentials come from
|
|
50
|
+
* VAPID credentials come from context — they are NOT in the Queue message.
|
|
51
|
+
* When `context.siteConfigLookup` is configured, per-message overrides are
|
|
52
|
+
* applied for VAPID identity and notification defaults.
|
|
37
53
|
*/
|
|
38
54
|
export declare function handlePushQueue(batch: MessageBatch<PushQueueMessage>, context: QueueConsumerContext): Promise<void>;
|
|
39
55
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/utils/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,sBAAsB,
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/utils/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EAEtB,oBAAoB,EACpB,MAAM,aAAa,CAAA;AASpB,UAAU,cAAc;IACvB,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACrC,aAAa,EAAE,sBAAsB,EAAE,EACvC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB1D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB1D;AAED,UAAU,oBAAoB;IAC7B,EAAE,EAAE,UAAU,CAAA;IACd,KAAK,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,QAAQ,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;QACX,OAAO,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;KAC/C,CAAA;IACD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAA;IACvC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B;AAqBD;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,EACrC,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
package/dist/utils/queue.js
CHANGED
|
@@ -2,13 +2,20 @@ import { sendPushBatch } from './send.js';
|
|
|
2
2
|
import { deleteSubscriptionById, getAllSubscriptions, incrementFailureCount, markDelivered, } from './subscriptions.js';
|
|
3
3
|
/**
|
|
4
4
|
* Split a known set of subscriptions into batches and enqueue each batch.
|
|
5
|
+
* Each emitted message carries the caller's `siteId` so the realm consumer
|
|
6
|
+
* can apply per-site overrides via `siteConfigLookup`.
|
|
5
7
|
*/
|
|
6
8
|
export async function enqueuePushBatch(subscriptions, payload, context, options = {}) {
|
|
7
9
|
const batchSize = context.batchSize ?? 100;
|
|
8
10
|
let batches = 0;
|
|
9
11
|
for (let i = 0; i < subscriptions.length; i += batchSize) {
|
|
10
12
|
const batch = subscriptions.slice(i, i + batchSize);
|
|
11
|
-
const message = {
|
|
13
|
+
const message = {
|
|
14
|
+
siteId: context.siteId,
|
|
15
|
+
subscriptions: batch,
|
|
16
|
+
payload,
|
|
17
|
+
options,
|
|
18
|
+
};
|
|
12
19
|
await context.queue.send(message);
|
|
13
20
|
batches++;
|
|
14
21
|
}
|
|
@@ -30,7 +37,12 @@ export async function enqueuePushBatchAll(db, payload, context, options = {}) {
|
|
|
30
37
|
const subs = await getAllSubscriptions(db, { limit: batchSize, offset });
|
|
31
38
|
if (subs.length === 0)
|
|
32
39
|
break;
|
|
33
|
-
const message = {
|
|
40
|
+
const message = {
|
|
41
|
+
siteId: context.siteId,
|
|
42
|
+
subscriptions: subs,
|
|
43
|
+
payload,
|
|
44
|
+
options,
|
|
45
|
+
};
|
|
34
46
|
await context.queue.send(message);
|
|
35
47
|
batches++;
|
|
36
48
|
total += subs.length;
|
|
@@ -38,18 +50,40 @@ export async function enqueuePushBatchAll(db, payload, context, options = {}) {
|
|
|
38
50
|
}
|
|
39
51
|
return { batches, totalSubscriptions: total };
|
|
40
52
|
}
|
|
53
|
+
function applyOverride(context, override) {
|
|
54
|
+
if (!override)
|
|
55
|
+
return { vapid: context.vapid, defaults: context.defaults };
|
|
56
|
+
return {
|
|
57
|
+
vapid: {
|
|
58
|
+
subject: override.vapid?.subject ?? context.vapid.subject,
|
|
59
|
+
publicKey: override.vapid?.publicKey ?? context.vapid.publicKey,
|
|
60
|
+
privateKey: override.vapid?.privateKey ?? context.vapid.privateKey,
|
|
61
|
+
},
|
|
62
|
+
defaults: {
|
|
63
|
+
icon: override.defaults?.icon ?? context.defaults.icon,
|
|
64
|
+
ttl: override.defaults?.ttl ?? context.defaults.ttl,
|
|
65
|
+
urgency: override.defaults?.urgency ?? context.defaults.urgency,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
41
69
|
/**
|
|
42
70
|
* Queue consumer handler. Process a batch of push notification sends.
|
|
43
|
-
* VAPID credentials come from
|
|
71
|
+
* VAPID credentials come from context — they are NOT in the Queue message.
|
|
72
|
+
* When `context.siteConfigLookup` is configured, per-message overrides are
|
|
73
|
+
* applied for VAPID identity and notification defaults.
|
|
44
74
|
*/
|
|
45
75
|
export async function handlePushQueue(batch, context) {
|
|
46
|
-
const sendContext = {
|
|
47
|
-
vapidSubject: context.vapid.subject,
|
|
48
|
-
vapidPublicKey: context.vapid.publicKey,
|
|
49
|
-
vapidPrivateKey: context.vapid.privateKey,
|
|
50
|
-
defaults: context.defaults,
|
|
51
|
-
};
|
|
52
76
|
for (const message of batch.messages) {
|
|
77
|
+
const override = context.siteConfigLookup
|
|
78
|
+
? await context.siteConfigLookup(message.body.siteId, context.env ?? {})
|
|
79
|
+
: null;
|
|
80
|
+
const effective = applyOverride(context, override);
|
|
81
|
+
const sendContext = {
|
|
82
|
+
vapidSubject: effective.vapid.subject,
|
|
83
|
+
vapidPublicKey: effective.vapid.publicKey,
|
|
84
|
+
vapidPrivateKey: effective.vapid.privateKey,
|
|
85
|
+
defaults: effective.defaults,
|
|
86
|
+
};
|
|
53
87
|
const { subscriptions, payload, options } = message.body;
|
|
54
88
|
const result = await sendPushBatch(subscriptions, payload, sendContext, options);
|
|
55
89
|
for (const sendResult of result.results) {
|
package/dist/utils/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/utils/queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/utils/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled.d.ts","sourceRoot":"","sources":["../../src/utils/scheduled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAK/D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,UAAU,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE;QACR,cAAc,EAAE,MAAM,CAAA;KACtB,CAAA;CACD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,YAAY,EAAE;QACb,OAAO,EAAE,MAAM,CAAA;QACf,kBAAkB,EAAE,MAAM,CAAA;KAC1B,GAAG,IAAI,CAAA;IACR,OAAO,EAAE;QACR,OAAO,EAAE,MAAM,CAAA;KACf,CAAA;CACD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE;IAChD,EAAE,EAAE,UAAU,CAAA;CACd,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,oBAAoB,EAC7B,eAAe,EAAE,wBAAwB,GACvC,OAAO,CAAC,mBAAmB,CAAC,CAwC9B"}
|
|
1
|
+
{"version":3,"file":"scheduled.d.ts","sourceRoot":"","sources":["../../src/utils/scheduled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAK/D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,UAAU,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE;QACR,cAAc,EAAE,MAAM,CAAA;KACtB,CAAA;CACD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,YAAY,EAAE;QACb,OAAO,EAAE,MAAM,CAAA;QACf,kBAAkB,EAAE,MAAM,CAAA;KAC1B,GAAG,IAAI,CAAA;IACR,OAAO,EAAE;QACR,OAAO,EAAE,MAAM,CAAA;KACf,CAAA;CACD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE;IAChD,EAAE,EAAE,UAAU,CAAA;CACd,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,oBAAoB,EAC7B,eAAe,EAAE,wBAAwB,GACvC,OAAO,CAAC,mBAAmB,CAAC,CAwC9B"}
|
package/dist/utils/scheduled.js
CHANGED
|
@@ -48,7 +48,7 @@ export async function handleScheduledPush(context, contentProvider) {
|
|
|
48
48
|
const content = await contentProvider({ db: context.db });
|
|
49
49
|
// Step 2: Enqueue notifications if content is available
|
|
50
50
|
if (content) {
|
|
51
|
-
const enqueueResult = await enqueuePushBatchAll(context.db, content.payload, { queue: context.queue, batchSize: context.batchSize }, content.options ?? {});
|
|
51
|
+
const enqueueResult = await enqueuePushBatchAll(context.db, content.payload, { queue: context.queue, siteId: context.siteId, batchSize: context.batchSize }, content.options ?? {});
|
|
52
52
|
notification = {
|
|
53
53
|
batches: enqueueResult.batches,
|
|
54
54
|
totalSubscriptions: enqueueResult.totalSubscriptions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled.js","sourceRoot":"","sources":["../../src/utils/scheduled.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"scheduled.js","sourceRoot":"","sources":["../../src/utils/scheduled.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAgEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,OAA6B,EAC7B,eAAyC;IAEzC,IAAI,YAAY,GAAwC,IAAI,CAAA;IAE5D,2CAA2C;IAC3C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;IAEzD,wDAAwD;IACxD,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAC9C,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,OAAO,EACf,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAC9E,OAAO,CAAC,OAAO,IAAI,EAAE,CACrB,CAAA;QAED,YAAY,GAAG;YACd,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,kBAAkB,EAAE,aAAa,CAAC,kBAAkB;SACpD,CAAA;QAED,0EAA0E;QAC1E,MAAM,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE;YACpC,IAAI,EAAE,aAAa,CAAC,kBAAkB;YACtC,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,EAAE;SACX,CAAC,CAAA;IACH,CAAC;IAED,8CAA8C;IAC9C,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,EAAE,EAAE;QACjE,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc;KAC9C,CAAC,CAAA;IAEF,OAAO;QACN,YAAY;QACZ,OAAO,EAAE;YACR,OAAO,EAAE,aAAa,CAAC,OAAO;SAC9B;KACD,CAAA;AACF,CAAC"}
|
|
@@ -71,7 +71,7 @@ function mapRow(row) {
|
|
|
71
71
|
return {
|
|
72
72
|
id: row.id,
|
|
73
73
|
endpoint: row.endpoint,
|
|
74
|
-
keyP256dh: row.key_p256dh,
|
|
74
|
+
keyP256dh: row.key_p256dh, // gitleaks:allow - Web Push field name, not literal secret material.
|
|
75
75
|
keyAuth: row.key_auth,
|
|
76
76
|
topics: row.topics,
|
|
77
77
|
createdAt: row.created_at,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/utils/subscriptions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/utils/subscriptions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,77 +1,83 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
2
|
+
"name": "@growth-labs/push",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"./components": {
|
|
12
|
+
"types": "./src/components/index.ts",
|
|
13
|
+
"import": "./src/components/index.ts"
|
|
14
|
+
},
|
|
15
|
+
"./components/*": {
|
|
16
|
+
"types": "./src/components/*.astro",
|
|
17
|
+
"import": "./src/components/*.astro"
|
|
18
|
+
},
|
|
19
|
+
"./utils": {
|
|
20
|
+
"types": "./dist/utils/index.d.ts",
|
|
21
|
+
"import": "./dist/utils/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./utils/*": {
|
|
24
|
+
"types": "./dist/utils/*.d.ts",
|
|
25
|
+
"import": "./dist/utils/*.js"
|
|
26
|
+
},
|
|
27
|
+
"./client/*": {
|
|
28
|
+
"types": "./dist/client/*.d.ts",
|
|
29
|
+
"import": "./dist/client/*.js"
|
|
30
|
+
},
|
|
31
|
+
"./db": {
|
|
32
|
+
"types": "./dist/db/schema.d.ts",
|
|
33
|
+
"import": "./dist/db/schema.js"
|
|
34
|
+
},
|
|
35
|
+
"./consumer": {
|
|
36
|
+
"types": "./dist/utils/queue.d.ts",
|
|
37
|
+
"import": "./dist/utils/queue.js"
|
|
38
|
+
},
|
|
39
|
+
"./middleware": {
|
|
40
|
+
"types": "./dist/middleware/push.d.ts",
|
|
41
|
+
"import": "./dist/middleware/push.js",
|
|
42
|
+
"default": "./dist/middleware/push.js"
|
|
43
|
+
},
|
|
44
|
+
"./routes/*": {
|
|
45
|
+
"types": "./dist/routes/*.d.ts",
|
|
46
|
+
"import": "./dist/routes/*.js",
|
|
47
|
+
"default": "./dist/routes/*.js"
|
|
48
|
+
},
|
|
49
|
+
"./virtual": {
|
|
50
|
+
"types": "./src/virtual.d.ts"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"files": [
|
|
54
|
+
"dist",
|
|
55
|
+
"src/components",
|
|
56
|
+
"src/client",
|
|
57
|
+
"src/virtual.d.ts",
|
|
58
|
+
"README.md"
|
|
59
|
+
],
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public",
|
|
62
|
+
"registry": "https://registry.npmjs.org/"
|
|
63
|
+
},
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"astro": "^6.0.0"
|
|
66
|
+
},
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"@block65/webcrypto-web-push": "^1.0.0",
|
|
69
|
+
"drizzle-orm": "^0.36.0",
|
|
70
|
+
"zod": "^3.23.0"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@cloudflare/workers-types": "^4.0.0",
|
|
74
|
+
"astro": "^6.0.0",
|
|
75
|
+
"typescript": "^5.7.0",
|
|
76
|
+
"vitest": "^3.0.0"
|
|
77
|
+
},
|
|
78
|
+
"scripts": {
|
|
79
|
+
"build": "tsc",
|
|
80
|
+
"check": "biome check src/",
|
|
81
|
+
"test": "vitest run"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"push-sw.d.ts","sourceRoot":"","sources":["push-sw.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAgBjD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAUtE"}
|
package/src/client/push-sw.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/// <reference lib="webworker" />
|
|
2
|
-
export function handlePush(event) {
|
|
3
|
-
const data = event.data?.json() ?? {}
|
|
4
|
-
const options = {
|
|
5
|
-
body: data.body ?? '',
|
|
6
|
-
icon: data.icon,
|
|
7
|
-
image: data.image,
|
|
8
|
-
tag: data.tag,
|
|
9
|
-
data: {
|
|
10
|
-
url: data.url,
|
|
11
|
-
actionUrl: data.action?.url,
|
|
12
|
-
},
|
|
13
|
-
actions: data.action ? [{ action: 'primary', title: data.action.title }] : [],
|
|
14
|
-
}
|
|
15
|
-
event.waitUntil(self.registration.showNotification(data.title ?? 'Notification', options))
|
|
16
|
-
}
|
|
17
|
-
export function handleNotificationClick(event) {
|
|
18
|
-
event.notification.close()
|
|
19
|
-
const data = event.notification.data ?? {}
|
|
20
|
-
const url = event.action === 'primary' && data.actionUrl ? data.actionUrl : data.url
|
|
21
|
-
if (url) {
|
|
22
|
-
event.waitUntil(self.clients.openWindow(url))
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=push-sw.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"push-sw.js","sourceRoot":"","sources":["push-sw.ts"],"names":[],"mappings":"AAAA,iCAAiC;AAGjC,MAAM,UAAU,UAAU,CAAC,KAAgB;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAErC,MAAM,OAAO,GAAG;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;SAC3B;QACD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;KACrB,CAAA;IAEzD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,OAAO,CAAC,CAAC,CAAA;AAC3F,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAwB;IAC/D,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IAE1B,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAA;IAE1C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA;IAEpF,IAAI,GAAG,EAAE,CAAC;QACT,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9C,CAAC;AACF,CAAC"}
|