@wirecat/bitrix24-cli 0.3.0 → 0.5.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.
- package/CHANGELOG.md +130 -0
- package/README.md +84 -9
- package/dist/api-keys.d.ts +36 -9
- package/dist/api-keys.d.ts.map +1 -1
- package/dist/api-keys.js +139 -19
- package/dist/api-keys.js.map +1 -1
- package/dist/bin/b24.js +2 -2
- package/dist/bitrix/errors.js +1 -1
- package/dist/bitrix/errors.js.map +1 -1
- package/dist/bitrix/methods.d.ts.map +1 -1
- package/dist/bitrix/methods.js +7 -3
- package/dist/bitrix/methods.js.map +1 -1
- package/dist/bitrix/transport.d.ts +4 -7
- package/dist/bitrix/transport.d.ts.map +1 -1
- package/dist/bitrix/transport.js +29 -19
- package/dist/bitrix/transport.js.map +1 -1
- package/dist/body.d.ts +14 -0
- package/dist/body.d.ts.map +1 -0
- package/dist/body.js +44 -0
- package/dist/body.js.map +1 -0
- package/dist/bundle/{chunk-QIPTIUMJ.js → all-profiles-CANIDIDS.js} +12 -7
- package/dist/bundle/{anthropic-RHRAVHC2.js → anthropic-JUJB4DCF.js} +5 -5
- package/dist/bundle/{app-server-QIT6S7AZ.js → app-server-3V5Z4PTK.js} +68 -54
- package/dist/bundle/b24.js +18 -12
- package/dist/bundle/{bun-H6RSODZ3.js → bun-LKMV5TY7.js} +2 -2
- package/dist/bundle/{bun-sqlite-BO4LTQHX.js → bun-sqlite-S56EF74S.js} +3 -3
- package/dist/bundle/{chunk-D5S6QV6R.js → chunk-2I4KWS3H.js} +6 -6
- package/dist/bundle/chunk-36PO5NWY.js +147 -0
- package/dist/bundle/{chunk-ZIAQPTUS.js → chunk-42F7Q7V6.js} +3 -3
- package/dist/bundle/{chunk-6WY72XVQ.js → chunk-4D3K6GZW.js} +18 -4
- package/dist/bundle/chunk-5D4MJQ6X.js +22 -0
- package/dist/bundle/chunk-5JOPERVF.js +84 -0
- package/dist/bundle/chunk-6A4UPWDC.js +15 -0
- package/dist/bundle/{chunk-P33NDCDI.js → chunk-6MGWIZG4.js} +1 -1
- package/dist/bundle/{chunk-ZDQQCXFG.js → chunk-6YJTNZ7U.js} +13 -13
- package/dist/bundle/{chunk-MBDK4YXG.js → chunk-7FBFJ6B4.js} +4 -2
- package/dist/bundle/chunk-7VCMOTQP.js +55 -0
- package/dist/bundle/{chunk-P364PLIK.js → chunk-A5IMMGYU.js} +36 -34
- package/dist/bundle/{chunk-45AKJVKV.js → chunk-ASEHTBNK.js} +1 -1
- package/dist/bundle/{chunk-HGL63O5V.js → chunk-B6LPJYPQ.js} +2 -2
- package/dist/bundle/{chunk-LSPIOT6Z.js → chunk-BHEE2K6C.js} +7 -7
- package/dist/bundle/chunk-BYZQBE63.js +971 -0
- package/dist/bundle/{program-H3TGGRQ6.js → chunk-COKGNTDQ.js} +15761 -16685
- package/dist/bundle/{chunk-XJXONOB5.js → chunk-DVFYRQGE.js} +1 -1
- package/dist/bundle/{chunk-FLUEXJ4X.js → chunk-DVSIBZ3G.js} +1 -1
- package/dist/bundle/chunk-EJEIXC6Y.js +273 -0
- package/dist/bundle/chunk-EYTGCM44.js +130 -0
- package/dist/bundle/{chunk-IRV2PCQ2.js → chunk-EYYOKT23.js} +26 -26
- package/dist/bundle/{chunk-PH5FZX6E.js → chunk-FCWPIWSR.js} +2 -2
- package/dist/bundle/{chunk-YZ5LHE5Q.js → chunk-FSWRMQWX.js} +2 -2
- package/dist/bundle/{chunk-ADLS6FVG.js → chunk-FXBHOCJK.js} +1 -1
- package/dist/bundle/chunk-G5MW6RCM.js +723 -0
- package/dist/bundle/{chunk-VEWWAGTD.js → chunk-GLTKRLFT.js} +8 -8
- package/dist/bundle/chunk-GUUZQ7NE.js +581 -0
- package/dist/bundle/{chunk-QSNROIJL.js → chunk-H6RIPOOI.js} +42 -9
- package/dist/bundle/{chunk-H2ADPPSH.js → chunk-HGFNC4CR.js} +1819 -597
- package/dist/bundle/{chunk-7GRZAKBB.js → chunk-IERYD2N2.js} +6 -6
- package/dist/bundle/{chunk-N6FLBXZS.js → chunk-IGCLMEMB.js} +3 -3
- package/dist/bundle/{chunk-U5ACMCAQ.js → chunk-J7WCSZ2Q.js} +411 -919
- package/dist/bundle/{chunk-W5YAO5G5.js → chunk-JZYHQ4HB.js} +9 -4
- package/dist/bundle/{chunk-EVYSBZ3I.js → chunk-K4QM3X5F.js} +4 -4
- package/dist/bundle/{chunk-DTXERR44.js → chunk-KFSMY7SZ.js} +2 -2
- package/dist/bundle/{chunk-LRGYKOCP.js → chunk-KPEDH5T4.js} +1 -1
- package/dist/bundle/{chunk-XRFJWHY5.js → chunk-KUY7LII2.js} +4 -4
- package/dist/bundle/{chunk-QC53QBNC.js → chunk-LFXDHLFR.js} +3 -3
- package/dist/bundle/{chunk-CNNEA2M4.js → chunk-LGLT4JB6.js} +3 -3
- package/dist/bundle/{chunk-QGMDQ2PM.js → chunk-LM4OOBAW.js} +3 -3
- package/dist/bundle/chunk-M74BSKMA.js +234 -0
- package/dist/bundle/{chunk-2KCZ7BKW.js → chunk-MMMT6ORT.js} +11 -11
- package/dist/bundle/{chunk-WII44RXN.js → chunk-NGYD6QTE.js} +2 -2
- package/dist/bundle/{chunk-FOTREPNS.js → chunk-NO6QOPVT.js} +10 -19
- package/dist/bundle/chunk-O6XC7DZI.js +804 -0
- package/dist/bundle/chunk-OE3NFB53.js +64 -0
- package/dist/bundle/{chunk-XD4FRDSL.js → chunk-OUMFNB34.js} +13 -149
- package/dist/bundle/{chunk-ZGZT5S6B.js → chunk-P2RQTNVJ.js} +806 -850
- package/dist/bundle/{chunk-RRJNNPR4.js → chunk-PBIBGIZ7.js} +1 -1
- package/dist/bundle/{chunk-EXOOKUEA.js → chunk-Q6VQHTRW.js} +2 -2
- package/dist/bundle/{chunk-TE3FR6MI.js → chunk-QHBCNVUG.js} +5 -5
- package/dist/bundle/{chunk-SGRYYE4X.js → chunk-QNOXAQ6Y.js} +4 -4
- package/dist/bundle/{chunk-QQXH2OPB.js → chunk-R5F2O5GX.js} +15 -272
- package/dist/bundle/{chunk-SFRNX2TI.js → chunk-R5PBSKJL.js} +1 -1
- package/dist/bundle/{chunk-OTD2ZRXD.js → chunk-RS2BARUU.js} +4 -4
- package/dist/bundle/chunk-TG3DSPT5.js +14 -0
- package/dist/bundle/{chunk-BCF7P4FZ.js → chunk-U22JMKUO.js} +6 -125
- package/dist/bundle/chunk-U66Q5TVK.js +106 -0
- package/dist/bundle/{chunk-QMPN6WKD.js → chunk-UCHMQWON.js} +211 -89
- package/dist/bundle/{chunk-POC3V3AO.js → chunk-VMJS7FJZ.js} +526 -467
- package/dist/bundle/{chunk-FZL7F5NR.js → chunk-VMVAQHDC.js} +77 -615
- package/dist/bundle/{chunk-K3UIB6ZF.js → chunk-WWMCJFMT.js} +2 -2
- package/dist/bundle/{chunk-CXL33BFL.js → chunk-XTA5TN3H.js} +1 -1
- package/dist/bundle/{chunk-WTPMJYMD.js → chunk-XUHHBEA7.js} +652 -131
- package/dist/bundle/{chunk-WKRQ44EH.js → chunk-YDZHO4LT.js} +13 -13
- package/dist/bundle/{chunk-2SNUMZ7S.js → chunk-ZKINZFIT.js} +6 -6
- package/dist/bundle/{chunk-HAXNUIGQ.js → chunk-ZSQXSIFQ.js} +89 -39
- package/dist/bundle/{chunk-YYO7D2MO.js → chunk-ZZEHDIEG.js} +58 -54
- package/dist/bundle/command-contract-OQV6H7SR.js +36 -0
- package/dist/bundle/{decode-5ZPLTYV6.js → decode-QSTBX4MG.js} +3 -3
- package/dist/bundle/{echarts-J6LAPIX7.js → echarts-JZELFH2N.js} +2 -2
- package/dist/bundle/{embed-YG5LDHME.js → embed-4RIW2LVH.js} +4 -4
- package/dist/bundle/{embedder-7FNUA5OZ.js → embedder-SW7DTWSL.js} +7 -7
- package/dist/bundle/{first-run-JPZNWIJN.js → first-run-7AISOSOM.js} +8 -8
- package/dist/bundle/first-screen-NMHNFZ2B.js +34 -0
- package/dist/bundle/{instructions-AXWTQHMR.js → instructions-BZE5YUGG.js} +1 -1
- package/dist/bundle/{mcp-7F46P6AM.js → mcp-SDWHDJTY.js} +2 -2
- package/dist/bundle/{node-P4E63KXA.js → node-KM3CUABH.js} +9 -9
- package/dist/bundle/{node-CWKAIOEM.js → node-LTKZIO4U.js} +2 -2
- package/dist/bundle/{node-sqlite-LSEKVRDA.js → node-sqlite-HQ5PN2RH.js} +4 -4
- package/dist/bundle/{oauth-THYNLRLD.js → oauth-UH6FOZQL.js} +5 -5
- package/dist/bundle/{open-E47QYKFC.js → open-TSUP3XGL.js} +3 -3
- package/dist/bundle/{openai-EWSGC3BC.js → openai-GVEE52E3.js} +14 -14
- package/dist/bundle/{process-WKTEA3WE.js → process-AGXY76ZE.js} +1 -1
- package/dist/bundle/program-BI4A4HFJ.js +2247 -0
- package/dist/bundle/{prompt-CAQ7QR3U.js → prompt-NRSUY7FA.js} +3 -3
- package/dist/bundle/{recognize-6KGHNZC3.js → recognize-NPDPQ6PJ.js} +2 -2
- package/dist/bundle/{remote-3UO2WDC3.js → remote-HFASMVLB.js} +5 -5
- package/dist/bundle/{rerank-2JVDPZBX.js → rerank-TL6Z6F7K.js} +5 -5
- package/dist/bundle/{chunk-VL6SPMZV.js → serve-VB4DHDZQ.js} +8 -6
- package/dist/bundle/server-T5EDRPJI.js +68 -0
- package/dist/bundle/{chunk-ZEW4P6AH.js → server-Z6MW6C37.js} +50 -14
- package/dist/bundle/source-4IGO5J7E.js +237 -0
- package/dist/bundle/sqlite-runtime-YS4POY3W.js +17 -0
- package/dist/bundle/{state-7NH5G4XJ.js → state-ISZVVZGR.js} +4 -4
- package/dist/bundle/store-IZJBAKJV.js +58 -0
- package/dist/bundle/{store-7O4JQD2Z.js → store-L76MSQC3.js} +17 -12
- package/dist/bundle/store-PBTIB7BD.js +207 -0
- package/dist/bundle/store-maintenance-command-YFKII7TF.js +58 -0
- package/dist/bundle/writer-3O5EYMFE.js +214 -0
- package/dist/commands/api.d.ts.map +1 -1
- package/dist/commands/api.js +81 -30
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/crm-shared.d.ts +4 -0
- package/dist/commands/crm-shared.d.ts.map +1 -0
- package/dist/commands/crm-shared.js +94 -0
- package/dist/commands/crm-shared.js.map +1 -0
- package/dist/commands/crm-writes.d.ts +0 -1
- package/dist/commands/crm-writes.d.ts.map +1 -1
- package/dist/commands/crm-writes.js +43 -88
- package/dist/commands/crm-writes.js.map +1 -1
- package/dist/commands/crm.d.ts.map +1 -1
- package/dist/commands/crm.js +30 -48
- package/dist/commands/crm.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +1 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/write.d.ts +6 -6
- package/dist/commands/write.d.ts.map +1 -1
- package/dist/commands/write.js +11 -18
- package/dist/commands/write.js.map +1 -1
- package/dist/config.d.ts +0 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -8
- package/dist/config.js.map +1 -1
- package/dist/crm/capabilities.d.ts +7 -0
- package/dist/crm/capabilities.d.ts.map +1 -0
- package/dist/crm/capabilities.js +7 -0
- package/dist/crm/capabilities.js.map +1 -0
- package/dist/crm/conditions.d.ts +1 -1
- package/dist/crm/conditions.d.ts.map +1 -1
- package/dist/crm/conditions.js +4 -6
- package/dist/crm/conditions.js.map +1 -1
- package/dist/crm/custom-query.d.ts +19 -0
- package/dist/crm/custom-query.d.ts.map +1 -0
- package/dist/crm/custom-query.js +79 -0
- package/dist/crm/custom-query.js.map +1 -0
- package/dist/crm/deal.d.ts +4 -27
- package/dist/crm/deal.d.ts.map +1 -1
- package/dist/crm/deal.js +15 -48
- package/dist/crm/deal.js.map +1 -1
- package/dist/crm/fields.d.ts +20 -0
- package/dist/crm/fields.d.ts.map +1 -0
- package/dist/crm/fields.js +78 -0
- package/dist/crm/fields.js.map +1 -0
- package/dist/crm/items.d.ts +7 -1
- package/dist/crm/items.d.ts.map +1 -1
- package/dist/crm/items.js +21 -18
- package/dist/crm/items.js.map +1 -1
- package/dist/crm/lead.d.ts +5 -36
- package/dist/crm/lead.d.ts.map +1 -1
- package/dist/crm/lead.js +15 -61
- package/dist/crm/lead.js.map +1 -1
- package/dist/crm/organization.d.ts +1 -0
- package/dist/crm/organization.d.ts.map +1 -1
- package/dist/crm/person.d.ts +1 -0
- package/dist/crm/person.d.ts.map +1 -1
- package/dist/crm/pipelines.d.ts +5 -0
- package/dist/crm/pipelines.d.ts.map +1 -0
- package/dist/crm/pipelines.js +54 -0
- package/dist/crm/pipelines.js.map +1 -0
- package/dist/crm/product.d.ts.map +1 -1
- package/dist/crm/product.js +2 -2
- package/dist/crm/product.js.map +1 -1
- package/dist/crm/rest3-fields.d.ts +3 -0
- package/dist/crm/rest3-fields.d.ts.map +1 -0
- package/dist/crm/rest3-fields.js +38 -0
- package/dist/crm/rest3-fields.js.map +1 -0
- package/dist/crm/source.d.ts +15 -0
- package/dist/crm/source.d.ts.map +1 -0
- package/dist/crm/source.js +122 -0
- package/dist/crm/source.js.map +1 -0
- package/dist/crm/user.d.ts.map +1 -1
- package/dist/crm/user.js +2 -2
- package/dist/crm/user.js.map +1 -1
- package/dist/crm/values.d.ts +26 -5
- package/dist/crm/values.d.ts.map +1 -1
- package/dist/crm/values.js +40 -5
- package/dist/crm/values.js.map +1 -1
- package/dist/crm/writer.d.ts +9 -0
- package/dist/crm/writer.d.ts.map +1 -0
- package/dist/crm/writer.js +119 -0
- package/dist/crm/writer.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +53 -5
- package/dist/program.js.map +1 -1
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +6 -1
- package/dist/reasons.js.map +1 -1
- package/dist/store.d.ts +15 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +33 -0
- package/dist/store.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -6
- package/skills/bitrix24-cli/SKILL.md +16 -10
- package/dist/bundle/all-profiles-QJ444GSX.js +0 -24
- package/dist/bundle/chunk-XNHSPHUN.js +0 -48
- package/dist/bundle/command-contract-OKQOE6G4.js +0 -30
- package/dist/bundle/first-screen-VQM4MTS7.js +0 -28
- package/dist/bundle/mcp-5RSWNTHS.js +0 -160
- package/dist/bundle/mcp-J5R5A65I.js +0 -87
- package/dist/bundle/serve-ES7AG5IK.js +0 -19
- package/dist/bundle/server-5LE5LNUQ.js +0 -45
- package/dist/bundle/server-BU4VBM6S.js +0 -58
- package/dist/bundle/store-maintenance-command-UDVGEY2D.js +0 -47
- package/dist/commands/doctor.d.ts +0 -77
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -74
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -3
- package/dist/commands/mcp.d.ts.map +0 -1
- package/dist/commands/mcp.js +0 -97
- package/dist/commands/mcp.js.map +0 -1
- package/dist/crm/pipeline.d.ts +0 -17
- package/dist/crm/pipeline.d.ts.map +0 -1
- package/dist/crm/pipeline.js +0 -42
- package/dist/crm/pipeline.js.map +0 -1
- package/dist/crm/stage.d.ts +0 -20
- package/dist/crm/stage.d.ts.map +0 -1
- package/dist/crm/stage.js +0 -65
- package/dist/crm/stage.js.map +0 -1
- package/dist/mcp.d.ts +0 -29
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js +0 -99
- package/dist/mcp.js.map +0 -1
- /package/dist/bundle/{chunk-4PDYYS5K.js → chunk-ZQ3GWKDQ.js} +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { fieldNamed, optionOf } from "@wirecat/cli-core/crm";
|
|
3
|
+
import { isCustom, text, yes } from "./values.js";
|
|
4
|
+
const rows = (result) => {
|
|
5
|
+
const items = Array.isArray(result) ? result : result?.items;
|
|
6
|
+
return Array.isArray(items) ? items : [];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The portal's custom fields of one type, in two calls that need only read rights: REST 3.0's `field.list` has the
|
|
10
|
+
* title and whether a list can filter by it, and REST 2's `userfield.list` the real type and a list field's options,
|
|
11
|
+
* which `field.list` shows only as `int` (apidocs crm.<type>.field.custom.enum.list).
|
|
12
|
+
*/
|
|
13
|
+
export const loadFields = async (portal, type) => {
|
|
14
|
+
const described = await portal.call(`crm.${type}.field.list`, {
|
|
15
|
+
select: ["name", "title", "type", "multiple", "filterable"],
|
|
16
|
+
});
|
|
17
|
+
const custom = await portal.call(`crm.${type}.userfield.list`, { order: { SORT: "ASC" } });
|
|
18
|
+
const own = new Map(rows(custom.result).map((field) => [String(field.FIELD_NAME), field]));
|
|
19
|
+
return rows(described.result)
|
|
20
|
+
.filter((field) => isCustom(String(field.name)))
|
|
21
|
+
.map((field) => {
|
|
22
|
+
const code = String(field.name);
|
|
23
|
+
const user = own.get(code);
|
|
24
|
+
const options = Array.isArray(user?.LIST)
|
|
25
|
+
? user.LIST.flatMap((option) => {
|
|
26
|
+
const id = text(option.ID);
|
|
27
|
+
return id === null ? [] : [{ id, label: text(option.VALUE) ?? id }];
|
|
28
|
+
})
|
|
29
|
+
: undefined;
|
|
30
|
+
return {
|
|
31
|
+
code,
|
|
32
|
+
label: text(field.title),
|
|
33
|
+
type: text(user?.USER_TYPE_ID) ?? text(field.type) ?? "string",
|
|
34
|
+
multiple: yes(field.multiple),
|
|
35
|
+
filterable: yes(field.filterable),
|
|
36
|
+
...(options ? { options } : {}),
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
const optionLabel = (field, id) => field.options?.find((option) => option.id === String(id))?.label ?? String(id);
|
|
41
|
+
/** Custom values as `{ label, value }`, a list field's option ids turned into their labels. */
|
|
42
|
+
export const metadataOf = (custom, fields) => {
|
|
43
|
+
const byCode = new Map(fields.map((field) => [field.code, field]));
|
|
44
|
+
return Object.fromEntries(Object.entries(custom).map(([code, value]) => {
|
|
45
|
+
const field = byCode.get(code);
|
|
46
|
+
const label = field?.label ?? null;
|
|
47
|
+
if (!field?.options)
|
|
48
|
+
return [code, { label, value }];
|
|
49
|
+
if (Array.isArray(value))
|
|
50
|
+
return [
|
|
51
|
+
code,
|
|
52
|
+
{ label, value: value.map((one) => optionLabel(field, one)), option_id: value.map((one) => String(one)) },
|
|
53
|
+
];
|
|
54
|
+
return [code, { label, value: optionLabel(field, value), option_id: String(value) }];
|
|
55
|
+
}));
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* The custom values to write, by code, as typed: a list field's options as their ids, numbers as `field.list` types
|
|
59
|
+
* them (`int`), and a multiple field's values as an array.
|
|
60
|
+
*/
|
|
61
|
+
export const customValues = (fields, pairs) => {
|
|
62
|
+
const values = new Map();
|
|
63
|
+
for (const [name, value] of pairs) {
|
|
64
|
+
const field = fieldNamed(fields, name);
|
|
65
|
+
values.set(field, [...(values.get(field) ?? []), field.options ? Number(optionOf(field, value)) : value]);
|
|
66
|
+
}
|
|
67
|
+
return Object.fromEntries([...values].map(([field, all]) => {
|
|
68
|
+
if (field.multiple)
|
|
69
|
+
return [field.code, all];
|
|
70
|
+
if (all.length > 1)
|
|
71
|
+
throw new CliError("validation_error", `${field.label ?? field.code} holds one value; give --field once`, {
|
|
72
|
+
param: "--field",
|
|
73
|
+
field: field.code,
|
|
74
|
+
});
|
|
75
|
+
return [field.code, all[0]];
|
|
76
|
+
}));
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/crm/fields.ts"],"names":[],"mappings":"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"}
|
package/dist/crm/items.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BitrixTransport } from "../bitrix/transport.js";
|
|
2
2
|
import { type Condition } from "./conditions.js";
|
|
3
|
+
import { type Field } from "./fields.js";
|
|
3
4
|
import { type Metadata, type Raw } from "./values.js";
|
|
4
5
|
import { type Window } from "./walk.js";
|
|
5
6
|
/** A CRM object REST 3.0 serves as `crm.<type>.*`, and REST 2 as `crm.item.*` with its `entityTypeId`. */
|
|
@@ -14,7 +15,12 @@ export interface ItemType<T> {
|
|
|
14
15
|
nameOf: (item: T) => string | null;
|
|
15
16
|
map: (raw: Raw, metadata?: Metadata) => T;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
/** Custom fields a list selects beside its own, with the definitions that label them. */
|
|
19
|
+
export interface Custom {
|
|
20
|
+
codes: readonly string[];
|
|
21
|
+
fields: readonly Field[];
|
|
22
|
+
}
|
|
23
|
+
export declare const listItems: <T>(portal: BitrixTransport, type: ItemType<T>, conditions: readonly Condition[], window: Window, custom?: Custom) => Promise<{
|
|
18
24
|
items: T[];
|
|
19
25
|
has_more: boolean;
|
|
20
26
|
}>;
|
package/dist/crm/items.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../src/crm/items.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../src/crm/items.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,KAAK,SAAS,EAAwC,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,KAAK,KAAK,EAA0B,MAAM,aAAa,CAAA;AAChE,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,WAAW,CAAA;AAE7C,0GAA0G;AAC1G,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;IAC7C,YAAY,EAAE,MAAM,CAAA;IACpB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,uFAAuF;IACvF,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAA;IAClC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAA;CAC1C;AAaD,yFAAyF;AACzF,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;CACzB;AAED,eAAO,MAAM,SAAS,GAAU,CAAC,UACvB,eAAe,QACjB,QAAQ,CAAC,CAAC,CAAC,cACL,SAAS,SAAS,EAAE,UACxB,MAAM,WACN,MAAM;;;EA6Bf,CAAA;AAOD,6GAA6G;AAC7G,eAAO,MAAM,OAAO,GAAU,CAAC,UAAU,eAAe,QAAQ,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,KAAG,OAAO,CAAC,CAAC,CAYlG,CAAA;AAcD;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAU,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,UAChD,eAAe,QACjB,QAAQ,CAAC,CAAC,CAAC,aACN,MAAM,KAChB,OAAO,CAAC,MAAM,CAuBhB,CAAA"}
|
package/dist/crm/items.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { CliError, isCliError } from "@wirecat/cli-base";
|
|
2
|
+
import { foldName } from "@wirecat/cli-core";
|
|
2
3
|
import { needsRest2, rest2Filter, rest3Filter } from "./conditions.js";
|
|
3
|
-
import {
|
|
4
|
+
import { loadFields, metadataOf } from "./fields.js";
|
|
5
|
+
import { customFields } from "./values.js";
|
|
4
6
|
import { walk } from "./walk.js";
|
|
5
7
|
const REST3_PAGE = 1000;
|
|
6
8
|
const REST2_PAGE = 50;
|
|
@@ -10,28 +12,34 @@ const itemsOf = (result) => {
|
|
|
10
12
|
};
|
|
11
13
|
/** Newest first; REST 3.0 adds `id` itself for stable pages. */
|
|
12
14
|
const ORDER = { id: "DESC" };
|
|
13
|
-
export const listItems = async (portal, type, conditions, window) => {
|
|
15
|
+
export const listItems = async (portal, type, conditions, window, custom = { codes: [], fields: [] }) => {
|
|
16
|
+
const select = [...type.select, ...custom.codes];
|
|
14
17
|
const { items, has_more } = needsRest2(conditions)
|
|
15
18
|
? await walk(window, REST2_PAGE, async (start) => {
|
|
16
19
|
const answer = await portal.call("crm.item.list", {
|
|
17
20
|
entityTypeId: type.entityTypeId,
|
|
18
|
-
select
|
|
21
|
+
select,
|
|
19
22
|
filter: rest2Filter(conditions, { [type.words[0] ?? "title"]: type.words }),
|
|
20
23
|
order: ORDER,
|
|
21
24
|
start,
|
|
25
|
+
useOriginalUfNames: "Y",
|
|
22
26
|
});
|
|
23
27
|
return { rows: itemsOf(answer.result), more: answer.next !== undefined };
|
|
24
28
|
})
|
|
25
29
|
: await walk(window, REST3_PAGE, async (offset, limit) => {
|
|
26
30
|
const rows = itemsOf((await portal.call(`crm.${type.type}.list`, {
|
|
27
|
-
select
|
|
31
|
+
select,
|
|
28
32
|
filter: rest3Filter(conditions),
|
|
29
33
|
order: ORDER,
|
|
30
34
|
pagination: { limit, offset },
|
|
31
35
|
})).result);
|
|
32
36
|
return { rows, more: rows.length === limit };
|
|
33
37
|
});
|
|
34
|
-
return { items: items.map((raw) => type.map(raw)), has_more };
|
|
38
|
+
return { items: items.map((raw) => type.map(raw, metadataIn(raw, custom))), has_more };
|
|
39
|
+
};
|
|
40
|
+
const metadataIn = (raw, { codes, fields }) => {
|
|
41
|
+
const values = Object.entries(customFields(raw)).filter(([code]) => codes.includes(code));
|
|
42
|
+
return values.length ? metadataOf(Object.fromEntries(values), fields) : undefined;
|
|
35
43
|
};
|
|
36
44
|
/** One item, with the portal's custom fields, which REST 3.0 returns only when each is named in `select`. */
|
|
37
45
|
export const getItem = async (portal, type, id) => {
|
|
@@ -47,25 +55,20 @@ export const getItem = async (portal, type, id) => {
|
|
|
47
55
|
const custom = customFields(full.result?.item);
|
|
48
56
|
if (!Object.keys(custom).length)
|
|
49
57
|
return type.map(item);
|
|
50
|
-
|
|
51
|
-
return type.map(item, Object.fromEntries(Object.entries(custom).map(([code, value]) => [code, { label: labels.get(code) ?? null, value }])));
|
|
58
|
+
return type.map(item, metadataOf(custom, await fieldsOrNone(portal, type.type)));
|
|
52
59
|
};
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
* to edit CRM settings. Labels are extra, so a failed call leaves them out rather than failing `show`.
|
|
56
|
-
*/
|
|
57
|
-
const labelsOf = async (portal, type) => {
|
|
60
|
+
/** A webhook without the rights to read field definitions still shows the record, with codes for labels. */
|
|
61
|
+
const fieldsOrNone = async (portal, type) => {
|
|
58
62
|
try {
|
|
59
|
-
|
|
60
|
-
return new Map(itemsOf(answer.result).map((field) => [String(field.name), text(field.title)]));
|
|
63
|
+
return await loadFields(portal, type);
|
|
61
64
|
}
|
|
62
65
|
catch (error) {
|
|
63
|
-
if (isCliError(error) && error.code === "
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
if (isCliError(error) && error.code === "permission_error")
|
|
67
|
+
return [];
|
|
68
|
+
throw error;
|
|
66
69
|
}
|
|
67
70
|
};
|
|
68
|
-
const folded = (value) => value?.trim()
|
|
71
|
+
const folded = (value) => foldName(value?.trim() ?? "");
|
|
69
72
|
/**
|
|
70
73
|
* An id as it is, or a name matched whole against the portal's substring search; two matches are refused with both,
|
|
71
74
|
* never guessed (as cli-core's `pickPerson` refuses).
|
package/dist/crm/items.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.js","sourceRoot":"","sources":["../../src/crm/items.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"items.js","sourceRoot":"","sources":["../../src/crm/items.ts"],"names":[],"mappings":"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"}
|
package/dist/crm/lead.d.ts
CHANGED
|
@@ -1,39 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { FieldMap } from "./conditions.js";
|
|
1
|
+
import type { CrmItem, CrmPipeline } from "@wirecat/cli-core";
|
|
3
2
|
import type { ItemType } from "./items.js";
|
|
4
3
|
import { type Metadata, type Raw } from "./values.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
readonly organization_name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
10
|
-
readonly stage_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
11
|
-
readonly outcome: v.PicklistSchema<readonly ["open", "won", "lost"], undefined>;
|
|
12
|
-
readonly amount: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
|
|
13
|
-
readonly currency: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
14
|
-
readonly assigned_to: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
15
|
-
readonly organization_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
16
|
-
readonly person_ids: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
17
|
-
readonly phones: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
18
|
-
readonly type: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
19
|
-
readonly value: v.StringSchema<undefined>;
|
|
20
|
-
}, undefined>, undefined>, undefined>;
|
|
21
|
-
readonly emails: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
22
|
-
readonly type: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
23
|
-
readonly value: v.StringSchema<undefined>;
|
|
24
|
-
}, undefined>, undefined>, undefined>;
|
|
25
|
-
readonly source_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
26
|
-
readonly created_at: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.IsoTimestampAction<string, "an ISO 8601 time in UTC">, v.EndsWithAction<string, "Z", "an ISO 8601 time in UTC, ending in `Z`">]>, undefined>;
|
|
27
|
-
readonly updated_at: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.IsoTimestampAction<string, "an ISO 8601 time in UTC">, v.EndsWithAction<string, "Z", "an ISO 8601 time in UTC, ending in `Z`">]>, undefined>;
|
|
28
|
-
readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
29
|
-
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
|
|
30
|
-
readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
31
|
-
readonly value: v.UnknownSchema;
|
|
32
|
-
}, undefined>, undefined>, undefined>;
|
|
33
|
-
}, undefined>;
|
|
34
|
-
export type Lead = v.InferOutput<typeof leadSchema>;
|
|
35
|
-
export declare const LEAD_FIELDS: Record<string, FieldMap>;
|
|
36
|
-
/** Phones and emails come from REST 3.0 only; REST 2's crm.item.list leaves them out, so they are left out here too. */
|
|
37
|
-
export declare const fromBitrixLead: (raw: Raw, metadata?: Metadata) => Lead;
|
|
38
|
-
export declare const LEAD: ItemType<Lead>;
|
|
4
|
+
/** Bitrix24's leads have no pipelines, only the one list of lead stages: core gets one pipeline of b24's making. */
|
|
5
|
+
export declare const LEAD_PIPELINE: Omit<CrmPipeline, "stages">;
|
|
6
|
+
export declare const fromBitrixLead: (raw: Raw, metadata?: Metadata) => CrmItem;
|
|
7
|
+
export declare const LEAD: ItemType<CrmItem>;
|
|
39
8
|
//# sourceMappingURL=lead.d.ts.map
|
package/dist/crm/lead.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lead.d.ts","sourceRoot":"","sources":["../../src/crm/lead.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"lead.d.ts","sourceRoot":"","sources":["../../src/crm/lead.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAQ,MAAM,aAAa,CAAA;AAErF,oHAAoH;AACpH,eAAO,MAAM,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAsC,CAAA;AAE5F,eAAO,MAAM,cAAc,QAAS,GAAG,aAAa,QAAQ,KAAG,OAa7D,CAAA;AAEF,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,OAAO,CAoBlC,CAAA"}
|
package/dist/crm/lead.js
CHANGED
|
@@ -1,57 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export const
|
|
4
|
-
id: v.string(),
|
|
5
|
-
title: v.nullable(v.string()),
|
|
6
|
-
name: v.nullable(v.string()),
|
|
7
|
-
organization_name: v.nullable(v.string()),
|
|
8
|
-
stage_id: v.nullable(v.string()),
|
|
9
|
-
outcome: v.picklist(OUTCOMES),
|
|
10
|
-
amount: v.nullable(v.number()),
|
|
11
|
-
currency: v.nullable(v.string()),
|
|
12
|
-
assigned_to: v.nullable(v.string()),
|
|
13
|
-
organization_id: v.nullable(v.string()),
|
|
14
|
-
person_ids: v.array(v.string()),
|
|
15
|
-
phones: v.optional(v.array(contactSchema)),
|
|
16
|
-
emails: v.optional(v.array(contactSchema)),
|
|
17
|
-
source_id: v.nullable(v.string()),
|
|
18
|
-
created_at: nullableTime,
|
|
19
|
-
updated_at: nullableTime,
|
|
20
|
-
url: v.nullable(v.string()),
|
|
21
|
-
provider_metadata: metadataSchema,
|
|
22
|
-
});
|
|
23
|
-
export const LEAD_FIELDS = {
|
|
24
|
-
title: { field: "title", kind: "word" },
|
|
25
|
-
stage_id: { field: "stageId", kind: "text" },
|
|
26
|
-
outcome: { field: "stageSemanticId", kind: "outcome" },
|
|
27
|
-
amount: { field: "opportunity", kind: "number" },
|
|
28
|
-
currency: { field: "currencyId", kind: "text" },
|
|
29
|
-
assigned_to: { field: "assignedById", kind: "id" },
|
|
30
|
-
organization_id: { field: "companyId", kind: "id" },
|
|
31
|
-
source_id: { field: "sourceId", kind: "text" },
|
|
32
|
-
created_at: { field: "createdTime", kind: "time" },
|
|
33
|
-
updated_at: { field: "updatedTime", kind: "time" },
|
|
34
|
-
};
|
|
35
|
-
/** Phones and emails come from REST 3.0 only; REST 2's crm.item.list leaves them out, so they are left out here too. */
|
|
1
|
+
import { amountOf, epoch, id, ids, text } from "./values.js";
|
|
2
|
+
/** Bitrix24's leads have no pipelines, only the one list of lead stages: core gets one pipeline of b24's making. */
|
|
3
|
+
export const LEAD_PIPELINE = { externalId: "0", name: "Leads" };
|
|
36
4
|
export const fromBitrixLead = (raw, metadata) => ({
|
|
37
|
-
|
|
38
|
-
title: text(raw.title),
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
organization_id: id(raw.companyId),
|
|
47
|
-
person_ids: ids(raw.contactsId),
|
|
48
|
-
...(Array.isArray(raw.phone) ? { phones: contacts(raw.phone) } : {}),
|
|
49
|
-
...(Array.isArray(raw.email) ? { emails: contacts(raw.email) } : {}),
|
|
50
|
-
source_id: text(raw.sourceId),
|
|
51
|
-
created_at: time(raw.createdTime),
|
|
52
|
-
updated_at: time(raw.updatedTime),
|
|
5
|
+
externalId: id(raw.id) ?? "",
|
|
6
|
+
title: text(raw.title) ?? "",
|
|
7
|
+
pipeline: LEAD_PIPELINE.externalId,
|
|
8
|
+
stage: text(raw.stageId) ?? "",
|
|
9
|
+
...amountOf(raw.opportunity, raw.currencyId),
|
|
10
|
+
organization: id(raw.companyId),
|
|
11
|
+
people: ids(raw.contactsId).map((externalId) => ({ externalId, role: "contact" })),
|
|
12
|
+
createdAt: epoch(raw.createdTime),
|
|
13
|
+
updatedAt: epoch(raw.updatedTime),
|
|
53
14
|
url: text(raw.url),
|
|
54
|
-
|
|
15
|
+
assignee: id(raw.assignedById),
|
|
16
|
+
...(metadata ? { metadata } : {}),
|
|
55
17
|
});
|
|
56
18
|
export const LEAD = {
|
|
57
19
|
type: "lead",
|
|
@@ -60,23 +22,15 @@ export const LEAD = {
|
|
|
60
22
|
select: [
|
|
61
23
|
"id",
|
|
62
24
|
"title",
|
|
63
|
-
"name",
|
|
64
|
-
"secondName",
|
|
65
|
-
"lastName",
|
|
66
|
-
"companyTitle",
|
|
67
25
|
"stageId",
|
|
68
|
-
"stageSemanticId",
|
|
69
26
|
"opportunity",
|
|
70
27
|
"currencyId",
|
|
71
|
-
"assignedById",
|
|
72
28
|
"companyId",
|
|
73
29
|
"contactsId",
|
|
74
|
-
"phone",
|
|
75
|
-
"email",
|
|
76
|
-
"sourceId",
|
|
77
30
|
"createdTime",
|
|
78
31
|
"updatedTime",
|
|
79
32
|
"url",
|
|
33
|
+
"assignedById",
|
|
80
34
|
],
|
|
81
35
|
words: ["title"],
|
|
82
36
|
nameOf: (lead) => lead.title,
|
package/dist/crm/lead.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lead.js","sourceRoot":"","sources":["../../src/crm/lead.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lead.js","sourceRoot":"","sources":["../../src/crm/lead.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAA2B,IAAI,EAAE,MAAM,aAAa,CAAA;AAErF,oHAAoH;AACpH,MAAM,CAAC,MAAM,aAAa,GAAgC,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAE5F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,QAAmB,EAAW,EAAE,CAAC,CAAC;IACzE,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;IAC5B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;IAC5B,QAAQ,EAAE,aAAa,CAAC,UAAU;IAClC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;IAC9B,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC;IAC5C,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAkB,EAAE,CAAC,CAAC;IAC3F,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;IACjC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;IACjC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClB,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAClC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAsB;IACrC,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,CAAC;IACf,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE;QACN,IAAI;QACJ,OAAO;QACP,SAAS;QACT,aAAa;QACb,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,aAAa;QACb,aAAa;QACb,KAAK;QACL,cAAc;KACf;IACD,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK;IAC5B,GAAG,EAAE,cAAc;CACpB,CAAA"}
|
|
@@ -26,6 +26,7 @@ export declare const organizationSchema: v.StrictObjectSchema<{
|
|
|
26
26
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
|
|
27
27
|
readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
28
28
|
readonly value: v.UnknownSchema;
|
|
29
|
+
readonly option_id: v.OptionalSchema<v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, undefined>;
|
|
29
30
|
}, undefined>, undefined>, undefined>;
|
|
30
31
|
}, undefined>;
|
|
31
32
|
export type Organization = v.InferOutput<typeof organizationSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/crm/organization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAKL,KAAK,QAAQ,EAIb,KAAK,GAAG,EAGT,MAAM,aAAa,CAAA;AAEpB,wEAAwE;AACxE,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/crm/organization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAKL,KAAK,QAAQ,EAIb,KAAK,GAAG,EAGT,MAAM,aAAa,CAAA;AAEpB,wEAAwE;AACxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;aAe7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAOxD,CAAA;AAED,eAAO,MAAM,sBAAsB,QAAS,GAAG,aAAa,QAAQ,KAAG,YAerE,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY,CAsB/C,CAAA"}
|
package/dist/crm/person.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export declare const personSchema: v.StrictObjectSchema<{
|
|
|
25
25
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
|
|
26
26
|
readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
27
27
|
readonly value: v.UnknownSchema;
|
|
28
|
+
readonly option_id: v.OptionalSchema<v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, undefined>;
|
|
28
29
|
}, undefined>, undefined>, undefined>;
|
|
29
30
|
}, undefined>;
|
|
30
31
|
export type Person = v.InferOutput<typeof personSchema>;
|
package/dist/crm/person.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"person.d.ts","sourceRoot":"","sources":["../../src/crm/person.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAML,KAAK,QAAQ,EAGb,KAAK,GAAG,EAGT,MAAM,aAAa,CAAA;AAEpB,gEAAgE;AAChE,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"person.d.ts","sourceRoot":"","sources":["../../src/crm/person.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAML,KAAK,QAAQ,EAGb,KAAK,GAAG,EAGT,MAAM,aAAa,CAAA;AAEpB,gEAAgE;AAChE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;aAcvB,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,YAAY,CAAC,CAAA;AAEvD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAKlD,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAS,GAAG,aAAa,QAAQ,KAAG,MAkBhE,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAsBnC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CrmPipeline } from "@wirecat/cli-core";
|
|
2
|
+
import type { BitrixTransport } from "../bitrix/transport.js";
|
|
3
|
+
/** Deal pipelines are Bitrix24's deal categories, the default one id 0; leads get the one pipeline b24 makes them. */
|
|
4
|
+
export declare const bitrixPipelines: (portal: BitrixTransport, kind: "deal" | "lead") => Promise<CrmPipeline[]>;
|
|
5
|
+
//# sourceMappingURL=pipelines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../src/crm/pipelines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAoC7D,sHAAsH;AACtH,eAAO,MAAM,eAAe,WAAkB,eAAe,QAAQ,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,WAAW,EAAE,CAc3G,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { LEAD_PIPELINE } from "./lead.js";
|
|
2
|
+
import { number, outcomeOf, text } from "./values.js";
|
|
3
|
+
/** Lead stages are the `STATUS` directory; deal stages `DEAL_STAGE` for pipeline 0 and `DEAL_STAGE_<id>` for the rest. */
|
|
4
|
+
const directoryOf = (pipeline) => (pipeline === "0" ? "DEAL_STAGE" : `DEAL_STAGE_${pipeline}`);
|
|
5
|
+
/** One directory's stages, every page: REST 2 answers 50 rows at a time with `next`. */
|
|
6
|
+
const stagesOf = async (portal, directory) => {
|
|
7
|
+
const rows = [];
|
|
8
|
+
for (let start = 0;;) {
|
|
9
|
+
const answer = await portal.call("crm.status.list", {
|
|
10
|
+
filter: { ENTITY_ID: directory },
|
|
11
|
+
order: { SORT: "ASC" },
|
|
12
|
+
start,
|
|
13
|
+
});
|
|
14
|
+
if (Array.isArray(answer.result))
|
|
15
|
+
for (const row of answer.result)
|
|
16
|
+
rows.push(row);
|
|
17
|
+
if (answer.next === undefined || answer.next <= start)
|
|
18
|
+
break;
|
|
19
|
+
start = answer.next;
|
|
20
|
+
}
|
|
21
|
+
return rows.flatMap((raw) => {
|
|
22
|
+
const externalId = text(raw.STATUS_ID);
|
|
23
|
+
if (externalId === null)
|
|
24
|
+
return [];
|
|
25
|
+
const extra = (raw.EXTRA ?? {});
|
|
26
|
+
// The outcome comes from the stage's semantics, never its name (apidocs crm.status.fields).
|
|
27
|
+
return [
|
|
28
|
+
{
|
|
29
|
+
externalId,
|
|
30
|
+
name: text(raw.NAME) ?? externalId,
|
|
31
|
+
position: number(raw.SORT) ?? 0,
|
|
32
|
+
outcome: outcomeOf(raw.SEMANTICS ?? extra.SEMANTICS),
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
/** Deal pipelines are Bitrix24's deal categories, the default one id 0; leads get the one pipeline b24 makes them. */
|
|
38
|
+
export const bitrixPipelines = async (portal, kind) => {
|
|
39
|
+
if (kind === "lead")
|
|
40
|
+
return [{ ...LEAD_PIPELINE, stages: await stagesOf(portal, "STATUS") }];
|
|
41
|
+
const answer = await portal.call("crm.category.list", { entityTypeId: 2 });
|
|
42
|
+
const categories = answer.result?.categories;
|
|
43
|
+
const pipelines = [];
|
|
44
|
+
for (const raw of Array.isArray(categories) ? categories : []) {
|
|
45
|
+
const externalId = text(raw.id) ?? "0";
|
|
46
|
+
pipelines.push({
|
|
47
|
+
externalId,
|
|
48
|
+
name: text(raw.name) ?? `Pipeline ${externalId}`,
|
|
49
|
+
stages: await stagesOf(portal, directoryOf(externalId)),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return pipelines;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=pipelines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../../src/crm/pipelines.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../src/crm/product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,iBAAiB,CAAA;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../src/crm/product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAyB,KAAK,GAAG,EAAa,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,WAAW,CAAA;AAE7C,eAAO,MAAM,aAAa;;;;;;;aAOxB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,eAAO,MAAM,cAAc;aACzB,IAAI;iBAAI,KAAK,EAAE,MAAM;iBAAE,IAAI,EAAE,MAAM;;aACnC,MAAM;iBAAI,KAAK,EAAE,QAAQ;iBAAE,IAAI,EAAE,MAAM;;aACvC,UAAU;iBAAI,KAAK,EAAE,YAAY;iBAAE,IAAI,EAAE,IAAI;;CACrC,CAAA;AAIV,uGAAuG;AACvG,eAAO,MAAM,iBAAiB,QAAS,GAAG,KAAG,OAO3C,CAAA;AAKF,eAAO,MAAM,YAAY,WAAkB,eAAe,cAAc,SAAS,SAAS,EAAE,UAAU,MAAM;;;;;;;;;;EAW3G,CAAA;AAED,eAAO,MAAM,UAAU,WAAkB,eAAe,aAAa,MAAM,KAAG,OAAO,CAAC,OAAO,CAC2B,CAAA"}
|
package/dist/crm/product.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
2
|
import { rest2Filter } from "./conditions.js";
|
|
3
|
-
import { id, number, text, yes } from "./values.js";
|
|
3
|
+
import { id, number, numericId, text, yes } from "./values.js";
|
|
4
4
|
import { walk } from "./walk.js";
|
|
5
5
|
export const productSchema = v.strictObject({
|
|
6
6
|
id: v.string(),
|
|
@@ -38,5 +38,5 @@ export const listProducts = async (portal, conditions, window) => {
|
|
|
38
38
|
});
|
|
39
39
|
return { items: items.map(fromBitrixProduct), has_more };
|
|
40
40
|
};
|
|
41
|
-
export const getProduct = async (portal, reference) => fromBitrixProduct((await portal.call("crm.product.get", { id:
|
|
41
|
+
export const getProduct = async (portal, reference) => fromBitrixProduct((await portal.call("crm.product.get", { id: numericId(reference, "products show") })).result);
|
|
42
42
|
//# sourceMappingURL=product.js.map
|
package/dist/crm/product.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product.js","sourceRoot":"","sources":["../../src/crm/product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAkB,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,EAAY,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"product.js","sourceRoot":"","sources":["../../src/crm/product.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest3-fields.d.ts","sourceRoot":"","sources":["../../src/crm/rest3-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQ1C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CA8B7E,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The REST 3.0 fields b24 may name, per type, from the field pages: REST 3.0 refuses the whole call over one unknown
|
|
3
|
+
* field (BITRIX_REST_V3_EXCEPTION_UNKNOWNDTOPROPERTYEXCEPTION, seen live 2026-11-06).
|
|
4
|
+
* https://apidocs.bitrix24.com/api-reference/crm/rest-v3/items/fields-deal.html (and fields-lead, -contact, -company)
|
|
5
|
+
*/
|
|
6
|
+
const COMMON = ["id", "title", "createdTime", "updatedTime", "assignedById", "url", "phone", "email"];
|
|
7
|
+
export const REST3_FIELDS = {
|
|
8
|
+
deal: [
|
|
9
|
+
...COMMON,
|
|
10
|
+
"categoryId",
|
|
11
|
+
"stageId",
|
|
12
|
+
"stageSemanticId",
|
|
13
|
+
"opportunity",
|
|
14
|
+
"currencyId",
|
|
15
|
+
"companyId",
|
|
16
|
+
"contactsId",
|
|
17
|
+
"closeTime",
|
|
18
|
+
"sourceId",
|
|
19
|
+
"typeId",
|
|
20
|
+
],
|
|
21
|
+
lead: [
|
|
22
|
+
...COMMON,
|
|
23
|
+
"name",
|
|
24
|
+
"secondName",
|
|
25
|
+
"lastName",
|
|
26
|
+
"companyTitle",
|
|
27
|
+
"stageId",
|
|
28
|
+
"stageSemanticId",
|
|
29
|
+
"opportunity",
|
|
30
|
+
"currencyId",
|
|
31
|
+
"companyId",
|
|
32
|
+
"contactsId",
|
|
33
|
+
"sourceId",
|
|
34
|
+
],
|
|
35
|
+
contact: [...COMMON, "name", "secondName", "lastName", "post", "companyId", "companiesId", "typeId", "sourceId"],
|
|
36
|
+
company: [...COMMON, "typeId", "industryId", "revenue", "currencyId", "contactsId"],
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=rest3-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest3-fields.js","sourceRoot":"","sources":["../../src/crm/rest3-fields.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AACrG,MAAM,CAAC,MAAM,YAAY,GAAyD;IAChF,IAAI,EAAE;QACJ,GAAG,MAAM;QACT,YAAY;QACZ,SAAS;QACT,iBAAiB;QACjB,aAAa;QACb,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,WAAW;QACX,UAAU;QACV,QAAQ;KACT;IACD,IAAI,EAAE;QACJ,GAAG,MAAM;QACT,MAAM;QACN,YAAY;QACZ,UAAU;QACV,cAAc;QACd,SAAS;QACT,iBAAiB;QACjB,aAAa;QACb,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,UAAU;KACX;IACD,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC;IAChH,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC;CACpF,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CrmField, CrmItem, CrmKind } from "@wirecat/cli-core";
|
|
2
|
+
import type { CrmSource } from "@wirecat/cli-core/crm";
|
|
3
|
+
import type { BitrixTransport } from "../bitrix/transport.js";
|
|
4
|
+
export interface BitrixCrmSource extends CrmSource {
|
|
5
|
+
/** One deal or lead as the portal holds it now, custom fields included: what a write answers. */
|
|
6
|
+
item(kind: "deal" | "lead", externalId: string): Promise<CrmItem>;
|
|
7
|
+
/** The portal's custom fields of a kind, read once per source. */
|
|
8
|
+
fields(kind: CrmKind): Promise<CrmField[]>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The portal's CRM for core's sync: REST 3.0 lists by id with `updatedTime` for changes, since a webhook gets no
|
|
12
|
+
* event feed, and a list of every id to find deletions.
|
|
13
|
+
*/
|
|
14
|
+
export declare const bitrixCrmSource: (portal: () => BitrixTransport, now?: () => number) => BitrixCrmSource;
|
|
15
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/crm/source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAA0C,MAAM,mBAAmB,CAAA;AAC3G,OAAO,KAAK,EAAyB,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAiD7D,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,iGAAiG;IACjG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACjE,kEAAkE;IAClE,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;CAC3C;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,WAAY,MAAM,eAAe,QAAO,MAAM,MAAM,KAAc,eAyE7F,CAAA"}
|