@crowdin/n8n-nodes-crowdin 0.23.0 → 0.25.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.
Files changed (35) hide show
  1. package/dist/nodes/Crowdin/properties/crowdin/fileBased/ai.js +160 -20
  2. package/dist/nodes/Crowdin/properties/crowdin/fileBased/ai.js.map +1 -1
  3. package/dist/nodes/Crowdin/properties/crowdin/fileBased/applications.js +20 -20
  4. package/dist/nodes/Crowdin/properties/crowdin/fileBased/applications.js.map +1 -1
  5. package/dist/nodes/Crowdin/properties/crowdin/fileBased/projects.js +588 -0
  6. package/dist/nodes/Crowdin/properties/crowdin/fileBased/projects.js.map +1 -1
  7. package/dist/nodes/Crowdin/properties/crowdin/fileBased/sourceFiles.js +614 -0
  8. package/dist/nodes/Crowdin/properties/crowdin/fileBased/sourceFiles.js.map +1 -1
  9. package/dist/nodes/Crowdin/properties/crowdin/fileBased/translations.js +566 -682
  10. package/dist/nodes/Crowdin/properties/crowdin/fileBased/translations.js.map +1 -1
  11. package/dist/nodes/Crowdin/properties/crowdin/stringBased/ai.js +160 -20
  12. package/dist/nodes/Crowdin/properties/crowdin/stringBased/ai.js.map +1 -1
  13. package/dist/nodes/Crowdin/properties/crowdin/stringBased/applications.js +20 -20
  14. package/dist/nodes/Crowdin/properties/crowdin/stringBased/applications.js.map +1 -1
  15. package/dist/nodes/Crowdin/properties/crowdin/stringBased/translations.js +539 -619
  16. package/dist/nodes/Crowdin/properties/crowdin/stringBased/translations.js.map +1 -1
  17. package/dist/nodes/Crowdin/properties/enterprise/fileBased/ai.js +160 -20
  18. package/dist/nodes/Crowdin/properties/enterprise/fileBased/ai.js.map +1 -1
  19. package/dist/nodes/Crowdin/properties/enterprise/fileBased/applications.js +14 -14
  20. package/dist/nodes/Crowdin/properties/enterprise/fileBased/applications.js.map +1 -1
  21. package/dist/nodes/Crowdin/properties/enterprise/fileBased/projectsAndGroups.js +588 -0
  22. package/dist/nodes/Crowdin/properties/enterprise/fileBased/projectsAndGroups.js.map +1 -1
  23. package/dist/nodes/Crowdin/properties/enterprise/fileBased/sourceFiles.js +614 -0
  24. package/dist/nodes/Crowdin/properties/enterprise/fileBased/sourceFiles.js.map +1 -1
  25. package/dist/nodes/Crowdin/properties/enterprise/fileBased/translations.js +562 -680
  26. package/dist/nodes/Crowdin/properties/enterprise/fileBased/translations.js.map +1 -1
  27. package/dist/nodes/Crowdin/properties/enterprise/stringBased/ai.js +160 -20
  28. package/dist/nodes/Crowdin/properties/enterprise/stringBased/ai.js.map +1 -1
  29. package/dist/nodes/Crowdin/properties/enterprise/stringBased/applications.js +14 -14
  30. package/dist/nodes/Crowdin/properties/enterprise/stringBased/applications.js.map +1 -1
  31. package/dist/nodes/Crowdin/properties/enterprise/stringBased/translations.js +536 -618
  32. package/dist/nodes/Crowdin/properties/enterprise/stringBased/translations.js.map +1 -1
  33. package/dist/package.json +1 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +1 -1
@@ -2027,255 +2027,11 @@ exports.translationsProperties = [
2027
2027
  }
2028
2028
  },
