@@ -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,10 +141,18 @@ 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 ) ;
@@ -147,32 +163,44 @@ export default class PushPublish extends AblyBaseCommand {
147163 // Add platform-specific overrides
148164 if ( flags . apns ) {
149165 try {
150- payload . apns = JSON . parse ( flags . apns ) ;
166+ const parsed = JSON . parse ( flags . apns ) ;
167+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
168+ throw new Error ( "not an object" ) ;
169+ }
170+ payload . apns = parsed ;
151171 } catch {
152172 this . fail (
153- "--apns must be valid JSON" ,
173+ "--apns must be a valid JSON object " ,
154174 flags as BaseFlags ,
155175 "pushPublish" ,
156176 ) ;
157177 }
158178 }
159179 if ( flags . fcm ) {
160180 try {
161- payload . fcm = JSON . parse ( flags . fcm ) ;
181+ const parsed = JSON . parse ( flags . fcm ) ;
182+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
183+ throw new Error ( "not an object" ) ;
184+ }
185+ payload . fcm = parsed ;
162186 } catch {
163187 this . fail (
164- "--fcm must be valid JSON" ,
188+ "--fcm must be a valid JSON object " ,
165189 flags as BaseFlags ,
166190 "pushPublish" ,
167191 ) ;
168192 }
169193 }
170194 if ( flags . web ) {
171195 try {
172- payload . web = JSON . parse ( flags . web ) ;
196+ const parsed = JSON . parse ( flags . web ) ;
197+ if ( ! parsed || typeof parsed !== "object" || Array . isArray ( parsed ) ) {
198+ throw new Error ( "not an object" ) ;
199+ }
200+ payload . web = parsed ;
173201 } catch {
174202 this . fail (
175- "--web must be valid JSON" ,
203+ "--web must be a valid JSON object " ,
176204 flags as BaseFlags ,
177205 "pushPublish" ,
178206 ) ;
0 commit comments