@dev.smartpricing/message-composer-utils 4.5.1-next.1 → 4.5.1-next.2
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/dist/utils/meta-status.js +6 -0
- package/dist/utils/meta-status.js.map +1 -1
- package/dist/utils/meta-status.test.js +21 -0
- package/dist/utils/meta-status.test.js.map +1 -0
- package/dist/utils/templates/whatsapp-compiler.js +5 -2
- package/dist/utils/templates/whatsapp-compiler.js.map +1 -1
- package/dist/utils/templates/whatsapp-compiler.test.js +12 -7
- package/dist/utils/templates/whatsapp-compiler.test.js.map +1 -1
- package/package.json +1 -1
- package/src/types/meta-webhook.ts +6 -1
- package/src/utils/meta-status.test.ts +33 -0
- package/src/utils/meta-status.ts +6 -0
- package/src/utils/templates/whatsapp-compiler.test.ts +30 -10
- package/src/utils/templates/whatsapp-compiler.ts +5 -1
|
@@ -14,6 +14,12 @@ export function mapMetaStatusToInternal(metaStatus) {
|
|
|
14
14
|
return "approved";
|
|
15
15
|
case "REJECTED":
|
|
16
16
|
return "rejected";
|
|
17
|
+
// Meta stopped serving the template. There is no internal status for
|
|
18
|
+
// that, so it goes back to pending: not approved, hence not Sendable.
|
|
19
|
+
case "PAUSED":
|
|
20
|
+
case "DISABLED":
|
|
21
|
+
return "pending";
|
|
22
|
+
// Whatever else Meta reports is never taken for an approval.
|
|
17
23
|
default:
|
|
18
24
|
return "pending";
|
|
19
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-status.js","sourceRoot":"","sources":["../../src/utils/meta-status.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAA+B;IAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"meta-status.js","sourceRoot":"","sources":["../../src/utils/meta-status.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAA+B;IAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,qEAAqE;QACrE,sEAAsE;QACtE,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,OAAO,SAAS,CAAC;QACnB,6DAA6D;QAC7D;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { mapMetaStatusToInternal } from "./meta-status.js";
|
|
3
|
+
describe("mapMetaStatusToInternal", () => {
|
|
4
|
+
it.each([
|
|
5
|
+
["APPROVED", "approved"],
|
|
6
|
+
["PENDING", "pending"],
|
|
7
|
+
["REJECTED", "rejected"],
|
|
8
|
+
])("maps %s to %s", (metaStatus, internal) => {
|
|
9
|
+
expect(mapMetaStatusToInternal(metaStatus)).toBe(internal);
|
|
10
|
+
});
|
|
11
|
+
it.each(["PAUSED", "DISABLED"])("does not leave a template %s at Meta approved", (metaStatus) => {
|
|
12
|
+
expect(mapMetaStatusToInternal(metaStatus)).toBe("pending");
|
|
13
|
+
});
|
|
14
|
+
it.each(["FLAGGED", "IN_APPEAL", "PENDING_DELETION", "SOMETHING_NEW"])("does not take a status it does not know (%s) for an approval", (metaStatus) => {
|
|
15
|
+
expect(mapMetaStatusToInternal(metaStatus)).not.toBe("approved");
|
|
16
|
+
});
|
|
17
|
+
it("has no status for a response that carries none", () => {
|
|
18
|
+
expect(mapMetaStatusToInternal(undefined)).toBeNull();
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=meta-status.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-status.test.js","sourceRoot":"","sources":["../../src/utils/meta-status.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,UAAU,EAAE,UAAU,CAAC;QACxB,CAAC,SAAS,EAAE,SAAS,CAAC;QACtB,CAAC,UAAU,EAAE,UAAU,CAAC;KAChB,CAAC,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAU,CAAC,CACtC,+CAA+C,EAC/C,CAAC,UAAU,EAAE,EAAE;QACb,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC,CACF,CAAC;IAEF,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC,CACpE,8DAA8D,EAC9D,CAAC,UAAU,EAAE,EAAE;QACb,MAAM,CACJ,uBAAuB,CAAC,UAAgC,CAAC,CAC1D,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC,CACF,CAAC;IAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -83,9 +83,12 @@ function buildComponentParameters(text, parameters) {
|
|
|
83
83
|
*
|
|
84
84
|
* @param message - The WhatsApp message template to compile
|
|
85
85
|
* @param parameters - Key-value pairs for parameter injection (will be normalized to strings)
|
|
86
|
+
* @param languageCode - The code the template is registered under at Meta
|
|
87
|
+
* (`language.meta_language_code`), which is not always the composer's own
|
|
88
|
+
* language id: `zh` is `zh_CN`, `pt` is `pt_PT`, `no` is `nb`, `tl` is `fil`.
|
|
86
89
|
* @returns WhatsApp Cloud API send payload (without 'to' field)
|
|
87
90
|
*/
|
|
88
|
-
export function compileWhatsappTemplate(message, parameters) {
|
|
91
|
+
export function compileWhatsappTemplate(message, parameters, languageCode) {
|
|
89
92
|
// Normalize parameters to strings first
|
|
90
93
|
const normalizedParams = normalizeParameters(parameters);
|
|
91
94
|
const components = [];
|
|
@@ -159,7 +162,7 @@ export function compileWhatsappTemplate(message, parameters) {
|
|
|
159
162
|
template: {
|
|
160
163
|
name: templateName,
|
|
161
164
|
language: {
|
|
162
|
-
code:
|
|
165
|
+
code: languageCode,
|
|
163
166
|
},
|
|
164
167
|
components: components.length > 0 ? components : undefined,
|
|
165
168
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp-compiler.js","sourceRoot":"","sources":["../../../src/utils/templates/whatsapp-compiler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"whatsapp-compiler.js","sourceRoot":"","sources":["../../../src/utils/templates/whatsapp-compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,7 +134,7 @@ describe("validateParameters with brand_* keys", () => {
|
|
|
134
134
|
});
|
|
135
135
|
describe("compileWhatsappTemplate", () => {
|
|
136
136
|
it("builds the template envelope from the Meta metadata and language", () => {
|
|
137
|
-
const payload = compileWhatsappTemplate(whatsappMessage(), {});
|
|
137
|
+
const payload = compileWhatsappTemplate(whatsappMessage(), {}, "en");
|
|
138
138
|
expect(payload).toEqual({
|
|
139
139
|
messaging_product: "whatsapp",
|
|
140
140
|
type: "template",
|
|
@@ -145,10 +145,15 @@ describe("compileWhatsappTemplate", () => {
|
|
|
145
145
|
},
|
|
146
146
|
});
|
|
147
147
|
});
|
|
148
|
+
it("sends the Meta-registered language code when it differs from the language id", () => {
|
|
149
|
+
const message = { ...whatsappMessage(), language_id: "zh" };
|
|
150
|
+
const payload = compileWhatsappTemplate(message, {}, "zh_CN");
|
|
151
|
+
expect(payload.template.language).toEqual({ code: "zh_CN" });
|
|
152
|
+
});
|
|
148
153
|
it("throws when the Message has no Meta template name", () => {
|
|
149
154
|
const message = whatsappMessage();
|
|
150
155
|
message.metadata = {};
|
|
151
|
-
expect(() => compileWhatsappTemplate(message, {})).toThrow("Message does not have Meta template name in metadata");
|
|
156
|
+
expect(() => compileWhatsappTemplate(message, {}, "en")).toThrow("Message does not have Meta template name in metadata");
|
|
152
157
|
});
|
|
153
158
|
it("emits a HEADER component with the header text variable", () => {
|
|
154
159
|
const message = whatsappMessage({
|
|
@@ -157,7 +162,7 @@ describe("compileWhatsappTemplate", () => {
|
|
|
157
162
|
content: doc(text("Hi "), mention("guest_name")),
|
|
158
163
|
},
|
|
159
164
|
});
|
|
160
|
-
const payload = compileWhatsappTemplate(message, { guest_name: "Mario" });
|
|
165
|
+
const payload = compileWhatsappTemplate(message, { guest_name: "Mario" }, "en");
|
|
161
166
|
expect(payload.template.components).toEqual([
|
|
162
167
|
{
|
|
163
168
|
type: "HEADER",
|
|
@@ -177,7 +182,7 @@ describe("compileWhatsappTemplate", () => {
|
|
|
177
182
|
const payload = compileWhatsappTemplate(message, {
|
|
178
183
|
guest_name: "Mario",
|
|
179
184
|
nights: 3,
|
|
180
|
-
});
|
|
185
|
+
}, "en");
|
|
181
186
|
expect(payload.template.components).toEqual([
|
|
182
187
|
{
|
|
183
188
|
type: "BODY",
|
|
@@ -197,7 +202,7 @@ describe("compileWhatsappTemplate", () => {
|
|
|
197
202
|
smartchatMediaId: "media-42",
|
|
198
203
|
},
|
|
199
204
|
});
|
|
200
|
-
const payload = compileWhatsappTemplate(message, {});
|
|
205
|
+
const payload = compileWhatsappTemplate(message, {}, "en");
|
|
201
206
|
expect(payload.template.components).toEqual([
|
|
202
207
|
{
|
|
203
208
|
type: "HEADER",
|
|
@@ -209,7 +214,7 @@ describe("compileWhatsappTemplate", () => {
|
|
|
209
214
|
const message = whatsappMessage({
|
|
210
215
|
header: { type: "image", url: "https://cdn.example.com/hero.png" },
|
|
211
216
|
});
|
|
212
|
-
const payload = compileWhatsappTemplate(message, {});
|
|
217
|
+
const payload = compileWhatsappTemplate(message, {}, "en");
|
|
213
218
|
expect(payload.template.components).toBeUndefined();
|
|
214
219
|
});
|
|
215
220
|
it("emits a URL BUTTON component named by button position, as submitted to Meta", () => {
|
|
@@ -227,7 +232,7 @@ describe("compileWhatsappTemplate", () => {
|
|
|
227
232
|
],
|
|
228
233
|
},
|
|
229
234
|
});
|
|
230
|
-
const payload = compileWhatsappTemplate(message, { booking_id: "abc" });
|
|
235
|
+
const payload = compileWhatsappTemplate(message, { booking_id: "abc" }, "en");
|
|
231
236
|
expect(payload.template.components).toEqual([
|
|
232
237
|
{
|
|
233
238
|
type: "BUTTON",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp-compiler.test.js","sourceRoot":"","sources":["../../../src/utils/templates/whatsapp-compiler.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"whatsapp-compiler.test.js","sourceRoot":"","sources":["../../../src/utils/templates/whatsapp-compiler.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -21,7 +21,12 @@ export interface MetaTemplateCategoryUpdate {
|
|
|
21
21
|
new_category: "MARKETING" | "UTILITY";
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export type MetaTemplateStatus =
|
|
24
|
+
export type MetaTemplateStatus =
|
|
25
|
+
| "APPROVED"
|
|
26
|
+
| "REJECTED"
|
|
27
|
+
| "PENDING"
|
|
28
|
+
| "PAUSED"
|
|
29
|
+
| "DISABLED";
|
|
25
30
|
export type InternalTemplateStatus = "approved" | "rejected" | "pending";
|
|
26
31
|
export interface MetaTemplateStatusUpdate {
|
|
27
32
|
event: MetaTemplateStatus;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import type { MetaTemplateStatus } from "../types/index.js";
|
|
3
|
+
import { mapMetaStatusToInternal } from "./meta-status.js";
|
|
4
|
+
|
|
5
|
+
describe("mapMetaStatusToInternal", () => {
|
|
6
|
+
it.each([
|
|
7
|
+
["APPROVED", "approved"],
|
|
8
|
+
["PENDING", "pending"],
|
|
9
|
+
["REJECTED", "rejected"],
|
|
10
|
+
] as const)("maps %s to %s", (metaStatus, internal) => {
|
|
11
|
+
expect(mapMetaStatusToInternal(metaStatus)).toBe(internal);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it.each(["PAUSED", "DISABLED"] as const)(
|
|
15
|
+
"does not leave a template %s at Meta approved",
|
|
16
|
+
(metaStatus) => {
|
|
17
|
+
expect(mapMetaStatusToInternal(metaStatus)).toBe("pending");
|
|
18
|
+
},
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
it.each(["FLAGGED", "IN_APPEAL", "PENDING_DELETION", "SOMETHING_NEW"])(
|
|
22
|
+
"does not take a status it does not know (%s) for an approval",
|
|
23
|
+
(metaStatus) => {
|
|
24
|
+
expect(
|
|
25
|
+
mapMetaStatusToInternal(metaStatus as MetaTemplateStatus),
|
|
26
|
+
).not.toBe("approved");
|
|
27
|
+
},
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
it("has no status for a response that carries none", () => {
|
|
31
|
+
expect(mapMetaStatusToInternal(undefined)).toBeNull();
|
|
32
|
+
});
|
|
33
|
+
});
|
package/src/utils/meta-status.ts
CHANGED
|
@@ -21,6 +21,12 @@ export function mapMetaStatusToInternal(
|
|
|
21
21
|
return "approved";
|
|
22
22
|
case "REJECTED":
|
|
23
23
|
return "rejected";
|
|
24
|
+
// Meta stopped serving the template. There is no internal status for
|
|
25
|
+
// that, so it goes back to pending: not approved, hence not Sendable.
|
|
26
|
+
case "PAUSED":
|
|
27
|
+
case "DISABLED":
|
|
28
|
+
return "pending";
|
|
29
|
+
// Whatever else Meta reports is never taken for an approval.
|
|
24
30
|
default:
|
|
25
31
|
return "pending";
|
|
26
32
|
}
|
|
@@ -162,7 +162,7 @@ describe("validateParameters with brand_* keys", () => {
|
|
|
162
162
|
|
|
163
163
|
describe("compileWhatsappTemplate", () => {
|
|
164
164
|
it("builds the template envelope from the Meta metadata and language", () => {
|
|
165
|
-
const payload = compileWhatsappTemplate(whatsappMessage(), {});
|
|
165
|
+
const payload = compileWhatsappTemplate(whatsappMessage(), {}, "en");
|
|
166
166
|
expect(payload).toEqual({
|
|
167
167
|
messaging_product: "whatsapp",
|
|
168
168
|
type: "template",
|
|
@@ -174,10 +174,18 @@ describe("compileWhatsappTemplate", () => {
|
|
|
174
174
|
});
|
|
175
175
|
});
|
|
176
176
|
|
|
177
|
+
it("sends the Meta-registered language code when it differs from the language id", () => {
|
|
178
|
+
const message = { ...whatsappMessage(), language_id: "zh" };
|
|
179
|
+
|
|
180
|
+
const payload = compileWhatsappTemplate(message, {}, "zh_CN");
|
|
181
|
+
|
|
182
|
+
expect(payload.template.language).toEqual({ code: "zh_CN" });
|
|
183
|
+
});
|
|
184
|
+
|
|
177
185
|
it("throws when the Message has no Meta template name", () => {
|
|
178
186
|
const message = whatsappMessage();
|
|
179
187
|
message.metadata = {};
|
|
180
|
-
expect(() => compileWhatsappTemplate(message, {})).toThrow(
|
|
188
|
+
expect(() => compileWhatsappTemplate(message, {}, "en")).toThrow(
|
|
181
189
|
"Message does not have Meta template name in metadata",
|
|
182
190
|
);
|
|
183
191
|
});
|
|
@@ -189,7 +197,11 @@ describe("compileWhatsappTemplate", () => {
|
|
|
189
197
|
content: doc(text("Hi "), mention("guest_name")),
|
|
190
198
|
},
|
|
191
199
|
});
|
|
192
|
-
const payload = compileWhatsappTemplate(
|
|
200
|
+
const payload = compileWhatsappTemplate(
|
|
201
|
+
message,
|
|
202
|
+
{ guest_name: "Mario" },
|
|
203
|
+
"en",
|
|
204
|
+
);
|
|
193
205
|
expect(payload.template.components).toEqual([
|
|
194
206
|
{
|
|
195
207
|
type: "HEADER",
|
|
@@ -213,10 +225,14 @@ describe("compileWhatsappTemplate", () => {
|
|
|
213
225
|
),
|
|
214
226
|
},
|
|
215
227
|
});
|
|
216
|
-
const payload = compileWhatsappTemplate(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
228
|
+
const payload = compileWhatsappTemplate(
|
|
229
|
+
message,
|
|
230
|
+
{
|
|
231
|
+
guest_name: "Mario",
|
|
232
|
+
nights: 3,
|
|
233
|
+
},
|
|
234
|
+
"en",
|
|
235
|
+
);
|
|
220
236
|
expect(payload.template.components).toEqual([
|
|
221
237
|
{
|
|
222
238
|
type: "BODY",
|
|
@@ -237,7 +253,7 @@ describe("compileWhatsappTemplate", () => {
|
|
|
237
253
|
smartchatMediaId: "media-42",
|
|
238
254
|
},
|
|
239
255
|
});
|
|
240
|
-
const payload = compileWhatsappTemplate(message, {});
|
|
256
|
+
const payload = compileWhatsappTemplate(message, {}, "en");
|
|
241
257
|
expect(payload.template.components).toEqual([
|
|
242
258
|
{
|
|
243
259
|
type: "HEADER",
|
|
@@ -250,7 +266,7 @@ describe("compileWhatsappTemplate", () => {
|
|
|
250
266
|
const message = whatsappMessage({
|
|
251
267
|
header: { type: "image", url: "https://cdn.example.com/hero.png" },
|
|
252
268
|
});
|
|
253
|
-
const payload = compileWhatsappTemplate(message, {});
|
|
269
|
+
const payload = compileWhatsappTemplate(message, {}, "en");
|
|
254
270
|
expect(payload.template.components).toBeUndefined();
|
|
255
271
|
});
|
|
256
272
|
|
|
@@ -269,7 +285,11 @@ describe("compileWhatsappTemplate", () => {
|
|
|
269
285
|
],
|
|
270
286
|
},
|
|
271
287
|
});
|
|
272
|
-
const payload = compileWhatsappTemplate(
|
|
288
|
+
const payload = compileWhatsappTemplate(
|
|
289
|
+
message,
|
|
290
|
+
{ booking_id: "abc" },
|
|
291
|
+
"en",
|
|
292
|
+
);
|
|
273
293
|
expect(payload.template.components).toEqual([
|
|
274
294
|
{
|
|
275
295
|
type: "BUTTON",
|
|
@@ -110,11 +110,15 @@ function buildComponentParameters(
|
|
|
110
110
|
*
|
|
111
111
|
* @param message - The WhatsApp message template to compile
|
|
112
112
|
* @param parameters - Key-value pairs for parameter injection (will be normalized to strings)
|
|
113
|
+
* @param languageCode - The code the template is registered under at Meta
|
|
114
|
+
* (`language.meta_language_code`), which is not always the composer's own
|
|
115
|
+
* language id: `zh` is `zh_CN`, `pt` is `pt_PT`, `no` is `nb`, `tl` is `fil`.
|
|
113
116
|
* @returns WhatsApp Cloud API send payload (without 'to' field)
|
|
114
117
|
*/
|
|
115
118
|
export function compileWhatsappTemplate(
|
|
116
119
|
message: WhatsappMessage,
|
|
117
120
|
parameters: Record<string, unknown>,
|
|
121
|
+
languageCode: string,
|
|
118
122
|
): Omit<WhatsAppSendPayload, "to"> {
|
|
119
123
|
// Normalize parameters to strings first
|
|
120
124
|
const normalizedParams = normalizeParameters(parameters);
|
|
@@ -204,7 +208,7 @@ export function compileWhatsappTemplate(
|
|
|
204
208
|
template: {
|
|
205
209
|
name: templateName,
|
|
206
210
|
language: {
|
|
207
|
-
code:
|
|
211
|
+
code: languageCode,
|
|
208
212
|
},
|
|
209
213
|
components: components.length > 0 ? components : undefined,
|
|
210
214
|
},
|