2029
2029
  {
2030
- displayName: 'Language Ids',
2031
- required: true,
2032
- name: 'languageIds',
2033
- type: 'multiOptions',
2034
- default: [],
2035
- description: 'Set of languages to which auto-translation should be applied. Get via [List Supported Languages](#operation/api.languages.getMany)',
2036
- routing: {
2037
- send: {
2038
- property: 'languageIds',
2039
- propertyInDotNotation: false,
2040
- type: 'body',
2041
- value: '={{ $value }}'
2042
- }
2043
- },
2044
- displayOptions: {
2045
- show: {
2046
- resource: [
2047
- 'translations'
2048
- ],
2049
- operation: [
2050
- 'api.projects.pre-translations.post'
2051
- ]
2052
- }
2053
- },
2054
- typeOptions: {
2055
- loadOptionsMethod: 'getLanguagesMulti'
2056
- }
2057
- },
2058
- {
2059
- displayName: 'File Ids',
2060
- name: 'fileIds',
2061
- type: 'multiOptions',
2062
- default: [],
2063
- description: 'Files array that should be translated\n\n__Note:__ Required unless `directoryIds` or `branchIds` is set',
2064
- routing: {
2065
- send: {
2066
- property: 'fileIds',
2067
- propertyInDotNotation: false,
2068
- type: 'body',
2069
- value: '={{ $value }}'
2070
- }
2071
- },
2072
- displayOptions: {
2073
- show: {
2074
- resource: [
2075
- 'translations'
2076
- ],
2077
- operation: [
2078
- 'api.projects.pre-translations.post'
2079
- ]
2080
- }
2081
- },
2082
- typeOptions: {
2083
- loadOptionsMethod: 'getProjectFilesMulti',
2084
- loadOptionsDependsOn: [
2085
- 'projectId'
2086
- ]
2087
- }
2088
- },
2089
- {
2090
- displayName: 'Directory Ids',
2091
- name: 'directoryIds',
2092
- type: 'multiOptions',
2093
- default: [],
2094
- description: 'Directories array that should be translated. Includes all nested files',
2095
- routing: {
2096
- send: {
2097
- property: 'directoryIds',
2098
- propertyInDotNotation: false,
2099
- type: 'body',
2100
- value: '={{ $value }}'
2101
- }
2102
- },
2103
- displayOptions: {
2104
- show: {
2105
- resource: [
2106
- 'translations'
2107
- ],
2108
- operation: [
2109
- 'api.projects.pre-translations.post'
2110
- ]
2111
- }
2112
- },
2113
- typeOptions: {
2114
- loadOptionsMethod: 'getProjectDirectoriesMulti',
2115
- loadOptionsDependsOn: [
2116
- 'projectId'
2117
- ]
2118
- }
2119
- },
2120
- {
2121
- displayName: 'Branch Ids',
2122
- name: 'branchIds',
2123
- type: 'multiOptions',
2124
- default: [],
2125
- description: 'Branches array that should be translated. Includes all nested files',
2126
- routing: {
2127
- send: {
2128
- property: 'branchIds',
2129
- propertyInDotNotation: false,
2130
- type: 'body',
2131
- value: '={{ $value }}'
2132
- }
2133
- },
2134
- displayOptions: {
2135
- show: {
2136
- resource: [
2137
- 'translations'
2138
- ],
2139
- operation: [
2140
- 'api.projects.pre-translations.post'
2141
- ]
2142
- }
2143
- },
2144
- typeOptions: {
2145
- loadOptionsMethod: 'getBranchesMulti',
2146
- loadOptionsDependsOn: [
2147
- 'projectId'
2148
- ]
2149
- }
2150
- },
2151
- {
2152
- displayName: 'Method',
2153
- name: 'method',
2154
- type: 'options',
2155
- default: '',
2156
- description: 'Defines auto-translation method. Available values:\n- \'tm\' – auto-translation via Translation Memory\n- \'mt\' – auto-translation via Machine Translation. \'mt\' should be used with `engineId` parameter\n- \'ai\' – auto-translation via AI. \'ai\' should be used with `aiPromptId` parameter',
2157
- options: [
2158
- {
2159
- name: '-',
2160
- value: ''
2161
- },
2162
- {
2163
- name: 'tm',
2164
- value: 'tm'
2165
- },
2166
- {
2167
- name: 'mt',
2168
- value: 'mt'
2169
- },
2170
- {
2171
- name: 'ai',
2172
- value: 'ai'
2173
- }
2174
- ],
2175
- routing: {
2176
- send: {
2177
- property: 'method',
2178
- propertyInDotNotation: false,
2179
- type: 'body',
2180
- value: '={{ $value || undefined }}'
2181
- }
2182
- },
2183
- displayOptions: {
2184
- show: {
2185
- resource: [
2186
- 'translations'
2187
- ],
2188
- operation: [
2189
- 'api.projects.pre-translations.post'
2190
- ]
2191
- }
2192
- }
2193
- },
2194
- {
2195
- displayName: 'Priority',
2196
- name: 'priority',
2197
- type: 'options',
2198
- default: '',
2199
- description: undefined,
2200
- options: [
2201
- {
2202
- name: '-',
2203
- value: ''
2204
- },
2205
- {
2206
- name: 'low',
2207
- value: 'low'
2208
- },
2209
- {
2210
- name: 'normal',
2211
- value: 'normal'
2212
- },
2213
- {
2214
- name: 'high',
2215
- value: 'high'
2216
- }
2217
- ],
2218
- routing: {
2219
- send: {
2220
- property: 'priority',
2221
- propertyInDotNotation: false,
2222
- type: 'body',
2223
- value: '={{ $value || undefined }}'
2224
- }
2225
- },
2226
- displayOptions: {
2227
- show: {
2228
- resource: [
2229
- 'translations'
2230
- ],
2231
- operation: [
2232
- 'api.projects.pre-translations.post'
2233
- ]
2234
- }
2235
- }
2236
- },
2237
- {
2238
- displayName: 'Engine Id',
2239
- name: 'engineId',
2240
- type: 'options',
2241
- default: '',
2242
- description: 'Machine Translation engine Identifier. Get via [List MTs](#operation/api.mts.getMany)',
2243
- routing: {
2244
- send: {
2245
- property: 'engineId',
2246
- propertyInDotNotation: false,
2247
- type: 'body',
2248
- value: '={{ typeof $value === \'number\' ? $value : undefined }}'
2249
- }
2250
- },
2251
- displayOptions: {
2252
- show: {
2253
- resource: [
2254
- 'translations'
2255
- ],
2256
- operation: [
2257
- 'api.projects.pre-translations.post'
2258
- ]
2259
- }
2260
- },
2261
- typeOptions: {
2262
- loadOptionsMethod: 'getMTEngines'
2263
- }
2264
- },
2265
- {
2266
- displayName: 'Ai Prompt Id',
2267
- name: 'aiPromptId',
2268
- type: 'options',
2269
- default: '',
2270
- description: 'AI Prompt Identifier. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)',
2271
- routing: {
2272
- send: {
2273
- property: 'aiPromptId',
2274
- propertyInDotNotation: false,
2275
- type: 'body',
2276
- value: '={{ typeof $value === \'number\' ? $value : undefined }}'
2277
- }
2278
- },
2030
+ displayName: 'Body',
2031
+ name: '_body',
2032
+ description: 'Select configuration type',
2033
+ default: {},
2034
+ type: 'fixedCollection',
2279
2035
  displayOptions: {
2280
2036
  show: {
2281
2037
  resource: [
@@ -2286,431 +2042,582 @@ exports.translationsProperties = [
2286
2042
  ]
2287
2043
  }
2288
2044
  },
2289
- typeOptions: {
2290
- loadOptionsMethod: 'getAiPrompts'
2291
- }
2292
- },
2293
- {
2294
- displayName: 'Auto Approve Option',
2295
- name: 'autoApproveOption',
2296
- type: 'options',
2297
- default: '',
2298
- description: 'Defines which translations added by TM auto-translation should be auto-approved. Available values:\n- \'all\' – all\n- \'perfectMatchOnly\' – with perfect TM match\n- \'exceptAutoSubstituted\' – all (skip auto-substituted suggestions)\n- \'perfectMatchApprovedOnly\' - with perfect TM match (approved previously)\n- \'none\' – no auto-approve',
2299
2045
  options: [
2300
2046
  {
2301
- name: '-',
2302
- value: ''
2303
- },
2304
- {
2305
- name: 'all',
2306
- value: 'all'
2307
- },
2308
- {
2309
- name: 'exceptAutoSubstituted',
2310
- value: 'exceptAutoSubstituted'
2311
- },
2312
- {
2313
- name: 'perfectMatchApprovedOnly',
2314
- value: 'perfectMatchApprovedOnly'
2315
- },
2316
- {
2317
- name: 'perfectMatchOnly',
2318
- value: 'perfectMatchOnly'
2319
- },
2320
- {
2321
- name: 'none',
2322
- value: 'none'
2323
- }
2324
- ],
2325
- routing: {
2326
- send: {
2327
- property: 'autoApproveOption',
2328
- propertyInDotNotation: false,
2329
- type: 'body',
2330
- value: '={{ $value || undefined }}'
2331
- }
2332
- },
2333
- displayOptions: {
2334
- show: {
2335
- resource: [
2336
- 'translations'
2337
- ],
2338
- operation: [
2339
- 'api.projects.pre-translations.post'
2340
- ]
2341
- }
2342
- }
2343
- },
2344
- {
2345
- displayName: 'Duplicate Translations',
2346
- name: 'duplicateTranslations',
2347
- type: 'boolean',
2348
- default: false,
2349
- description: 'Adds translations even if the same translation already exists. Default is `false`.\n\n__Note:__ Cannot be used when `replaceTranslationsOption` is `all` (replacing all translations already overrides duplicate handling).',
2350
- routing: {
2351
- send: {
2352
- property: 'duplicateTranslations',
2353
- propertyInDotNotation: false,
2354
- type: 'body',
2355
- value: '={{ $value }}'
2356
- }
2357
- },
2358
- displayOptions: {
2359
- show: {
2360
- resource: [
2361
- 'translations'
2362
- ],
2363
- operation: [
2364
- 'api.projects.pre-translations.post'
2365
- ]
2366
- }
2367
- }
2368
- },
2369
- {
2370
- displayName: 'Skip Approved Translations',
2371
- name: 'skipApprovedTranslations',
2372
- type: 'boolean',
2373
- default: false,
2374
- description: 'Skip strings that already have approved translations. Default is `false`.\n\n__Note:__ Cannot be used together with `resetApprovalStatus`.',
2375
- routing: {
2376
- send: {
2377
- property: 'skipApprovedTranslations',
2378
- propertyInDotNotation: false,
2379
- type: 'body',
2380
- value: '={{ $value }}'
2381
- }
2382
- },
2383
- displayOptions: {
2384
- show: {
2385
- resource: [
2386
- 'translations'
2387
- ],
2388
- operation: [
2389
- 'api.projects.pre-translations.post'
2390
- ]
2391
- }
2392
- }
2393
- },
2394
- {
2395
- displayName: 'Scope',
2396
- name: 'scope',
2397
- type: 'options',
2398
- default: '',
2399
- description: 'Which strings to apply auto-translation to. Default is `untranslated`. Available values:\n- \'untranslated\' – strings without an existing translation (default)\n- \'translated\' – strings that already have a translation (re-translation)\n- \'all\' – both untranslated and translated strings\n\n__Note:__ Cannot be used together with the deprecated `translateUntranslatedOnly`.',
2400
- options: [
2401
- {
2402
- name: '-',
2403
- value: ''
2404
- },
2405
- {
2406
- name: 'untranslated',
2407
- value: 'untranslated'
2408
- },
2409
- {
2410
- name: 'translated',
2411
- value: 'translated'
2412
- },
2413
- {
2414
- name: 'all',
2415
- value: 'all'
2416
- }
2417
- ],
2418
- routing: {
2419
- send: {
2420
- property: 'scope',
2421
- propertyInDotNotation: false,
2422
- type: 'body',
2423
- value: '={{ $value || undefined }}'
2424
- }
2425
- },
2426
- displayOptions: {
2427
- show: {
2428
- resource: [
2429
- 'translations'
2430
- ],
2431
- operation: [
2432
- 'api.projects.pre-translations.post'
2433
- ]
2434
- }
2435
- }
2436
- },
2437
- {
2438
- displayName: 'Translation Modified Before',
2439
- name: 'dateTime:translationModifiedBefore',
2440
- type: 'dateTime',
2441
- default: '',
2442
- description: 'Re-translates only if a string\'s current translation was modified prior to this date. Useful after modifying contextual resources like screenshots, style guides, or glossaries.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used with `scope: "untranslated"` or `translateUntranslatedOnly: true`.',
2443
- routing: {
2444
- send: {
2445
- property: 'translationModifiedBefore',
2446
- propertyInDotNotation: false,
2447
- type: 'body',
2448
- value: '={{ $value || undefined }}'
2449
- }
2450
- },
2451
- displayOptions: {
2452
- show: {
2453
- resource: [
2454
- 'translations'
2455
- ],
2456
- operation: [
2457
- 'api.projects.pre-translations.post'
2458
- ]
2459
- }
2460
- },
2461
- placeholder: '2026-01-01T00:00:00+00:00'
2462
- },
2463
- {
2464
- displayName: 'Replace Translations Option',
2465
- name: 'replaceTranslationsOption',
2466
- type: 'options',
2467
- default: '',
2468
- description: 'Defines whether to replace existing translations with new auto-translations. Default is `none`. Available values:\n- \'none\' – add the new translation alongside existing ones (default)\n- \'autoTranslated\' – replace auto-generated translations (TM, MT, AI). Human translations are kept\n- \'all\' – replace all existing translations\n\n__Note:__ Values other than `none` require `scope` to be `translated` or `all` (cannot be combined with `scope: "untranslated"` or `translateUntranslatedOnly: true`).',
2469
- options: [
2470
- {
2471
- name: '-',
2472
- value: ''
2473
- },
2474
- {
2475
- name: 'none',
2476
- value: 'none'
2477
- },
2478
- {
2479
- name: 'autoTranslated',
2480
- value: 'autoTranslated'
2481
- },
2482
- {
2483
- name: 'all',
2484
- value: 'all'
2485
- }
2486
- ],
2487
- routing: {
2488
- send: {
2489
- property: 'replaceTranslationsOption',
2490
- propertyInDotNotation: false,
2491
- type: 'body',
2492
- value: '={{ $value || undefined }}'
2493
- }
2494
- },
2495
- displayOptions: {
2496
- show: {
2497
- resource: [
2498
- 'translations'
2499
- ],
2500
- operation: [
2501
- 'api.projects.pre-translations.post'
2502
- ]
2503
- }
2504
- }
2505
- },
2506
- {
2507
- displayName: 'Reset Approval Status',
2508
- name: 'resetApprovalStatus',
2509
- type: 'boolean',
2510
- default: false,
2511
- description: 'Removes approval on existing translations when applying auto-translations. Default is `false`.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used together with `skipApprovedTranslations`, `autoApproveOption` (any value other than `none`), or when `replaceTranslationsOption` is `all` (replaced translations lose approval automatically). Cannot be used with `scope: "untranslated"` or `translateUntranslatedOnly: true`.',
2512
- routing: {
2513
- send: {
2514
- property: 'resetApprovalStatus',
2515
- propertyInDotNotation: false,
2516
- type: 'body',
2517
- value: '={{ $value }}'
2518
- }
2519
- },
2520
- displayOptions: {
2521
- show: {
2522
- resource: [
2523
- 'translations'
2524
- ],
2525
- operation: [
2526
- 'api.projects.pre-translations.post'
2527
- ]
2528
- }
2529
- }
2530
- },
2531
- {
2532
- displayName: 'Minimum Match Ratio',
2533
- name: 'minimumMatchRatio',
2534
- type: 'number',
2535
- default: 0,
2536
- description: 'Add translation when TM match is greater or equal to minimum match ratio. This argument will be ignored if `translateWithPerfectMatchOnly` is set.\n\n__Note:__ Works only with TM auto-translation method',
2537
- routing: {
2538
- send: {
2539
- property: 'minimumMatchRatio',
2540
- propertyInDotNotation: false,
2541
- type: 'body',
2542
- value: '={{ $value !== 0 ? $value : undefined }}'
2543
- }
2544
- },
2545
- displayOptions: {
2546
- show: {
2547
- resource: [
2548
- 'translations'
2549
- ],
2550
- operation: [
2551
- 'api.projects.pre-translations.post'
2552
- ]
2553
- }
2554
- },
2555
- placeholder: '100'
2556
- },
2557
- {
2558
- displayName: 'Translate With Perfect Match Only',
2559
- name: 'translateWithPerfectMatchOnly',
2560
- type: 'boolean',
2561
- default: false,
2562
- description: 'Applies auto-translation only for the strings with perfect match (source text and contextual information are identical)\n\n__Note:__ Works only with TM auto-translation method',
2563
- routing: {
2564
- send: {
2565
- property: 'translateWithPerfectMatchOnly',
2566
- propertyInDotNotation: false,
2567
- type: 'body',
2568
- value: '={{ $value }}'
2569
- }
2570
- },
2571
- displayOptions: {
2572
- show: {
2573
- resource: [
2574
- 'translations'
2575
- ],
2576
- operation: [
2577
- 'api.projects.pre-translations.post'
2578
- ]
2579
- }
2580
- }
2581
- },
2582
- {
2583
- displayName: 'Fallback Languages',
2584
- name: 'fallbackLanguages',
2585
- type: 'fixedCollection',
2586
- default: {},
2587
- description: 'Defines fallback languages mapping. The passed value should be an associative array containing both language id and array of fallback language ids:\n\n - `{languageId}` – Crowdin id for the specified language. Get via [List Supported Languages](#operation/api.languages.getMany)\n - `Array of strings` – an array containing fallback language ids. Get via [List Supported Languages](#operation/api.languages.getMany)\n\n__Note:__ Available only for TM Auto-Translation',
2588
- routing: {
2589
- send: {
2590
- property: 'fallbackLanguages',
2591
- propertyInDotNotation: false,
2592
- type: 'body',
2593
- value: '={{ $value.fields || undefined }}',
2594
- preSend: [
2595
- preSend_1.normalizeFieldBody
2596
- ]
2597
- }
2598
- },
2599
- displayOptions: {
2600
- show: {
2601
- resource: [
2602
- 'translations'
2603
- ],
2604
- operation: [
2605
- 'api.projects.pre-translations.post'
2047
+ displayName: 'By Files',
2048
+ name: '_byFiles',
2049
+ values: [
2050
+ {
2051
+ displayName: 'Language Ids',
2052
+ name: 'languageIds',
2053
+ type: 'multiOptions',
2054
+ typeOptions: {
2055
+ loadOptionsMethod: 'getLanguagesMulti'
2056
+ },
2057
+ default: [],
2058
+ description: 'Set of languages to which auto-translation should be applied. Get via [List Supported Languages](#operation/api.languages.getMany)',
2059
+ required: true
2060
+ },
2061
+ {
2062
+ displayName: 'File Ids',
2063
+ name: 'fileIds',
2064
+ type: 'multiOptions',
2065
+ typeOptions: {
2066
+ loadOptionsMethod: 'getProjectFilesMulti',
2067
+ loadOptionsDependsOn: [
2068
+ 'projectId'
2069
+ ]
2070
+ },
2071
+ default: [],
2072
+ description: 'Files array that should be translated\n\n__Note:__ Required unless `directoryIds` or `branchIds` is set'
2073
+ },
2074
+ {
2075
+ displayName: 'Directory Ids',
2076
+ name: 'directoryIds',
2077
+ type: 'multiOptions',
2078
+ typeOptions: {
2079
+ loadOptionsMethod: 'getProjectDirectoriesMulti',
2080
+ loadOptionsDependsOn: [
2081
+ 'projectId'
2082
+ ]
2083
+ },
2084
+ default: [],
2085
+ description: 'Directories array that should be translated. Includes all nested files'
2086
+ },
2087
+ {
2088
+ displayName: 'Branch Ids',
2089
+ name: 'branchIds',
2090
+ type: 'multiOptions',
2091
+ typeOptions: {
2092
+ loadOptionsMethod: 'getBranchesMulti',
2093
+ loadOptionsDependsOn: [
2094
+ 'projectId'
2095
+ ]
2096
+ },
2097
+ default: [],
2098
+ description: 'Branches array that should be translated. Includes all nested files'
2099
+ },
2100
+ {
2101
+ displayName: 'Label Ids',
2102
+ name: 'labelIds',
2103
+ type: 'multiOptions',
2104
+ typeOptions: {
2105
+ loadOptionsMethod: 'getProjectLabelsMulti',
2106
+ loadOptionsDependsOn: [
2107
+ 'projectId'
2108
+ ]
2109
+ },
2110
+ default: [],
2111
+ description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
2112
+ },
2113
+ {
2114
+ displayName: 'Exclude Label Ids',
2115
+ name: 'excludeLabelIds',
2116
+ type: 'multiOptions',
2117
+ typeOptions: {
2118
+ loadOptionsMethod: 'getProjectLabelsMulti',
2119
+ loadOptionsDependsOn: [
2120
+ 'projectId'
2121
+ ]
2122
+ },
2123
+ default: [],
2124
+ description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
2125
+ },
2126
+ {
2127
+ displayName: 'Method',
2128
+ name: 'method',
2129
+ type: 'options',
2130
+ default: '',
2131
+ description: 'Defines auto-translation method. Available values:\n- \'tm\' – auto-translation via Translation Memory\n- \'mt\' – auto-translation via Machine Translation. \'mt\' should be used with `engineId` parameter\n- \'ai\' – auto-translation via AI. \'ai\' should be used with `aiPromptId` parameter',
2132
+ options: [
2133
+ {
2134
+ name: '-',
2135
+ value: ''
2136
+ },
2137
+ {
2138
+ name: 'tm',
2139
+ value: 'tm'
2140
+ },
2141
+ {
2142
+ name: 'mt',
2143
+ value: 'mt'
2144
+ },
2145
+ {
2146
+ name: 'ai',
2147
+ value: 'ai'
2148
+ }
2149
+ ],
2150
+ placeholder: 'mt'
2151
+ },
2152
+ {
2153
+ displayName: 'Priority',
2154
+ name: 'priority',
2155
+ type: 'options',
2156
+ default: '',
2157
+ description: undefined,
2158
+ options: [
2159
+ {
2160
+ name: '-',
2161
+ value: ''
2162
+ },
2163
+ {
2164
+ name: 'low',
2165
+ value: 'low'
2166
+ },
2167
+ {
2168
+ name: 'normal',
2169
+ value: 'normal'
2170
+ },
2171
+ {
2172
+ name: 'high',
2173
+ value: 'high'
2174
+ }
2175
+ ]
2176
+ },
2177
+ {
2178
+ displayName: 'Engine Id',
2179
+ name: 'engineId',
2180
+ type: 'options',
2181
+ default: '',
2182
+ description: 'Machine Translation engine Identifier. Get via [List MTs](#operation/api.mts.getMany)',
2183
+ typeOptions: {
2184
+ loadOptionsMethod: 'getMTEngines'
2185
+ }
2186
+ },
2187
+ {
2188
+ displayName: 'Ai Prompt Id',
2189
+ name: 'aiPromptId',
2190
+ type: 'options',
2191
+ default: '',
2192
+ description: 'AI Prompt Identifier. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)',
2193
+ typeOptions: {
2194
+ loadOptionsMethod: 'getAiPrompts'
2195
+ }
2196
+ },
2197
+ {
2198
+ displayName: 'Auto Approve Option',
2199
+ name: 'autoApproveOption',
2200
+ type: 'options',
2201
+ default: '',
2202
+ description: 'Defines which translations added by TM auto-translation should be auto-approved. Available values:\n- \'all\' – all\n- \'perfectMatchOnly\' – with perfect TM match\n- \'exceptAutoSubstituted\' – all (skip auto-substituted suggestions)\n- \'perfectMatchApprovedOnly\' - with perfect TM match (approved previously)\n- \'none\' – no auto-approve',
2203
+ options: [
2204
+ {
2205
+ name: '-',
2206
+ value: ''
2207
+ },
2208
+ {
2209
+ name: 'all',
2210
+ value: 'all'
2211
+ },
2212
+ {
2213
+ name: 'exceptAutoSubstituted',
2214
+ value: 'exceptAutoSubstituted'
2215
+ },
2216
+ {
2217
+ name: 'perfectMatchApprovedOnly',
2218
+ value: 'perfectMatchApprovedOnly'
2219
+ },
2220
+ {
2221
+ name: 'perfectMatchOnly',
2222
+ value: 'perfectMatchOnly'
2223
+ },
2224
+ {
2225
+ name: 'none',
2226
+ value: 'none'
2227
+ }
2228
+ ]
2229
+ },
2230
+ {
2231
+ displayName: 'Duplicate Translations',
2232
+ name: 'duplicateTranslations',
2233
+ type: 'boolean',
2234
+ default: false,
2235
+ description: 'Adds translations even if the same translation already exists. Default is `false`.\n\n__Note:__ Cannot be used when `replaceTranslationsOption` is `all` (replacing all translations already overrides duplicate handling).'
2236
+ },
2237
+ {
2238
+ displayName: 'Skip Approved Translations',
2239
+ name: 'skipApprovedTranslations',
2240
+ type: 'boolean',
2241
+ default: false,
2242
+ description: 'Skip strings that already have approved translations. Default is `false`.\n\n__Note:__ Cannot be used together with `resetApprovalStatus`.'
2243
+ },
2244
+ {
2245
+ displayName: 'Scope',
2246
+ name: 'scope',
2247
+ type: 'options',
2248
+ default: '',
2249
+ description: 'Which strings to apply auto-translation to. Default is `untranslated`. Available values:\n- \'untranslated\' – strings without an existing translation (default)\n- \'translated\' – strings that already have a translation (re-translation)\n- \'all\' – both untranslated and translated strings\n\n__Note:__ Cannot be used together with the deprecated `translateUntranslatedOnly`.',
2250
+ options: [
2251
+ {
2252
+ name: '-',
2253
+ value: ''
2254
+ },
2255
+ {
2256
+ name: 'untranslated',
2257
+ value: 'untranslated'
2258
+ },
2259
+ {
2260
+ name: 'translated',
2261
+ value: 'translated'
2262
+ },
2263
+ {
2264
+ name: 'all',
2265
+ value: 'all'
2266
+ }
2267
+ ]
2268
+ },
2269
+ {
2270
+ displayName: 'Translation Modified Before',
2271
+ name: 'dateTime:translationModifiedBefore',
2272
+ type: 'dateTime',
2273
+ default: '',
2274
+ description: 'Re-translates only if a string\'s current translation was modified prior to this date. Useful after modifying contextual resources like screenshots, style guides, or glossaries.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used with `scope: "untranslated"` or `translateUntranslatedOnly: true`.',
2275
+ placeholder: '2026-01-01T00:00:00+00:00'
2276
+ },
2277
+ {
2278
+ displayName: 'Replace Translations Option',
2279
+ name: 'replaceTranslationsOption',
2280
+ type: 'options',
2281
+ default: '',
2282
+ description: 'Defines whether to replace existing translations with new auto-translations. Default is `none`. Available values:\n- \'none\' – add the new translation alongside existing ones (default)\n- \'autoTranslated\' – replace auto-generated translations (TM, MT, AI). Human translations are kept\n- \'all\' – replace all existing translations\n\n__Note:__ Values other than `none` require `scope` to be `translated` or `all` (cannot be combined with `scope: "untranslated"` or `translateUntranslatedOnly: true`).',
2283
+ options: [
2284
+ {
2285
+ name: '-',
2286
+ value: ''
2287
+ },
2288
+ {
2289
+ name: 'none',
2290
+ value: 'none'
2291
+ },
2292
+ {
2293
+ name: 'autoTranslated',
2294
+ value: 'autoTranslated'
2295
+ },
2296
+ {
2297
+ name: 'all',
2298
+ value: 'all'
2299
+ }
2300
+ ]
2301
+ },
2302
+ {
2303
+ displayName: 'Reset Approval Status',
2304
+ name: 'resetApprovalStatus',
2305
+ type: 'boolean',
2306
+ default: false,
2307
+ description: 'Removes approval on existing translations when applying auto-translations. Default is `false`.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used together with `skipApprovedTranslations`, `autoApproveOption` (any value other than `none`), or when `replaceTranslationsOption` is `all` (replaced translations lose approval automatically). Cannot be used with `scope: "untranslated"` or `translateUntranslatedOnly: true`.'
2308
+ },
2309
+ {
2310
+ displayName: 'Minimum Match Ratio',
2311
+ name: 'minimumMatchRatio',
2312
+ type: 'number',
2313
+ default: 0,
2314
+ description: 'Add translation when TM match is greater or equal to minimum match ratio. This argument will be ignored if `translateWithPerfectMatchOnly` is set.\n\n__Note:__ Works only with TM auto-translation method',
2315
+ placeholder: '100'
2316
+ },
2317
+ {
2318
+ displayName: 'Translate With Perfect Match Only',
2319
+ name: 'translateWithPerfectMatchOnly',
2320
+ type: 'boolean',
2321
+ default: false,
2322
+ description: 'Applies auto-translation only for the strings with perfect match (source text and contextual information are identical)\n\n__Note:__ Works only with TM auto-translation method'
2323
+ },
2324
+ {
2325
+ displayName: 'Fallback Languages',
2326
+ name: 'fallbackLanguages',
2327
+ type: 'fixedCollection',
2328
+ default: {},
2329
+ description: 'Defines fallback languages mapping. The passed value should be an associative array containing both language id and array of fallback language ids:\n\n - `{languageId}` – Crowdin id for the specified language. Get via [List Supported Languages](#operation/api.languages.getMany)\n - `Array of strings` – an array containing fallback language ids. Get via [List Supported Languages](#operation/api.languages.getMany)\n\n__Note:__ Available only for TM Auto-Translation',
2330
+ placeholder: 'Add Field',
2331
+ options: [
2332
+ {
2333
+ displayName: 'Fields',
2334
+ name: 'fields',
2335
+ values: [
2336
+ {
2337
+ displayName: 'Language Id',
2338
+ name: 'languageId',
2339
+ type: 'options',
2340
+ typeOptions: {
2341
+ loadOptionsMethod: 'getLanguages'
2342
+ },
2343
+ default: '',
2344
+ description: undefined
2345
+ }
2346
+ ]
2347
+ }
2348
+ ]
2349
+ },
2350
+ {
2351
+ displayName: 'Custom Instruction',
2352
+ name: 'customInstruction',
2353
+ type: 'string',
2354
+ default: '',
2355
+ description: 'Custom instruction for AI auto-translation. This instruction will be appended to the AI prompt text.\n\n__Note:__ Available only for AI auto-translation method'
2356
+ }
2606
2357
  ]
2607
- }
2608
- },
2609
- placeholder: 'Add Field',
2610
- options: [
2358
+ },
2611
2359
  {
2612
- displayName: 'Fields',
2613
- name: 'fields',
2360
+ displayName: 'By Task',
2361
+ name: '_byTask',
2614
2362
  values: [
2615
2363
  {
2616
- displayName: 'Language Id',
2617
- name: 'languageId',
2364
+ displayName: 'Task Id',
2365
+ name: 'taskId',
2618
2366
  type: 'options',
2367
+ default: '',
2368
+ description: 'Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)',
2369
+ required: true,
2619
2370
  typeOptions: {
2620
- loadOptionsMethod: 'getLanguages'
2621
- },
2371
+ loadOptionsMethod: 'getProjectTasks',
2372
+ loadOptionsDependsOn: [
2373
+ 'projectId'
2374
+ ]
2375
+ }
2376
+ },
2377
+ {
2378
+ displayName: 'Method',
2379
+ name: 'method',
2380
+ type: 'options',
2381
+ default: '',
2382
+ description: 'Defines auto-translation method. Available values:\n- \'tm\' – auto-translation via Translation Memory\n- \'mt\' – auto-translation via Machine Translation. \'mt\' should be used with `engineId` parameter\n- \'ai\' – auto-translation via AI. \'ai\' should be used with `aiPromptId` parameter',
2383
+ options: [
2384
+ {
2385
+ name: '-',
2386
+ value: ''
2387
+ },
2388
+ {
2389
+ name: 'tm',
2390
+ value: 'tm'
2391
+ },
2392
+ {
2393
+ name: 'mt',
2394
+ value: 'mt'
2395
+ },
2396
+ {
2397
+ name: 'ai',
2398
+ value: 'ai'
2399
+ }
2400
+ ],
2401
+ placeholder: 'mt'
2402
+ },
2403
+ {
2404
+ displayName: 'Priority',
2405
+ name: 'priority',
2406
+ type: 'options',
2407
+ default: '',
2408
+ description: undefined,
2409
+ options: [
2410
+ {
2411
+ name: '-',
2412
+ value: ''
2413
+ },
2414
+ {
2415
+ name: 'low',
2416
+ value: 'low'
2417
+ },
2418
+ {
2419
+ name: 'normal',
2420
+ value: 'normal'
2421
+ },
2422
+ {
2423
+ name: 'high',
2424
+ value: 'high'
2425
+ }
2426
+ ]
2427
+ },
2428
+ {
2429
+ displayName: 'Engine Id',
2430
+ name: 'engineId',
2431
+ type: 'options',
2432
+ default: '',
2433
+ description: 'Machine Translation engine Identifier. Get via [List MTs](#operation/api.mts.getMany)',
2434
+ typeOptions: {
2435
+ loadOptionsMethod: 'getMTEngines'
2436
+ }
2437
+ },
2438
+ {
2439
+ displayName: 'Ai Prompt Id',
2440
+ name: 'aiPromptId',
2441
+ type: 'options',
2442
+ default: '',
2443
+ description: 'AI Prompt Identifier. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)',
2444
+ typeOptions: {
2445
+ loadOptionsMethod: 'getAiPrompts'
2446
+ }
2447
+ },
2448
+ {
2449
+ displayName: 'Auto Approve Option',
2450
+ name: 'autoApproveOption',
2451
+ type: 'options',
2452
+ default: '',
2453
+ description: 'Defines which translations added by TM auto-translation should be auto-approved. Available values:\n- \'all\' – all\n- \'perfectMatchOnly\' – with perfect TM match\n- \'exceptAutoSubstituted\' – all (skip auto-substituted suggestions)\n- \'perfectMatchApprovedOnly\' - with perfect TM match (approved previously)\n- \'none\' – no auto-approve',
2454
+ options: [
2455
+ {
2456
+ name: '-',
2457
+ value: ''
2458
+ },
2459
+ {
2460
+ name: 'all',
2461
+ value: 'all'
2462
+ },
2463
+ {
2464
+ name: 'exceptAutoSubstituted',
2465
+ value: 'exceptAutoSubstituted'
2466
+ },
2467
+ {
2468
+ name: 'perfectMatchApprovedOnly',
2469
+ value: 'perfectMatchApprovedOnly'
2470
+ },
2471
+ {
2472
+ name: 'perfectMatchOnly',
2473
+ value: 'perfectMatchOnly'
2474
+ },
2475
+ {
2476
+ name: 'none',
2477
+ value: 'none'
2478
+ }
2479
+ ]
2480
+ },
2481
+ {
2482
+ displayName: 'Duplicate Translations',
2483
+ name: 'duplicateTranslations',
2484
+ type: 'boolean',
2485
+ default: false,
2486
+ description: 'Adds translations even if the same translation already exists. Default is `false`.\n\n__Note:__ Cannot be used when `replaceTranslationsOption` is `all` (replacing all translations already overrides duplicate handling).'
2487
+ },
2488
+ {
2489
+ displayName: 'Skip Approved Translations',
2490
+ name: 'skipApprovedTranslations',
2491
+ type: 'boolean',
2492
+ default: false,
2493
+ description: 'Skip strings that already have approved translations. Default is `false`.\n\n__Note:__ Cannot be used together with `resetApprovalStatus`.'
2494
+ },
2495
+ {
2496
+ displayName: 'Scope',
2497
+ name: 'scope',
2498
+ type: 'options',
2499
+ default: '',
2500
+ description: 'Which strings to apply auto-translation to. Default is `untranslated`. Available values:\n- \'untranslated\' – strings without an existing translation (default)\n- \'translated\' – strings that already have a translation (re-translation)\n- \'all\' – both untranslated and translated strings\n\n__Note:__ Cannot be used together with the deprecated `translateUntranslatedOnly`.',
2501
+ options: [
2502
+ {
2503
+ name: '-',
2504
+ value: ''
2505
+ },
2506
+ {
2507
+ name: 'untranslated',
2508
+ value: 'untranslated'
2509
+ },
2510
+ {
2511
+ name: 'translated',
2512
+ value: 'translated'
2513
+ },
2514
+ {
2515
+ name: 'all',
2516
+ value: 'all'
2517
+ }
2518
+ ]
2519
+ },
2520
+ {
2521
+ displayName: 'Translation Modified Before',
2522
+ name: 'dateTime:translationModifiedBefore',
2523
+ type: 'dateTime',
2524
+ default: '',
2525
+ description: 'Re-translates only if a string\'s current translation was modified prior to this date. Useful after modifying contextual resources like screenshots, style guides, or glossaries.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used with `scope: "untranslated"` or `translateUntranslatedOnly: true`.',
2526
+ placeholder: '2026-01-01T00:00:00+00:00'
2527
+ },
2528
+ {
2529
+ displayName: 'Replace Translations Option',
2530
+ name: 'replaceTranslationsOption',
2531
+ type: 'options',
2532
+ default: '',
2533
+ description: 'Defines whether to replace existing translations with new auto-translations. Default is `none`. Available values:\n- \'none\' – add the new translation alongside existing ones (default)\n- \'autoTranslated\' – replace auto-generated translations (TM, MT, AI). Human translations are kept\n- \'all\' – replace all existing translations\n\n__Note:__ Values other than `none` require `scope` to be `translated` or `all` (cannot be combined with `scope: "untranslated"` or `translateUntranslatedOnly: true`).',
2534
+ options: [
2535
+ {
2536
+ name: '-',
2537
+ value: ''
2538
+ },
2539
+ {
2540
+ name: 'none',
2541
+ value: 'none'
2542
+ },
2543
+ {
2544
+ name: 'autoTranslated',
2545
+ value: 'autoTranslated'
2546
+ },
2547
+ {
2548
+ name: 'all',
2549
+ value: 'all'
2550
+ }
2551
+ ]
2552
+ },
2553
+ {
2554
+ displayName: 'Reset Approval Status',
2555
+ name: 'resetApprovalStatus',
2556
+ type: 'boolean',
2557
+ default: false,
2558
+ description: 'Removes approval on existing translations when applying auto-translations. Default is `false`.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used together with `skipApprovedTranslations`, `autoApproveOption` (any value other than `none`), or when `replaceTranslationsOption` is `all` (replaced translations lose approval automatically). Cannot be used with `scope: "untranslated"` or `translateUntranslatedOnly: true`.'
2559
+ },
2560
+ {
2561
+ displayName: 'Minimum Match Ratio',
2562
+ name: 'minimumMatchRatio',
2563
+ type: 'number',
2564
+ default: 0,
2565
+ description: 'Add translation when TM match is greater or equal to minimum match ratio. This argument will be ignored if `translateWithPerfectMatchOnly` is set.\n\n__Note:__ Works only with TM auto-translation method',
2566
+ placeholder: '100'
2567
+ },
2568
+ {
2569
+ displayName: 'Translate With Perfect Match Only',
2570
+ name: 'translateWithPerfectMatchOnly',
2571
+ type: 'boolean',
2572
+ default: false,
2573
+ description: 'Applies auto-translation only for the strings with perfect match (source text and contextual information are identical)\n\n__Note:__ Works only with TM auto-translation method'
2574
+ },
2575
+ {
2576
+ displayName: 'Fallback Languages',
2577
+ name: 'fallbackLanguages',
2578
+ type: 'fixedCollection',
2579
+ default: {},
2580
+ description: 'Defines fallback languages mapping. The passed value should be an associative array containing both language id and array of fallback language ids:\n\n - `{languageId}` – Crowdin id for the specified language. Get via [List Supported Languages](#operation/api.languages.getMany)\n - `Array of strings` – an array containing fallback language ids. Get via [List Supported Languages](#operation/api.languages.getMany)\n\n__Note:__ Available only for TM Auto-Translation',
2581
+ placeholder: 'Add Field',
2582
+ options: [
2583
+ {
2584
+ displayName: 'Fields',
2585
+ name: 'fields',
2586
+ values: [
2587
+ {
2588
+ displayName: 'Language Id',
2589
+ name: 'languageId',
2590
+ type: 'options',
2591
+ typeOptions: {
2592
+ loadOptionsMethod: 'getLanguages'
2593
+ },
2594
+ default: '',
2595
+ description: undefined
2596
+ }
2597
+ ]
2598
+ }
2599
+ ]
2600
+ },
2601
+ {
2602
+ displayName: 'Custom Instruction',
2603
+ name: 'customInstruction',
2604
+ type: 'string',
2622
2605
  default: '',
2623
- description: undefined
2606
+ description: 'Custom instruction for AI auto-translation. This instruction will be appended to the AI prompt text.\n\n__Note:__ Available only for AI auto-translation method'
2624
2607
  }
2625
2608
  ]
2626
2609
  }
2627
- ]
2628
- },
2629
- {
2630
- displayName: 'Label Ids',
2631
- name: 'labelIds',
2632
- type: 'multiOptions',
2633
- default: [],
2634
- description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)',
2610
+ ],
2635
2611
  routing: {
2636
2612
  send: {
2637
- property: 'labelIds',
2638
- propertyInDotNotation: false,
2639
- type: 'body',
2640
- value: '={{ $value }}'
2641
- }
2642
- },
2643
- displayOptions: {
2644
- show: {
2645
- resource: [
2646
- 'translations'
2613
+ preSend: [
2614
+ preSend_1.normalizeRootBody
2647
2615
  ],
2648
- operation: [
2649
- 'api.projects.pre-translations.post'
2650
- ]
2651
- }
2652
- },
2653
- typeOptions: {
2654
- loadOptionsMethod: 'getProjectLabelsMulti',
2655
- loadOptionsDependsOn: [
2656
- 'projectId'
2657
- ]
2658
- }
2659
- },
2660
- {
2661
- displayName: 'Exclude Label Ids',
2662
- name: 'excludeLabelIds',
2663
- type: 'multiOptions',
2664
- default: [],
2665
- description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)',
2666
- routing: {
2667
- send: {
2668
- property: 'excludeLabelIds',
2616
+ property: '_body',
2669
2617
  propertyInDotNotation: false,
2670
2618
  type: 'body',
2671
2619
  value: '={{ $value }}'
2672
2620
  }
2673
- },
2674
- displayOptions: {
2675
- show: {
2676
- resource: [
2677
- 'translations'
2678
- ],
2679
- operation: [
2680
- 'api.projects.pre-translations.post'
2681
- ]
2682
- }
2683
- },
2684
- typeOptions: {
2685
- loadOptionsMethod: 'getProjectLabelsMulti',
2686
- loadOptionsDependsOn: [
2687
- 'projectId'
2688
- ]
2689
- }
2690
- },
2691
- {
2692
- displayName: 'Custom Instruction',
2693
- name: 'customInstruction',
2694
- type: 'string',
2695
- default: '',
2696
- description: 'Custom instruction for AI auto-translation. This instruction will be appended to the AI prompt text.\n\n__Note:__ Available only for AI auto-translation method',
2697
- routing: {
2698
- send: {
2699
- property: 'customInstruction',
2700
- propertyInDotNotation: false,
2701
- type: 'body',
2702
- value: '={{ $value || undefined }}'
2703
- }
2704
- },
2705
- displayOptions: {
2706
- show: {
2707
- resource: [
2708
- 'translations'
2709
- ],
2710
- operation: [
2711
- 'api.projects.pre-translations.post'
2712
- ]
2713
- }
2714
2621
  }
2715
2622
  },
2716
2623
  {
@@ -4561,31 +4468,6 @@ exports.translationsProperties = [
4561
4468
  value: 'finished'
4562
4469
  }
4563
4470
  ]
4564
- },
4565
- {
4566
- displayName: 'Priority',
4567
- name: 'priority',
4568
- type: 'options',
4569
- default: '',
4570
- description: 'Value for /priority',
4571
- options: [
4572
- {
4573
- name: '-',
4574
- value: ''
4575
- },
4576
- {
4577
- name: 'low',
4578
- value: 'low'
4579
- },
4580
- {
4581
- name: 'normal',
4582
- value: 'normal'
4583
- },
4584
- {
4585
- name: 'high',
4586
- value: 'high'
4587
- }
4588
- ]
4589
4471
  }
4590
4472
  ],
4591
4473
  routing: {