@growth-labs/push 0.4.3 → 0.4.7

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
@@ -13,7 +13,6 @@ import push from '@growth-labs/push'
13
13
 
14
14
  push({
15
15
  vapidPublicKey: 'BDd8...', // URL-safe base64
16
- vapidPrivateKey: '...', // JWK JSON string (via Cloudflare Secrets)
17
16
  vapidSubject: 'mailto:admin@fedweek.com',
18
17
  d1Binding: 'SITE_DB',
19
18
  queueBinding: 'PUSH_QUEUE',
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,cAAc,CAAA;AAYlE,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CA0DnE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,cAAc,CAAA;AAYlE,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CA4DnE"}
package/dist/index.js CHANGED
@@ -11,7 +11,9 @@ export default function push(options) {
11
11
  const resolved = pushOptionsSchema.parse(options);
12
12
  const virtualConfig = {
13
13
  vapidPublicKey: resolved.vapidPublicKey,
14
+ siteId: resolved.siteId,
14
15
  d1Binding: resolved.d1Binding,
16
+ subscriptionsD1Binding: resolved.subscriptionsD1Binding,
15
17
  queueBinding: resolved.queueBinding,
16
18
  defaults: resolved.defaults,
17
19
  queue: resolved.queue,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAoB,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAElE,SAAS,kBAAkB;IAC1B,OAAO,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,oBAAoB,GAAG,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAEjE,SAAS,iBAAiB,CAAC,IAAY;IACtC,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,oBAAoB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACjF,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAoB;IAChD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEjD,MAAM,aAAa,GAAG;QACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;KACzB,CAAA;IAED,MAAM,eAAe,GAAG,iCAAiC,CAAA;IACzD,MAAM,uBAAuB,GAAG,KAAK,eAAe,EAAE,CAAA;IAEtD,OAAO;QACN,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE;YACN,oBAAoB,EAAE,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE;gBACtE,YAAY,CAAC;oBACZ,IAAI,EAAE;wBACL,OAAO,EAAE;4BACR;gCACC,IAAI,EAAE,yBAAyB;gCAC/B,SAAS,CAAC,EAAE;oCACX,IAAI,EAAE,KAAK,eAAe;wCAAE,OAAO,uBAAuB,CAAA;gCAC3D,CAAC;gCACD,IAAI,CAAC,EAAE;oCACN,IAAI,EAAE,KAAK,uBAAuB,EAAE,CAAC;wCACpC,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAA;oCACzD,CAAC;gCACF,CAAC;6BACD;yBACD;qBACD;iBACD,CAAC,CAAA;gBAEF,aAAa,CAAC;oBACb,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,CAAC;oBAClD,KAAK,EAAE,KAAK;iBACZ,CAAC,CAAA;gBAEF,WAAW,CAAC;oBACX,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;oBAClC,UAAU,EAAE,iBAAiB,CAAC,oBAAoB,CAAC;oBACnD,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAA;gBAEF,WAAW,CAAC;oBACX,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW;oBACpC,UAAU,EAAE,iBAAiB,CAAC,sBAAsB,CAAC;oBACrD,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAA;YACH,CAAC;SACD;KACD,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAoB,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAElE,SAAS,kBAAkB;IAC1B,OAAO,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,oBAAoB,GAAG,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAEjE,SAAS,iBAAiB,CAAC,IAAY;IACtC,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,oBAAoB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACjF,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAoB;IAChD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEjD,MAAM,aAAa,GAAG;QACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB;QACvD,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;KACzB,CAAA;IAED,MAAM,eAAe,GAAG,iCAAiC,CAAA;IACzD,MAAM,uBAAuB,GAAG,KAAK,eAAe,EAAE,CAAA;IAEtD,OAAO;QACN,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE;YACN,oBAAoB,EAAE,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE;gBACtE,YAAY,CAAC;oBACZ,IAAI,EAAE;wBACL,OAAO,EAAE;4BACR;gCACC,IAAI,EAAE,yBAAyB;gCAC/B,SAAS,CAAC,EAAE;oCACX,IAAI,EAAE,KAAK,eAAe;wCAAE,OAAO,uBAAuB,CAAA;gCAC3D,CAAC;gCACD,IAAI,CAAC,EAAE;oCACN,IAAI,EAAE,KAAK,uBAAuB,EAAE,CAAC;wCACpC,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAA;oCACzD,CAAC;gCACF,CAAC;6BACD;yBACD;qBACD;iBACD,CAAC,CAAA;gBAEF,aAAa,CAAC;oBACb,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,CAAC;oBAClD,KAAK,EAAE,KAAK;iBACZ,CAAC,CAAA;gBAEF,WAAW,CAAC;oBACX,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;oBAClC,UAAU,EAAE,iBAAiB,CAAC,oBAAoB,CAAC;oBACnD,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAA;gBAEF,WAAW,CAAC;oBACX,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW;oBACpC,UAAU,EAAE,iBAAiB,CAAC,sBAAsB,CAAC;oBACrD,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAA;YACH,CAAC;SACD;KACD,CAAA;AACF,CAAC"}
package/dist/options.d.ts CHANGED
@@ -1,114 +1,37 @@
1
1
  import { z } from 'zod';
2
2
  export declare const pushOptionsSchema: z.ZodObject<{
3
3
  vapidPublicKey: z.ZodString;
4
- vapidPrivateKey: z.ZodString;
4
+ vapidPrivateKey: z.ZodOptional<z.ZodString>;
5
5
  vapidSubject: z.ZodString;
6
6
  siteId: z.ZodString;
7
7
  d1Binding: z.ZodDefault<z.ZodString>;
8
8
  subscriptionsD1Binding: z.ZodOptional<z.ZodString>;
9
9
  queueBinding: z.ZodDefault<z.ZodString>;
10
- defaults: z.ZodDefault<z.ZodObject<{
10
+ defaults: z.ZodPrefault<z.ZodObject<{
11
11
  icon: z.ZodOptional<z.ZodString>;
12
12
  ttl: z.ZodDefault<z.ZodNumber>;
13
- urgency: z.ZodDefault<z.ZodEnum<["very-low", "low", "normal", "high"]>>;
14
- }, "strip", z.ZodTypeAny, {
15
- ttl: number;
16
- urgency: "very-low" | "low" | "normal" | "high";
17
- icon?: string | undefined;
18
- }, {
19
- icon?: string | undefined;
20
- ttl?: number | undefined;
21
- urgency?: "very-low" | "low" | "normal" | "high" | undefined;
22
- }>>;
23
- queue: z.ZodDefault<z.ZodObject<{
13
+ urgency: z.ZodDefault<z.ZodEnum<{
14
+ "very-low": "very-low";
15
+ low: "low";
16
+ normal: "normal";
17
+ high: "high";
18
+ }>>;
19
+ }, z.core.$strip>>;
20
+ queue: z.ZodPrefault<z.ZodObject<{
24
21
  batchSize: z.ZodDefault<z.ZodNumber>;
25
22
  maxRetries: z.ZodDefault<z.ZodNumber>;
26
- }, "strip", z.ZodTypeAny, {
27
- batchSize: number;
28
- maxRetries: number;
29
- }, {
30
- batchSize?: number | undefined;
31
- maxRetries?: number | undefined;
32
- }>>;
23
+ }, z.core.$strip>>;
33
24
  turnstile: z.ZodObject<{
34
25
  secretKey: z.ZodString;
35
- }, "strip", z.ZodTypeAny, {
36
- secretKey: string;
37
- }, {
38
- secretKey: string;
39
- }>;
40
- routes: z.ZodDefault<z.ZodObject<{
26
+ }, z.core.$strip>;
27
+ routes: z.ZodPrefault<z.ZodObject<{
41
28
  subscribe: z.ZodDefault<z.ZodString>;
42
29
  unsubscribe: z.ZodDefault<z.ZodString>;
43
- }, "strip", z.ZodTypeAny, {
44
- subscribe: string;
45
- unsubscribe: string;
46
- }, {
47
- subscribe?: string | undefined;
48
- unsubscribe?: string | undefined;
49
- }>>;
50
- cleanup: z.ZodDefault<z.ZodObject<{
30
+ }, z.core.$strip>>;
31
+ cleanup: z.ZodPrefault<z.ZodObject<{
51
32
  staleAfterDays: z.ZodDefault<z.ZodNumber>;
52
- }, "strip", z.ZodTypeAny, {
53
- staleAfterDays: number;
54
- }, {
55
- staleAfterDays?: number | undefined;
56
- }>>;
57
- }, "strip", z.ZodTypeAny, {
58
- vapidPublicKey: string;
59
- vapidPrivateKey: string;
60
- vapidSubject: string;
61
- siteId: string;
62
- d1Binding: string;
63
- queueBinding: string;
64
- defaults: {
65
- ttl: number;
66
- urgency: "very-low" | "low" | "normal" | "high";
67
- icon?: string | undefined;
68
- };
69
- queue: {
70
- batchSize: number;
71
- maxRetries: number;
72
- };
73
- turnstile: {
74
- secretKey: string;
75
- };
76
- routes: {
77
- subscribe: string;
78
- unsubscribe: string;
79
- };
80
- cleanup: {
81
- staleAfterDays: number;
82
- };
83
- subscriptionsD1Binding?: string | undefined;
84
- }, {
85
- vapidPublicKey: string;
86
- vapidPrivateKey: string;
87
- vapidSubject: string;
88
- siteId: string;
89
- turnstile: {
90
- secretKey: string;
91
- };
92
- d1Binding?: string | undefined;
93
- subscriptionsD1Binding?: string | undefined;
94
- queueBinding?: string | undefined;
95
- defaults?: {
96
- icon?: string | undefined;
97
- ttl?: number | undefined;
98
- urgency?: "very-low" | "low" | "normal" | "high" | undefined;
99
- } | undefined;
100
- queue?: {
101
- batchSize?: number | undefined;
102
- maxRetries?: number | undefined;
103
- } | undefined;
104
- routes?: {
105
- subscribe?: string | undefined;
106
- unsubscribe?: string | undefined;
107
- } | undefined;
108
- cleanup?: {
109
- staleAfterDays?: number | undefined;
110
- } | undefined;
111
- }>;
33
+ }, z.core.$strip>>;
34
+ }, z.core.$strip>;
112
35
  export type PushOptions = z.input<typeof pushOptionsSchema>;
113
36
  export type ResolvedPushOptions = z.output<typeof pushOptionsSchema>;
114
37
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8C5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2D5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
package/dist/options.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  export const pushOptionsSchema = z.object({
3
3
  vapidPublicKey: z.string().min(1),
4
- vapidPrivateKey: z.string().min(1),
4
+ // Legacy callers may supply this, but the integration never consumes it.
5
+ // Signing credentials belong to the runtime consumer, not the build.
6
+ vapidPrivateKey: z.string().min(1).optional(),
5
7
  vapidSubject: z.string().min(1),
6
8
  siteId: z.string().min(1),
7
9
  d1Binding: z.string().default('SITE_DB'),
@@ -11,19 +13,30 @@ export const pushOptionsSchema = z.object({
11
13
  // consumer's status writeback and the site's subscribe/produce share one DB.
12
14
  subscriptionsD1Binding: z.string().optional(),
13
15
  queueBinding: z.string().default('PUSH_QUEUE'),
16
+ // NOTE: nested defaulted objects use `.prefault({})`, not `.default({})`.
17
+ // Under zod v3 (and the `.default()` docs' intuitive reading), defaulting
18
+ // an object schema to `{}` still ran that `{}` through the object schema,
19
+ // so its own field-level `.default(...)` values were filled in. zod v4
20
+ // changed `.default()` to substitute the default value verbatim without
21
+ // re-parsing it, which silently dropped every nested default (e.g.
22
+ // `routes.subscribe` resolved to `undefined` instead of
23
+ // `/api/push/subscribe` — caught by the packages#196 zod-bump test
24
+ // suite). `.prefault()` is zod v4's opt-in for the old "apply default,
25
+ // then still parse/default the result" behavior. See
26
+ // https://zod.dev/v4/changelog (defaults section).
14
27
  defaults: z
15
28
  .object({
16
29
  icon: z.string().optional(),
17
30
  ttl: z.number().int().positive().default(86400),
18
31
  urgency: z.enum(['very-low', 'low', 'normal', 'high']).default('normal'),
19
32
  })
20
- .default({}),
33
+ .prefault({}),
21
34
  queue: z
22
35
  .object({
23
36
  batchSize: z.number().int().positive().default(100),
24
37
  maxRetries: z.number().int().nonnegative().default(3),
25
38
  })
26
- .default({}),
39
+ .prefault({}),
27
40
  turnstile: z.object({
28
41
  secretKey: z.string().min(1),
29
42
  }),
@@ -32,11 +45,11 @@ export const pushOptionsSchema = z.object({
32
45
  subscribe: z.string().default('/api/push/subscribe'),
33
46
  unsubscribe: z.string().default('/api/push/unsubscribe'),
34
47
  })
35
- .default({}),
48
+ .prefault({}),
36
49
  cleanup: z
37
50
  .object({
38
51
  staleAfterDays: z.number().int().positive().default(90),
39
52
  })
40
- .default({}),
53
+ .prefault({}),
41
54
  });
42
55
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IAE9C,QAAQ,EAAE,CAAC;SACT,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;KACxE,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IAEb,KAAK,EAAE,CAAC;SACN,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;KACrD,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IAEb,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC5B,CAAC;IAEF,MAAM,EAAE,CAAC;SACP,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACpD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;KACxD,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IAEb,OAAO,EAAE,CAAC;SACR,MAAM,CAAC;QACP,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KACvD,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;CACb,CAAC,CAAA"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,yEAAyE;IACzE,qEAAqE;IACrE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IAE9C,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,mEAAmE;IACnE,wDAAwD;IACxD,mEAAmE;IACnE,uEAAuE;IACvE,qDAAqD;IACrD,mDAAmD;IACnD,QAAQ,EAAE,CAAC;SACT,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;KACxE,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IAEd,KAAK,EAAE,CAAC;SACN,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;KACrD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IAEd,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC5B,CAAC;IAEF,MAAM,EAAE,CAAC;SACP,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACpD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;KACxD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IAEd,OAAO,EAAE,CAAC;SACR,MAAM,CAAC;QACP,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KACvD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;CACd,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/push",
3
- "version": "0.4.3",
3
+ "version": "0.4.7",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {
@@ -64,16 +64,16 @@
64
64
  "registry": "https://registry.npmjs.org/"
65
65
  },
66
66
  "peerDependencies": {
67
- "astro": "^6.1.10"
67
+ "astro": "^6.1.10 || ^7.0.0"
68
68
  },
69
69
  "dependencies": {
70
70
  "@block65/webcrypto-web-push": "^1.0.0",
71
71
  "drizzle-orm": "^0.45.2",
72
- "zod": "^3.23.0"
72
+ "zod": "^4"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@cloudflare/workers-types": "^4.0.0",
76
- "astro": "^6.1.10",
76
+ "astro": "7.3.1",
77
77
  "typescript": "^5.7.0",
78
78
  "vitest": "^4.1.8"
79
79
  },
package/src/index.ts CHANGED
@@ -17,7 +17,9 @@ export default function push(options: PushOptions): AstroIntegration {
17
17
 
18
18
  const virtualConfig = {
19
19
  vapidPublicKey: resolved.vapidPublicKey,
20
+ siteId: resolved.siteId,
20
21
  d1Binding: resolved.d1Binding,
22
+ subscriptionsD1Binding: resolved.subscriptionsD1Binding,
21
23
  queueBinding: resolved.queueBinding,
22
24
  defaults: resolved.defaults,
23
25
  queue: resolved.queue,
package/src/options.ts CHANGED
@@ -2,7 +2,9 @@ import { z } from 'zod'
2
2
 
3
3
  export const pushOptionsSchema = z.object({
4
4
  vapidPublicKey: z.string().min(1),
5
- vapidPrivateKey: z.string().min(1),
5
+ // Legacy callers may supply this, but the integration never consumes it.
6
+ // Signing credentials belong to the runtime consumer, not the build.
7
+ vapidPrivateKey: z.string().min(1).optional(),
6
8
  vapidSubject: z.string().min(1),
7
9
 
8
10
  siteId: z.string().min(1),
@@ -15,20 +17,31 @@ export const pushOptionsSchema = z.object({
15
17
  subscriptionsD1Binding: z.string().optional(),
16
18
  queueBinding: z.string().default('PUSH_QUEUE'),
17
19
 
20
+ // NOTE: nested defaulted objects use `.prefault({})`, not `.default({})`.
21
+ // Under zod v3 (and the `.default()` docs' intuitive reading), defaulting
22
+ // an object schema to `{}` still ran that `{}` through the object schema,
23
+ // so its own field-level `.default(...)` values were filled in. zod v4
24
+ // changed `.default()` to substitute the default value verbatim without
25
+ // re-parsing it, which silently dropped every nested default (e.g.
26
+ // `routes.subscribe` resolved to `undefined` instead of
27
+ // `/api/push/subscribe` — caught by the packages#196 zod-bump test
28
+ // suite). `.prefault()` is zod v4's opt-in for the old "apply default,
29
+ // then still parse/default the result" behavior. See
30
+ // https://zod.dev/v4/changelog (defaults section).
18
31
  defaults: z
19
32
  .object({
20
33
  icon: z.string().optional(),
21
34
  ttl: z.number().int().positive().default(86400),
22
35
  urgency: z.enum(['very-low', 'low', 'normal', 'high']).default('normal'),
23
36
  })
24
- .default({}),
37
+ .prefault({}),
25
38
 
26
39
  queue: z
27
40
  .object({
28
41
  batchSize: z.number().int().positive().default(100),
29
42
  maxRetries: z.number().int().nonnegative().default(3),
30
43
  })
31
- .default({}),
44
+ .prefault({}),
32
45
 
33
46
  turnstile: z.object({
34
47
  secretKey: z.string().min(1),
@@ -39,13 +52,13 @@ export const pushOptionsSchema = z.object({
39
52
  subscribe: z.string().default('/api/push/subscribe'),
40
53
  unsubscribe: z.string().default('/api/push/unsubscribe'),
41
54
  })
42
- .default({}),
55
+ .prefault({}),
43
56
 
44
57
  cleanup: z
45
58
  .object({
46
59
  staleAfterDays: z.number().int().positive().default(90),
47
60
  })
48
- .default({}),
61
+ .prefault({}),
49
62
  })
50
63
 
51
64
  export type PushOptions = z.input<typeof pushOptionsSchema>