@@ -93,10 +93,14 @@ export default class PushPublish extends AblyBaseCommand {
9393 recipient = { clientId : flags [ "client-id" ] } ;
9494 } else {
9595 try {
96- recipient = JSON . parse ( flags . recipient ! ) as Record < string , unknown > ;
96+ const parsed = JSON . parse ( flags . recipient ! ) ;
97+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
98+ throw new Error ( "not an object" ) ;
99+ }
100+ recipient = parsed as Record < string , unknown > ;
97101 } catch {
98102 this . fail (
99- "--recipient must be valid JSON" ,
103+ "--recipient must be a valid JSON object " ,
100104 flags as BaseFlags ,
101105 "pushPublish" ,
102106 ) ;
@@ -107,10 +111,14 @@ export default class PushPublish extends AblyBaseCommand {
107111 let payload : Record < string , unknown > ;
108112 if ( flags . payload ) {
109113 try {
110- payload = JSON . parse ( flags . payload ) as Record < string , unknown > ;
114+ const parsed = JSON . parse ( flags . payload ) ;
115+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
116+ throw new Error ( "not an object" ) ;
117+ }
118+ payload = parsed as Record < string , unknown > ;
111119 } catch {
112120 this . fail (
113- "--payload must be valid JSON" ,
121+ "--payload must be a valid JSON object " ,
114122 flags as BaseFlags ,
115123 "pushPublish" ,
116124 ) ;
@@ -133,46 +141,79 @@ export default class PushPublish extends AblyBaseCommand {
133141
134142 if ( flags . data ) {
135143 try {
136- payload . data = JSON . parse ( flags . data ) ;
144+ const parsed = JSON . parse ( flags . data ) ;
145+ if (
146+ ! parsed ||
147+ typeof parsed !== "object" ||
148+ Array . isArray ( parsed )
149+ ) {
150+ throw new Error ( "not an object" ) ;
151+ }
152+ payload . data = parsed ;
137153 } catch {
138154 this . fail (
139- "--data must be valid JSON" ,
155+ "--data must be a valid JSON object " ,
140156 flags as BaseFlags ,
141157 "pushPublish" ,
142158 ) ;
143159 }
144160 }
145161 }
146162
163+ // Validate that at least some payload content exists
164+ if (
165+ ! payload ! . notification &&
166+ ! payload ! . data &&
167+ Object . keys ( payload ! ) . length === 0
168+ ) {
169+ this . fail (
170+ "No push payload provided. Use --payload, --title/--body, or --data to specify notification content" ,
171+ flags as BaseFlags ,
172+ "pushPublish" ,
173+ ) ;
174+ }
175+
147176 // Add platform-specific overrides
148177 if ( flags . apns ) {
149178 try {
150- payload . apns = JSON . parse ( flags . apns ) ;
179+ const parsed = JSON . parse ( flags . apns ) ;
180+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
181+ throw new Error ( "not an object" ) ;
182+ }
183+ payload . apns = parsed ;
151184 } catch {
152185 this . fail (
153- "--apns must be valid JSON" ,
186+ "--apns must be a valid JSON object " ,
154187 flags as BaseFlags ,
155188 "pushPublish" ,
156189 ) ;
157190 }
158191 }
159192 if ( flags . fcm ) {
160193 try {
161- payload . fcm = JSON . parse ( flags . fcm ) ;
194+ const parsed = JSON . parse ( flags . fcm ) ;
195+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
196+ throw new Error ( "not an object" ) ;
197+ }
198+ payload . fcm = parsed ;
162199 } catch {
163200 this . fail (
164- "--fcm must be valid JSON" ,
201+ "--fcm must be a valid JSON object " ,
165202 flags as BaseFlags ,
166203 "pushPublish" ,
167204 ) ;
168205 }
169206 }
170207 if ( flags . web ) {
171208 try {
172- payload . web = JSON . parse ( flags . web ) ;
209+ const parsed = JSON . parse ( flags . web ) ;
210+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
211+ throw new Error ( "not an object" ) ;
212+ }
213+ payload . web = parsed ;
173214 } catch {
174215 this . fail (
175- "--web must be valid JSON" ,
216+ "--web must be a valid JSON object " ,
176217 flags as BaseFlags ,
177218 "pushPublish" ,
178219 ) ;
0 commit comments