UNPKG

@bitrix24/b24jssdk

Version:

Bitrix24 REST API JavaScript SDK

1 lines • 6.34 kB
{"version":3,"file":"parse-row.mjs","sources":["../../../../../src/core/interaction/batch/parse-row.ts"],"sourcesContent":["import type {\n BatchCommandsArrayUniversal,\n BatchCommandsObjectUniversal,\n BatchCommandV3, BatchNamedCommandsUniversal,\n CommandObject,\n CommandTuple\n} from '../../../types/http'\nimport { SdkError } from '../../sdk-error'\n\n/**\n * Class for formatting/parsing a set of Batch commands\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class ParseRow {\n public static getBatchCommand(\n row: CommandObject | CommandTuple,\n options: {\n parallelDefaultValue: boolean\n asDefaultValue?: string\n }\n ): BatchCommandV3 {\n if (row) {\n if (typeof row === 'object' && 'method' in row && typeof row.method === 'string') {\n return {\n method: row.method,\n // `?? {}` because `params` is optional on both command shapes while\n // `query` is not optional to the portal: it reads every top-level entry\n // of a v3 batch body as a command and rejects the WHOLE batch with\n // `INVALIDSELECTEXCEPTION` when one of them has no `query` — measured,\n // and one bad entry is enough to take the others down with it.\n // `JSON.stringify` drops an `undefined` value, so leaving it undefined\n // is not \"sending an empty query\", it is sending no key at all.\n query: row.params ?? {},\n as: row.as ?? options.asDefaultValue,\n parallel: row.parallel ?? options.parallelDefaultValue\n }\n }\n\n if (Array.isArray(row) && row.length > 0 && typeof row[0] === 'string') {\n return {\n method: row[0],\n // Same reason as above — `['rest.scope.list']` is a valid tuple.\n query: row[1] ?? {},\n as: options.asDefaultValue,\n parallel: options.parallelDefaultValue\n }\n }\n }\n\n // Neither half is serialised whole: an `SdkError` description is NOT run\n // through `redactSensitiveParams` (AGENTS.md), so whatever lands here\n // travels into logs and failure reports unscrubbed.\n //\n // `options` is named field by field — an earlier revision of this change put\n // the caller's `logger` in there and proved the hazard is not hypothetical.\n // `row` is the caller's own command, and this path is reached by exactly the\n // mistake that carries arguments: a mistyped `method` beside a populated\n // `params`, whose values are business data and, measured, can be an `auth`\n // token. Only its shape is described — the key names, and the method if it\n // is a string — which is what a reader needs to find the bad command.\n // `getters` and a `toJSON` on the row are never invoked.\n const { parallelDefaultValue, asDefaultValue } = options\n const rowShape = (row && 'object' === typeof row)\n ? {\n keys: Object.keys(row).join(', '),\n ...(Array.isArray(row)\n ? { length: row.length }\n : { method: 'string' === typeof (row as { method?: unknown }).method ? (row as { method: string }).method : undefined })\n }\n : { type: typeof row }\n\n throw new SdkError({\n code: 'JSSDK_INTERACTION_BATCH_ROW_FAIL',\n description: `There were difficulties parsing the command for batch.\\n${JSON.stringify({\n row: rowShape, options: { parallelDefaultValue, asDefaultValue }\n })}`,\n status: 500\n })\n }\n\n public static getMethodsFromCommands(\n calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal\n ): string[] {\n const result: string[] = []\n const optsFake = {\n parallelDefaultValue: false\n }\n\n if (Array.isArray(calls)) {\n calls.forEach((row) => {\n const command = ParseRow.getBatchCommand(row, optsFake)\n result.push(command.method)\n })\n } else {\n Object.entries(calls).forEach(([index, row]) => {\n const command = ParseRow.getBatchCommand(row, { ...optsFake, asDefaultValue: index })\n result.push(command.method)\n })\n }\n\n return result\n }\n}\n"],"names":[],"mappings":"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"}