@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.
Files changed (255) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +84 -9
  3. package/dist/api-keys.d.ts +36 -9
  4. package/dist/api-keys.d.ts.map +1 -1
  5. package/dist/api-keys.js +139 -19
  6. package/dist/api-keys.js.map +1 -1
  7. package/dist/bin/b24.js +2 -2
  8. package/dist/bitrix/errors.js +1 -1
  9. package/dist/bitrix/errors.js.map +1 -1
  10. package/dist/bitrix/methods.d.ts.map +1 -1
  11. package/dist/bitrix/methods.js +7 -3
  12. package/dist/bitrix/methods.js.map +1 -1
  13. package/dist/bitrix/transport.d.ts +4 -7
  14. package/dist/bitrix/transport.d.ts.map +1 -1
  15. package/dist/bitrix/transport.js +29 -19
  16. package/dist/bitrix/transport.js.map +1 -1
  17. package/dist/body.d.ts +14 -0
  18. package/dist/body.d.ts.map +1 -0
  19. package/dist/body.js +44 -0
  20. package/dist/body.js.map +1 -0
  21. package/dist/bundle/{chunk-QIPTIUMJ.js → all-profiles-CANIDIDS.js} +12 -7
  22. package/dist/bundle/{anthropic-RHRAVHC2.js → anthropic-JUJB4DCF.js} +5 -5
  23. package/dist/bundle/{app-server-QIT6S7AZ.js → app-server-3V5Z4PTK.js} +68 -54
  24. package/dist/bundle/b24.js +18 -12
  25. package/dist/bundle/{bun-H6RSODZ3.js → bun-LKMV5TY7.js} +2 -2
  26. package/dist/bundle/{bun-sqlite-BO4LTQHX.js → bun-sqlite-S56EF74S.js} +3 -3
  27. package/dist/bundle/{chunk-D5S6QV6R.js → chunk-2I4KWS3H.js} +6 -6
  28. package/dist/bundle/chunk-36PO5NWY.js +147 -0
  29. package/dist/bundle/{chunk-ZIAQPTUS.js → chunk-42F7Q7V6.js} +3 -3
  30. package/dist/bundle/{chunk-6WY72XVQ.js → chunk-4D3K6GZW.js} +18 -4
  31. package/dist/bundle/chunk-5D4MJQ6X.js +22 -0
  32. package/dist/bundle/chunk-5JOPERVF.js +84 -0
  33. package/dist/bundle/chunk-6A4UPWDC.js +15 -0
  34. package/dist/bundle/{chunk-P33NDCDI.js → chunk-6MGWIZG4.js} +1 -1
  35. package/dist/bundle/{chunk-ZDQQCXFG.js → chunk-6YJTNZ7U.js} +13 -13
  36. package/dist/bundle/{chunk-MBDK4YXG.js → chunk-7FBFJ6B4.js} +4 -2
  37. package/dist/bundle/chunk-7VCMOTQP.js +55 -0
  38. package/dist/bundle/{chunk-P364PLIK.js → chunk-A5IMMGYU.js} +36 -34
  39. package/dist/bundle/{chunk-45AKJVKV.js → chunk-ASEHTBNK.js} +1 -1
  40. package/dist/bundle/{chunk-HGL63O5V.js → chunk-B6LPJYPQ.js} +2 -2
  41. package/dist/bundle/{chunk-LSPIOT6Z.js → chunk-BHEE2K6C.js} +7 -7
  42. package/dist/bundle/chunk-BYZQBE63.js +971 -0
  43. package/dist/bundle/{program-H3TGGRQ6.js → chunk-COKGNTDQ.js} +15761 -16685
  44. package/dist/bundle/{chunk-XJXONOB5.js → chunk-DVFYRQGE.js} +1 -1
  45. package/dist/bundle/{chunk-FLUEXJ4X.js → chunk-DVSIBZ3G.js} +1 -1
  46. package/dist/bundle/chunk-EJEIXC6Y.js +273 -0
  47. package/dist/bundle/chunk-EYTGCM44.js +130 -0
  48. package/dist/bundle/{chunk-IRV2PCQ2.js → chunk-EYYOKT23.js} +26 -26
  49. package/dist/bundle/{chunk-PH5FZX6E.js → chunk-FCWPIWSR.js} +2 -2
  50. package/dist/bundle/{chunk-YZ5LHE5Q.js → chunk-FSWRMQWX.js} +2 -2
  51. package/dist/bundle/{chunk-ADLS6FVG.js → chunk-FXBHOCJK.js} +1 -1
  52. package/dist/bundle/chunk-G5MW6RCM.js +723 -0
  53. package/dist/bundle/{chunk-VEWWAGTD.js → chunk-GLTKRLFT.js} +8 -8
  54. package/dist/bundle/chunk-GUUZQ7NE.js +581 -0
  55. package/dist/bundle/{chunk-QSNROIJL.js → chunk-H6RIPOOI.js} +42 -9
  56. package/dist/bundle/{chunk-H2ADPPSH.js → chunk-HGFNC4CR.js} +1819 -597
  57. package/dist/bundle/{chunk-7GRZAKBB.js → chunk-IERYD2N2.js} +6 -6
  58. package/dist/bundle/{chunk-N6FLBXZS.js → chunk-IGCLMEMB.js} +3 -3
  59. package/dist/bundle/{chunk-U5ACMCAQ.js → chunk-J7WCSZ2Q.js} +411 -919
  60. package/dist/bundle/{chunk-W5YAO5G5.js → chunk-JZYHQ4HB.js} +9 -4
  61. package/dist/bundle/{chunk-EVYSBZ3I.js → chunk-K4QM3X5F.js} +4 -4
  62. package/dist/bundle/{chunk-DTXERR44.js → chunk-KFSMY7SZ.js} +2 -2
  63. package/dist/bundle/{chunk-LRGYKOCP.js → chunk-KPEDH5T4.js} +1 -1
  64. package/dist/bundle/{chunk-XRFJWHY5.js → chunk-KUY7LII2.js} +4 -4
  65. package/dist/bundle/{chunk-QC53QBNC.js → chunk-LFXDHLFR.js} +3 -3
  66. package/dist/bundle/{chunk-CNNEA2M4.js → chunk-LGLT4JB6.js} +3 -3
  67. package/dist/bundle/{chunk-QGMDQ2PM.js → chunk-LM4OOBAW.js} +3 -3
  68. package/dist/bundle/chunk-M74BSKMA.js +234 -0
  69. package/dist/bundle/{chunk-2KCZ7BKW.js → chunk-MMMT6ORT.js} +11 -11
  70. package/dist/bundle/{chunk-WII44RXN.js → chunk-NGYD6QTE.js} +2 -2
  71. package/dist/bundle/{chunk-FOTREPNS.js → chunk-NO6QOPVT.js} +10 -19
  72. package/dist/bundle/chunk-O6XC7DZI.js +804 -0
  73. package/dist/bundle/chunk-OE3NFB53.js +64 -0
  74. package/dist/bundle/{chunk-XD4FRDSL.js → chunk-OUMFNB34.js} +13 -149
  75. package/dist/bundle/{chunk-ZGZT5S6B.js → chunk-P2RQTNVJ.js} +806 -850
  76. package/dist/bundle/{chunk-RRJNNPR4.js → chunk-PBIBGIZ7.js} +1 -1
  77. package/dist/bundle/{chunk-EXOOKUEA.js → chunk-Q6VQHTRW.js} +2 -2
  78. package/dist/bundle/{chunk-TE3FR6MI.js → chunk-QHBCNVUG.js} +5 -5
  79. package/dist/bundle/{chunk-SGRYYE4X.js → chunk-QNOXAQ6Y.js} +4 -4
  80. package/dist/bundle/{chunk-QQXH2OPB.js → chunk-R5F2O5GX.js} +15 -272
  81. package/dist/bundle/{chunk-SFRNX2TI.js → chunk-R5PBSKJL.js} +1 -1
  82. package/dist/bundle/{chunk-OTD2ZRXD.js → chunk-RS2BARUU.js} +4 -4
  83. package/dist/bundle/chunk-TG3DSPT5.js +14 -0
  84. package/dist/bundle/{chunk-BCF7P4FZ.js → chunk-U22JMKUO.js} +6 -125
  85. package/dist/bundle/chunk-U66Q5TVK.js +106 -0
  86. package/dist/bundle/{chunk-QMPN6WKD.js → chunk-UCHMQWON.js} +211 -89
  87. package/dist/bundle/{chunk-POC3V3AO.js → chunk-VMJS7FJZ.js} +526 -467
  88. package/dist/bundle/{chunk-FZL7F5NR.js → chunk-VMVAQHDC.js} +77 -615
  89. package/dist/bundle/{chunk-K3UIB6ZF.js → chunk-WWMCJFMT.js} +2 -2
  90. package/dist/bundle/{chunk-CXL33BFL.js → chunk-XTA5TN3H.js} +1 -1
  91. package/dist/bundle/{chunk-WTPMJYMD.js → chunk-XUHHBEA7.js} +652 -131
  92. package/dist/bundle/{chunk-WKRQ44EH.js → chunk-YDZHO4LT.js} +13 -13
  93. package/dist/bundle/{chunk-2SNUMZ7S.js → chunk-ZKINZFIT.js} +6 -6
  94. package/dist/bundle/{chunk-HAXNUIGQ.js → chunk-ZSQXSIFQ.js} +89 -39
  95. package/dist/bundle/{chunk-YYO7D2MO.js → chunk-ZZEHDIEG.js} +58 -54
  96. package/dist/bundle/command-contract-OQV6H7SR.js +36 -0
  97. package/dist/bundle/{decode-5ZPLTYV6.js → decode-QSTBX4MG.js} +3 -3
  98. package/dist/bundle/{echarts-J6LAPIX7.js → echarts-JZELFH2N.js} +2 -2
  99. package/dist/bundle/{embed-YG5LDHME.js → embed-4RIW2LVH.js} +4 -4
  100. package/dist/bundle/{embedder-7FNUA5OZ.js → embedder-SW7DTWSL.js} +7 -7
  101. package/dist/bundle/{first-run-JPZNWIJN.js → first-run-7AISOSOM.js} +8 -8
  102. package/dist/bundle/first-screen-NMHNFZ2B.js +34 -0
  103. package/dist/bundle/{instructions-AXWTQHMR.js → instructions-BZE5YUGG.js} +1 -1
  104. package/dist/bundle/{mcp-7F46P6AM.js → mcp-SDWHDJTY.js} +2 -2
  105. package/dist/bundle/{node-P4E63KXA.js → node-KM3CUABH.js} +9 -9
  106. package/dist/bundle/{node-CWKAIOEM.js → node-LTKZIO4U.js} +2 -2
  107. package/dist/bundle/{node-sqlite-LSEKVRDA.js → node-sqlite-HQ5PN2RH.js} +4 -4
  108. package/dist/bundle/{oauth-THYNLRLD.js → oauth-UH6FOZQL.js} +5 -5
  109. package/dist/bundle/{open-E47QYKFC.js → open-TSUP3XGL.js} +3 -3
  110. package/dist/bundle/{openai-EWSGC3BC.js → openai-GVEE52E3.js} +14 -14
  111. package/dist/bundle/{process-WKTEA3WE.js → process-AGXY76ZE.js} +1 -1
  112. package/dist/bundle/program-BI4A4HFJ.js +2247 -0
  113. package/dist/bundle/{prompt-CAQ7QR3U.js → prompt-NRSUY7FA.js} +3 -3
  114. package/dist/bundle/{recognize-6KGHNZC3.js → recognize-NPDPQ6PJ.js} +2 -2
  115. package/dist/bundle/{remote-3UO2WDC3.js → remote-HFASMVLB.js} +5 -5
  116. package/dist/bundle/{rerank-2JVDPZBX.js → rerank-TL6Z6F7K.js} +5 -5
  117. package/dist/bundle/{chunk-VL6SPMZV.js → serve-VB4DHDZQ.js} +8 -6
  118. package/dist/bundle/server-T5EDRPJI.js +68 -0
  119. package/dist/bundle/{chunk-ZEW4P6AH.js → server-Z6MW6C37.js} +50 -14
  120. package/dist/bundle/source-4IGO5J7E.js +237 -0
  121. package/dist/bundle/sqlite-runtime-YS4POY3W.js +17 -0
  122. package/dist/bundle/{state-7NH5G4XJ.js → state-ISZVVZGR.js} +4 -4
  123. package/dist/bundle/store-IZJBAKJV.js +58 -0
  124. package/dist/bundle/{store-7O4JQD2Z.js → store-L76MSQC3.js} +17 -12
  125. package/dist/bundle/store-PBTIB7BD.js +207 -0
  126. package/dist/bundle/store-maintenance-command-YFKII7TF.js +58 -0
  127. package/dist/bundle/writer-3O5EYMFE.js +214 -0
  128. package/dist/commands/api.d.ts.map +1 -1
  129. package/dist/commands/api.js +81 -30
  130. package/dist/commands/api.js.map +1 -1
  131. package/dist/commands/crm-shared.d.ts +4 -0
  132. package/dist/commands/crm-shared.d.ts.map +1 -0
  133. package/dist/commands/crm-shared.js +94 -0
  134. package/dist/commands/crm-shared.js.map +1 -0
  135. package/dist/commands/crm-writes.d.ts +0 -1
  136. package/dist/commands/crm-writes.d.ts.map +1 -1
  137. package/dist/commands/crm-writes.js +43 -88
  138. package/dist/commands/crm-writes.js.map +1 -1
  139. package/dist/commands/crm.d.ts.map +1 -1
  140. package/dist/commands/crm.js +30 -48
  141. package/dist/commands/crm.js.map +1 -1
  142. package/dist/commands/session.d.ts.map +1 -1
  143. package/dist/commands/session.js +1 -0
  144. package/dist/commands/session.js.map +1 -1
  145. package/dist/commands/write.d.ts +6 -6
  146. package/dist/commands/write.d.ts.map +1 -1
  147. package/dist/commands/write.js +11 -18
  148. package/dist/commands/write.js.map +1 -1
  149. package/dist/config.d.ts +0 -5
  150. package/dist/config.d.ts.map +1 -1
  151. package/dist/config.js +6 -8
  152. package/dist/config.js.map +1 -1
  153. package/dist/crm/capabilities.d.ts +7 -0
  154. package/dist/crm/capabilities.d.ts.map +1 -0
  155. package/dist/crm/capabilities.js +7 -0
  156. package/dist/crm/capabilities.js.map +1 -0
  157. package/dist/crm/conditions.d.ts +1 -1
  158. package/dist/crm/conditions.d.ts.map +1 -1
  159. package/dist/crm/conditions.js +4 -6
  160. package/dist/crm/conditions.js.map +1 -1
  161. package/dist/crm/custom-query.d.ts +19 -0
  162. package/dist/crm/custom-query.d.ts.map +1 -0
  163. package/dist/crm/custom-query.js +79 -0
  164. package/dist/crm/custom-query.js.map +1 -0
  165. package/dist/crm/deal.d.ts +4 -27
  166. package/dist/crm/deal.d.ts.map +1 -1
  167. package/dist/crm/deal.js +15 -48
  168. package/dist/crm/deal.js.map +1 -1
  169. package/dist/crm/fields.d.ts +20 -0
  170. package/dist/crm/fields.d.ts.map +1 -0
  171. package/dist/crm/fields.js +78 -0
  172. package/dist/crm/fields.js.map +1 -0
  173. package/dist/crm/items.d.ts +7 -1
  174. package/dist/crm/items.d.ts.map +1 -1
  175. package/dist/crm/items.js +21 -18
  176. package/dist/crm/items.js.map +1 -1
  177. package/dist/crm/lead.d.ts +5 -36
  178. package/dist/crm/lead.d.ts.map +1 -1
  179. package/dist/crm/lead.js +15 -61
  180. package/dist/crm/lead.js.map +1 -1
  181. package/dist/crm/organization.d.ts +1 -0
  182. package/dist/crm/organization.d.ts.map +1 -1
  183. package/dist/crm/person.d.ts +1 -0
  184. package/dist/crm/person.d.ts.map +1 -1
  185. package/dist/crm/pipelines.d.ts +5 -0
  186. package/dist/crm/pipelines.d.ts.map +1 -0
  187. package/dist/crm/pipelines.js +54 -0
  188. package/dist/crm/pipelines.js.map +1 -0
  189. package/dist/crm/product.d.ts.map +1 -1
  190. package/dist/crm/product.js +2 -2
  191. package/dist/crm/product.js.map +1 -1
  192. package/dist/crm/rest3-fields.d.ts +3 -0
  193. package/dist/crm/rest3-fields.d.ts.map +1 -0
  194. package/dist/crm/rest3-fields.js +38 -0
  195. package/dist/crm/rest3-fields.js.map +1 -0
  196. package/dist/crm/source.d.ts +15 -0
  197. package/dist/crm/source.d.ts.map +1 -0
  198. package/dist/crm/source.js +122 -0
  199. package/dist/crm/source.js.map +1 -0
  200. package/dist/crm/user.d.ts.map +1 -1
  201. package/dist/crm/user.js +2 -2
  202. package/dist/crm/user.js.map +1 -1
  203. package/dist/crm/values.d.ts +26 -5
  204. package/dist/crm/values.d.ts.map +1 -1
  205. package/dist/crm/values.js +40 -5
  206. package/dist/crm/values.js.map +1 -1
  207. package/dist/crm/writer.d.ts +9 -0
  208. package/dist/crm/writer.d.ts.map +1 -0
  209. package/dist/crm/writer.js +119 -0
  210. package/dist/crm/writer.js.map +1 -0
  211. package/dist/program.d.ts.map +1 -1
  212. package/dist/program.js +53 -5
  213. package/dist/program.js.map +1 -1
  214. package/dist/reasons.d.ts.map +1 -1
  215. package/dist/reasons.js +6 -1
  216. package/dist/reasons.js.map +1 -1
  217. package/dist/store.d.ts +15 -0
  218. package/dist/store.d.ts.map +1 -0
  219. package/dist/store.js +33 -0
  220. package/dist/store.js.map +1 -0
  221. package/dist/version.d.ts +1 -1
  222. package/dist/version.js +1 -1
  223. package/package.json +4 -6
  224. package/skills/bitrix24-cli/SKILL.md +16 -10
  225. package/dist/bundle/all-profiles-QJ444GSX.js +0 -24
  226. package/dist/bundle/chunk-XNHSPHUN.js +0 -48
  227. package/dist/bundle/command-contract-OKQOE6G4.js +0 -30
  228. package/dist/bundle/first-screen-VQM4MTS7.js +0 -28
  229. package/dist/bundle/mcp-5RSWNTHS.js +0 -160
  230. package/dist/bundle/mcp-J5R5A65I.js +0 -87
  231. package/dist/bundle/serve-ES7AG5IK.js +0 -19
  232. package/dist/bundle/server-5LE5LNUQ.js +0 -45
  233. package/dist/bundle/server-BU4VBM6S.js +0 -58
  234. package/dist/bundle/store-maintenance-command-UDVGEY2D.js +0 -47
  235. package/dist/commands/doctor.d.ts +0 -77
  236. package/dist/commands/doctor.d.ts.map +0 -1
  237. package/dist/commands/doctor.js +0 -74
  238. package/dist/commands/doctor.js.map +0 -1
  239. package/dist/commands/mcp.d.ts +0 -3
  240. package/dist/commands/mcp.d.ts.map +0 -1
  241. package/dist/commands/mcp.js +0 -97
  242. package/dist/commands/mcp.js.map +0 -1
  243. package/dist/crm/pipeline.d.ts +0 -17
  244. package/dist/crm/pipeline.d.ts.map +0 -1
  245. package/dist/crm/pipeline.js +0 -42
  246. package/dist/crm/pipeline.js.map +0 -1
  247. package/dist/crm/stage.d.ts +0 -20
  248. package/dist/crm/stage.d.ts.map +0 -1
  249. package/dist/crm/stage.js +0 -65
  250. package/dist/crm/stage.js.map +0 -1
  251. package/dist/mcp.d.ts +0 -29
  252. package/dist/mcp.d.ts.map +0 -1
  253. package/dist/mcp.js +0 -99
  254. package/dist/mcp.js.map +0 -1
  255. /package/dist/bundle/{chunk-4PDYYS5K.js → chunk-ZQ3GWKDQ.js} +0 -0
@@ -77,6 +77,7 @@ const listCommand = () => profileFree(annotate(new Command("list"), {
77
77
  .action(function () {
78
78
  const environment = environmentOf(this);
79
79
  const env = environment.env ?? process.env;
80
+ // biome-ignore lint/plugin/no-own-settings: baseContext needs a profile, and this local read names none
80
81
  const { configuredProfiles } = configuration.resolveSettings({}, { env, needsProfile: false });
81
82
  const store = tokens(env, environment.keyring);
82
83
  const items = profilesHere(IDENTITY, configuredProfiles, env).map((profile) => {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,21 @@
1
+ import { type Level } from "@wirecat/cli-core/sends";
1
2
  import type { Command } from "commander";
2
3
  import type { BitrixTransport } from "../bitrix/transport.js";
3
- export declare const operationIdOf: (given: string | undefined) => string;
4
4
  export interface Write {
5
- /** The command's own permission key, `deals.create`. */
6
5
  key: string;
7
6
  /** The employee the record is assigned to, when the write sets one. */
8
7
  assignee?: string | undefined;
9
- /** False for a REST 2 write, which Bitrix24 does not answer from a record when it is repeated. */
10
- keyed?: boolean;
11
8
  /** Keys checked beside `key`, such as the command key a raw `api call` does the same as. */
12
9
  extra?: readonly string[];
13
- operationId?: string | undefined;
10
+ /** The built-in levels, when the call adds its own key's (`callDefaults`). */
11
+ defaults?: Readonly<Record<string, Level>>;
12
+ /** A lookup the write needs, in its own run before the write is checked and sent, as gcal-cli's `api call` reads. */
13
+ prepare?: (portal: BitrixTransport) => Promise<void>;
14
14
  act: (portal: BitrixTransport, operationId: string) => Promise<Record<string, unknown>>;
15
15
  }
16
16
  /**
17
17
  * Every write's one path, as gcal-cli's `api call` (src/commands/api.ts): the read-only lock, the profile's levels,
18
18
  * one question for every key at `ask`, the send journal, and an `operation_id` in the answer (WC-PERM-13, WC-OUT-10).
19
19
  */
20
- export declare const write: (command: Command, { key, assignee, extra: also, keyed, operationId: given, act }: Write) => Promise<void>;
20
+ export declare const write: (command: Command, { key, assignee, extra: also, defaults, prepare, act }: Write) => Promise<void>;
21
21
  //# sourceMappingURL=write.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAQ7D,eAAO,MAAM,aAAa,UAAW,MAAM,GAAG,SAAS,KAAG,MAMzD,CAAA;AAED,MAAM,WAAW,KAAK;IACpB,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAA;IACX,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,kGAAkG;IAClG,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,4FAA4F;IAC5F,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,GAAG,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACxF;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,YACP,OAAO,kEAC4D,KAAK,kBA0ClF,CAAA"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"AAWA,OAAO,EAAsC,KAAK,KAAK,EAA4B,MAAM,yBAAyB,CAAA;AAClH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,4FAA4F;IAC5F,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAC1C,qHAAqH;IACrH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,GAAG,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACxF;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,YACP,OAAO,0DACoE,KAAK,kBA0C1F,CAAA"}
@@ -1,45 +1,38 @@
1
1
  import { CliError } from "@wirecat/cli-base";
2
2
  import { environmentOf, itemOf, outputFor, readOnlyLockOf, readOnlyRefusal, renderAnswer, terminalAsker, } from "@wirecat/cli-core/cli";
3
+ import { CRM_ASSIGN_OTHERS_KEY } from "@wirecat/cli-core/crm";
3
4
  import { guardedWrite, guardFor, keyedGuard, levelFor, newOperationId } from "@wirecat/cli-core/sends";
4
- import { ASSIGN_KEY, permissions } from "../config.js";
5
+ import { permissions } from "../config.js";
5
6
  import { IDENTITY } from "../identity.js";
6
7
  import { contextOf, transportFor, webhookOf } from "../portal.js";
7
- /** REST 3.0's `Idempotency-Key`: 1 to 255 printable ASCII characters (apidocs "REST 3.0"). */
8
- const OPERATION_ID = /^[\x21-\x7e]{1,255}$/;
9
- export const operationIdOf = (given) => {
10
- if (given !== undefined && !OPERATION_ID.test(given))
11
- throw new CliError("validation_error", "--operation-id takes 1 to 255 printable characters with no spaces", {
12
- param: "--operation-id",
13
- });
14
- return given ?? newOperationId();
15
- };
16
8
  /**
17
9
  * Every write's one path, as gcal-cli's `api call` (src/commands/api.ts): the read-only lock, the profile's levels,
18
10
  * one question for every key at `ask`, the send journal, and an `operation_id` in the answer (WC-PERM-13, WC-OUT-10).
19
11
  */
20
- export const write = async (command, { key, assignee, extra: also = [], keyed = true, operationId: given, act }) => {
12
+ export const write = async (command, { key, assignee, extra: also = [], defaults = permissions.defaults, prepare, act }) => {
21
13
  const { env, settings, run } = contextOf(command);
22
14
  const lock = readOnlyLockOf(IDENTITY, env);
23
15
  if (lock)
24
16
  throw readOnlyRefusal(lock, "change the Bitrix24 portal");
25
- const operationId = operationIdOf(given);
17
+ const operationId = newOperationId();
26
18
  const webhook = webhookOf(command);
27
19
  const self = webhook.userId;
28
- const extra = [...also, ...(assignee !== undefined && assignee !== self ? [ASSIGN_KEY] : [])];
29
- const levelOf = (one) => levelFor(settings.permissions, one, permissions.defaults).level;
20
+ const extra = [...also, ...(assignee !== undefined && assignee !== self ? [CRM_ASSIGN_OTHERS_KEY] : [])];
21
+ const levelOf = (one) => levelFor(settings.permissions, one, defaults).level;
30
22
  const guard = keyedGuard((ask) => guardFor(IDENTITY,
31
23
  // The portal limits its own rate; the guard is here for the levels and the journal, not a send limit.
32
- { ...settings, sendsPerHour: Number.MAX_SAFE_INTEGER, permissionDefaults: permissions.defaults }, outputFor(command).renderer.warn, environmentOf(command).env ?? process.env, ask), terminalAsker(command), levelOf, extra);
24
+ { ...settings, sendsPerHour: Number.MAX_SAFE_INTEGER, permissionDefaults: defaults }, outputFor(command).renderer.warn, environmentOf(command).env ?? process.env, ask), terminalAsker(command), levelOf, extra);
33
25
  const request = { chatId: null, kind: "edit", key, operationId };
34
26
  guard.refuse(request);
27
+ if (prepare)
28
+ await run((events) => prepare(transportFor(command, webhook, events)));
35
29
  let done;
36
30
  try {
37
31
  done = await guardedWrite(guard, request, () => run((events) => act(transportFor(command, webhook, events), operationId)));
38
32
  }
39
33
  catch (error) {
40
- if (keyed && error instanceof CliError && error.code === "outcome_unknown")
41
- throw new CliError("outcome_unknown", `${error.message} — repeat it with --operation-id ${operationId}: Bitrix24 answers a repeat from its record ` +
42
- "instead of running it again", { ...error.details, operation_id: operationId });
34
+ if (error instanceof CliError && error.code === "outcome_unknown")
35
+ throw new CliError("outcome_unknown", `${error.message} — check the portal before you write it again: Bitrix24 would make it a second time`, { ...error.details, operation_id: operationId });
43
36
  throw error;
44
37
  }
45
38
  renderAnswer(command, outputFor(command), itemOf({ operation_id: operationId, ...done }));
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,9 +1,4 @@
1
1
  import { type Configuration } from "@wirecat/cli-core/cli";
2
- /**
3
- * Assigning a record to another employee tells that employee in Bitrix24 by itself, so it is its own key, denied
4
- * until the owner allows it (WC-PERM-22). Assigning to the webhook's own user tells nobody.
5
- */
6
- export declare const ASSIGN_KEY = "crm.assign-others";
7
2
  export declare const permissions: import("@wirecat/cli-core/cli").CommandPermissions;
8
3
  export declare const configuration: Configuration;
9
4
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAmD,MAAM,uBAAuB,CAAA;AAI3G;;;GAGG;AACH,eAAO,MAAM,UAAU,sBAAsB,CAAA;AAM7C,eAAO,MAAM,WAAW,oDAItB,CAAA;AAEF,eAAO,MAAM,aAAa,EAAE,aAAsD,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAmD,MAAM,uBAAuB,CAAA;AAW3G,eAAO,MAAM,WAAW,oDAKtB,CAAA;AAEF,eAAO,MAAM,aAAa,EAAE,aAAsD,CAAA"}
package/dist/config.js CHANGED
@@ -1,17 +1,15 @@
1
1
  import { commandPathKey, commandPermissions, settingsFor } from "@wirecat/cli-core/cli";
2
- import { API_DEFAULTS, API_KEYS } from "./api-keys.js";
2
+ import { CRM_WRITE_DEFAULTS, CRM_WRITE_KEYS, crmAlsoChecks } from "@wirecat/cli-core/crm";
3
+ import { API_DEFAULTS, API_KEYS, apiKeysOf, crmApiKeys } from "./api-keys.js";
3
4
  import { IDENTITY } from "./identity.js";
4
- /**
5
- * Assigning a record to another employee tells that employee in Bitrix24 by itself, so it is its own key, denied
6
- * until the owner allows it (WC-PERM-22). Assigning to the webhook's own user tells nobody.
7
- */
8
- export const ASSIGN_KEY = "crm.assign-others";
9
5
  /** `api list` and `show` never reach the portal; `api call` names its method only in its arguments and checks it itself. */
10
6
  const keyOf = (path) => path[0] === "api" && ["call", "list", "show"].includes(path[1] ?? "") ? null : commandPathKey(path);
7
+ const crmChecks = crmAlsoChecks(crmApiKeys);
11
8
  export const permissions = commandPermissions({
12
9
  keyOf,
13
- extra: [ASSIGN_KEY, ...API_KEYS],
14
- defaults: { [ASSIGN_KEY]: "deny", ...API_DEFAULTS },
10
+ alsoChecks: (path) => [...crmChecks(path), ...apiKeysOf(path)],
11
+ extra: [...CRM_WRITE_KEYS, ...API_KEYS],
12
+ defaults: { ...CRM_WRITE_DEFAULTS, ...API_DEFAULTS },
15
13
  });
16
14
  export const configuration = settingsFor(IDENTITY, { permissions });
17
15
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,mBAAmB,CAAA;AAE7C,4HAA4H;AAC5H,MAAM,KAAK,GAAG,CAAC,IAAuB,EAAE,EAAE,CACxC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AAErG,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;IAC5C,KAAK;IACL,KAAK,EAAE,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC;IAChC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE;CACpD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAkB,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAC3G,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,4HAA4H;AAC5H,MAAM,KAAK,GAAG,CAAC,IAAuB,EAAE,EAAE,CACxC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AAErG,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;IAC5C,KAAK;IACL,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9D,KAAK,EAAE,CAAC,GAAG,cAAc,EAAE,GAAG,QAAQ,CAAC;IACvC,QAAQ,EAAE,EAAE,GAAG,kBAAkB,EAAE,GAAG,YAAY,EAAE;CACrD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAkB,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type CrmWriteCapabilities } from "@wirecat/cli-core/crm";
2
+ /**
3
+ * Not idempotent: on a live portal (2026-11-07) a create repeated with the same `Idempotency-Key` made a second lead,
4
+ * although the REST 3.0 documentation says the repeat is answered from its record.
5
+ */
6
+ export declare const BITRIX_WRITES: CrmWriteCapabilities;
7
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/crm/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,oBAAuF,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { CRM_VERBS } from "@wirecat/cli-core/crm";
2
+ /**
3
+ * Not idempotent: on a live portal (2026-11-07) a create repeated with the same `Idempotency-Key` made a second lead,
4
+ * although the REST 3.0 documentation says the repeat is answered from its record.
5
+ */
6
+ export const BITRIX_WRITES = { kinds: ["deal", "lead"], verbs: CRM_VERBS, idempotent: false };
7
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/crm/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6B,MAAM,uBAAuB,CAAA;AAE5E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAyB,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA"}
@@ -9,7 +9,7 @@ export interface Condition {
9
9
  /** How one query field reaches the portal: its Bitrix24 name, and how its values read. */
10
10
  export interface FieldMap {
11
11
  field: string;
12
- kind: "id" | "number" | "time" | "text" | "outcome" | "word";
12
+ kind: "id" | "number" | "time" | "text" | "word";
13
13
  }
14
14
  /** The query's terms as conditions, AND-ed: `nativeTerms` has already refused anything the portal cannot ask. */
15
15
  export declare const conditionsOf: (terms: ReadonlyMap<string, Predicate>, fields: Readonly<Record<string, FieldMap>>) => Condition[];
@@ -1 +1 @@
1
- {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/crm/conditions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAIxD,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,CAAA;AAE7D,uGAAuG;AACvG,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,QAAQ,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,0FAA0F;AAC1F,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;CAC7D;AAkCD,iHAAiH;AACjH,eAAO,MAAM,YAAY,UAAW,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,gBAiB1G,CAAA;AAEJ,uFAAuF;AACvF,eAAO,MAAM,UAAU,eAAgB,SAAS,SAAS,EAAE,YAAgD,CAAA;AAE3G;;;GAGG;AACH,eAAO,MAAM,WAAW,eAAgB,SAAS,SAAS,EAAE,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAI5F,CAAA;AAEJ,2GAA2G;AAC3G,eAAO,MAAM,WAAW,eACV,SAAS,SAAS,EAAE,UACzB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,4BAWnD,CAAA"}
1
+ {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/crm/conditions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAIxD,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,CAAA;AAE7D,uGAAuG;AACvG,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,QAAQ,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,0FAA0F;AAC1F,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CACjD;AAiCD,iHAAiH;AACjH,eAAO,MAAM,YAAY,UAAW,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,gBAiB1G,CAAA;AAEJ,uFAAuF;AACvF,eAAO,MAAM,UAAU,eAAgB,SAAS,SAAS,EAAE,YAAgD,CAAA;AAE3G;;;GAGG;AACH,eAAO,MAAM,WAAW,eAAgB,SAAS,SAAS,EAAE,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAI5F,CAAA;AAEJ,2GAA2G;AAC3G,eAAO,MAAM,WAAW,eACV,SAAS,SAAS,EAAE,UACzB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,4BAWnD,CAAA"}
@@ -1,18 +1,16 @@
1
1
  import { CliError } from "@wirecat/cli-base";
2
2
  import { timeBounds } from "@wirecat/cli-core/cli";
3
- import { semanticsOf } from "./values.js";
3
+ import { portalTime } from "./values.js";
4
4
  const bare = (value) => value.replace(/^\*+|\*+$/g, "");
5
5
  const valueFor = (kind, raw, name) => {
6
6
  if (kind === "id" || kind === "number") {
7
7
  const found = Number(raw);
8
- if (!Number.isFinite(found) || (kind === "id" && !/^[1-9]\d*$/.test(raw)))
8
+ if (!Number.isFinite(found) || (kind === "id" && !/^(0|[1-9]\d*)$/.test(raw)))
9
9
  throw new CliError("validation_error", `${name} takes ${kind === "id" ? "an id" : "a number"}; got ${raw}`, {
10
10
  reason: "query.bad-value",
11
11
  });
12
12
  return found;
13
13
  }
14
- if (kind === "outcome")
15
- return semanticsOf(raw.toLowerCase());
16
14
  return raw;
17
15
  };
18
16
  const range = (node, map, name) => {
@@ -43,8 +41,8 @@ export const conditionsOf = (terms, fields) => [...terms].flatMap(([name, node])
43
41
  if (map.kind === "time") {
44
42
  const { since, until } = timeBounds(node);
45
43
  return [
46
- ...(since === undefined ? [] : [{ field: map.field, op: ">=", value: new Date(since).toISOString() }]),
47
- ...(until === undefined ? [] : [{ field: map.field, op: "<=", value: new Date(until).toISOString() }]),
44
+ ...(since === undefined ? [] : [{ field: map.field, op: ">=", value: portalTime(since) }]),
45
+ ...(until === undefined ? [] : [{ field: map.field, op: "<=", value: portalTime(until) }]),
48
46
  ];
49
47
  }
50
48
  if (node.operator === "range")
@@ -1 +1 @@
1
- {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/crm/conditions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/crm/conditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type Predicate, type QueryRegistry } from "@wirecat/cli-base/query";
2
+ import type { Condition } from "./conditions.js";
3
+ import type { Field } from "./fields.js";
4
+ /** The field names a query uses that the list's own fields do not have: the portal's custom fields, if any. */
5
+ export declare const customNames: (text: string, registry: QueryRegistry, command: string, defaultField?: string) => string[];
6
+ /** The custom fields a query names, each as typed, refused unless the portal can filter a list by it. */
7
+ export declare const filterableFields: (fields: readonly Field[], names: readonly string[]) => [string, Field][];
8
+ /** The list's query fields and the custom ones, each a whole value, so cli-base validates the query as it is. */
9
+ export declare const withCustomFields: (registry: QueryRegistry, chosen: readonly [string, Field][]) => QueryRegistry;
10
+ /** The custom terms as conditions on their codes, taken out of `terms` so the rest map as before. */
11
+ export declare const customConditions: (terms: Map<string, Predicate>, chosen: readonly [string, Field][]) => Condition[];
12
+ /**
13
+ * The custom fields `--json` names, as `provider_metadata.<code>`, or every one for a bare `provider_metadata`;
14
+ * undefined when it names none.
15
+ */
16
+ export declare const wantedCodes: (paths: string | undefined) => string[] | "all" | undefined;
17
+ /** The codes to select: only those the portal lists, since REST 3.0 refuses a whole call over one unknown name. */
18
+ export declare const selectedCodes: (fields: readonly Field[], wanted: string[] | "all" | undefined) => string[];
19
+ //# sourceMappingURL=custom-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-query.d.ts","sourceRoot":"","sources":["../../src/crm/custom-query.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,SAAS,EAAe,KAAK,aAAa,EAAa,MAAM,yBAAyB,CAAA;AAGpH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,+GAA+G;AAC/G,eAAO,MAAM,WAAW,SAChB,MAAM,YACF,aAAa,WACd,MAAM,4BAEd,MAAM,EAOR,CAAA;AAED,yGAAyG;AACzG,eAAO,MAAM,gBAAgB,WAAY,SAAS,KAAK,EAAE,SAAS,SAAS,MAAM,EAAE,KAAG,CAAC,MAAM,EAAE,KAAK,CAAC,EASjG,CAAA;AAEJ,iHAAiH;AACjH,eAAO,MAAM,gBAAgB,aAAc,aAAa,UAAU,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAG,aAQ7F,CAAA;AAcF,qGAAqG;AACrG,eAAO,MAAM,gBAAgB,UAAW,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAG,SAAS,EAK1G,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAW,MAAM,GAAG,SAAS,KAAG,MAAM,EAAE,GAAG,KAAK,GAAG,SAY1E,CAAA;AAED,mHAAmH;AACnH,eAAO,MAAM,aAAa,WAAY,SAAS,KAAK,EAAE,UAAU,MAAM,EAAE,GAAG,KAAK,GAAG,SAAS,KAAG,MAAM,EAOpG,CAAA"}
@@ -0,0 +1,79 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { parseLucene, walkQuery } from "@wirecat/cli-base/query";
3
+ import { LIST_QUERY_GUIDE } from "@wirecat/cli-core/cli";
4
+ import { fieldNamed, optionOf, unknownField } from "@wirecat/cli-core/crm";
5
+ /** The field names a query uses that the list's own fields do not have: the portal's custom fields, if any. */
6
+ export const customNames = (text, registry, command, defaultField = "none") => {
7
+ if (text.trim() === "")
8
+ return [];
9
+ const known = new Set(registry.fields.map((field) => field.name));
10
+ const named = walkQuery(parseLucene(text, { defaultField, command, guide: LIST_QUERY_GUIDE }).root)
11
+ .filter((term) => !term.implicit)
12
+ .map((term) => term.field);
13
+ return [...new Set(named.filter((name) => !known.has(name)))];
14
+ };
15
+ /** The custom fields a query names, each as typed, refused unless the portal can filter a list by it. */
16
+ export const filterableFields = (fields, names) => names.map((name) => {
17
+ const field = fieldNamed(fields, name);
18
+ if (!field.filterable)
19
+ throw new CliError("validation_error", `the portal cannot filter a list by ${field.label ?? field.code}`, {
20
+ reason: "field.not-filterable",
21
+ field: field.code,
22
+ });
23
+ return [name, field];
24
+ });
25
+ /** The list's query fields and the custom ones, each a whole value, so cli-base validates the query as it is. */
26
+ export const withCustomFields = (registry, chosen) => ({
27
+ ...registry,
28
+ fields: [
29
+ ...registry.fields,
30
+ ...chosen.map(([name]) => ({ name, type: "kw", operators: ["term", "phrase"], example: `${name}:x`, native: true })),
31
+ ],
32
+ });
33
+ const NUMBERS = new Set(["integer", "double"]);
34
+ /**
35
+ * REST 3.0 checks a value's type against the field's: `field.list` gives a list field as `int`, so its option id goes
36
+ * as a number, and so does a number field's value.
37
+ */
38
+ const filterValue = (field, typed) => {
39
+ if (field.options)
40
+ return Number(optionOf(field, typed));
41
+ const number = Number(typed);
42
+ return NUMBERS.has(field.type) && typed.trim() !== "" && Number.isFinite(number) ? number : typed;
43
+ };
44
+ /** The custom terms as conditions on their codes, taken out of `terms` so the rest map as before. */
45
+ export const customConditions = (terms, chosen) => chosen.flatMap(([name, field]) => {
46
+ const term = terms.get(name);
47
+ terms.delete(name);
48
+ return term ? [{ field: field.code, op: "=", value: filterValue(field, term.value) }] : [];
49
+ });
50
+ /**
51
+ * The custom fields `--json` names, as `provider_metadata.<code>`, or every one for a bare `provider_metadata`;
52
+ * undefined when it names none.
53
+ */
54
+ export const wantedCodes = (paths) => {
55
+ if (!paths)
56
+ return undefined;
57
+ const parts = paths.split(",").map((path) => path
58
+ .trim()
59
+ .replace(/^items\./, "")
60
+ .split("."));
61
+ const metadata = parts.filter(([top]) => top === "provider_metadata");
62
+ if (metadata.some((part) => part.length === 1))
63
+ return "all";
64
+ const codes = metadata.flatMap(([, code]) => (code ? [code] : []));
65
+ return codes.length ? [...new Set(codes)] : undefined;
66
+ };
67
+ /** The codes to select: only those the portal lists, since REST 3.0 refuses a whole call over one unknown name. */
68
+ export const selectedCodes = (fields, wanted) => {
69
+ if (wanted === undefined)
70
+ return [];
71
+ if (wanted === "all")
72
+ return fields.map((field) => field.code);
73
+ return wanted.map((code) => {
74
+ if (!fields.some((field) => field.code === code))
75
+ throw unknownField(fields, code);
76
+ return code;
77
+ });
78
+ };
79
+ //# sourceMappingURL=custom-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-query.js","sourceRoot":"","sources":["../../src/crm/custom-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAkC,WAAW,EAAsB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAI1E,+GAA+G;AAC/G,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,IAAY,EACZ,QAAuB,EACvB,OAAe,EACf,YAAY,GAAG,MAAM,EACX,EAAE;IACZ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC;SAChG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;SAChC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAA;AAED,yGAAyG;AACzG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAwB,EAAE,KAAwB,EAAqB,EAAE,CACxG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACjB,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,KAAK,CAAC,UAAU;QACnB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,sCAAsC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;YACxG,MAAM,EAAE,sBAAsB;YAC9B,KAAK,EAAE,KAAK,CAAC,IAAI;SAClB,CAAC,CAAA;IACJ,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACtB,CAAC,CAAC,CAAA;AAEJ,iHAAiH;AACjH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAuB,EAAE,MAAkC,EAAiB,EAAE,CAAC,CAAC;IAC/G,GAAG,QAAQ;IACX,MAAM,EAAE;QACN,GAAG,QAAQ,CAAC,MAAM;QAClB,GAAG,MAAM,CAAC,GAAG,CACX,CAAC,CAAC,IAAI,CAAC,EAAa,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CACjH;KACF;CACF,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE9C;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,KAAa,EAAmB,EAAE;IACnE,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;AACnG,CAAC,CAAA;AAED,qGAAqG;AACrG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAA6B,EAAE,MAAkC,EAAe,EAAE,CACjH,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAY,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACrG,CAAC,CAAC,CAAA;AAEJ;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAyB,EAAgC,EAAE;IACrF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,IAAI;SACD,IAAI,EAAE;SACN,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,GAAG,CAAC,CACd,CAAA;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAA;IACrE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACvD,CAAC,CAAA;AAED,mHAAmH;AACnH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAwB,EAAE,MAAoC,EAAY,EAAE;IACxG,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACnC,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;YAAE,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAClF,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,30 +1,7 @@
1
- import * as v from "valibot";
2
- import type { FieldMap } from "./conditions.js";
1
+ import type { CrmItem } from "@wirecat/cli-core";
3
2
  import type { ItemType } from "./items.js";
4
3
  import { type Metadata, type Raw } from "./values.js";
5
- export declare const dealSchema: v.StrictObjectSchema<{
6
- readonly id: v.StringSchema<undefined>;
7
- readonly title: v.NullableSchema<v.StringSchema<undefined>, undefined>;
8
- readonly pipeline_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
9
- readonly stage_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
10
- readonly outcome: v.PicklistSchema<readonly ["open", "won", "lost"], undefined>;
11
- readonly amount: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
12
- readonly currency: v.NullableSchema<v.StringSchema<undefined>, undefined>;
13
- readonly assigned_to: v.NullableSchema<v.StringSchema<undefined>, undefined>;
14
- readonly organization_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
15
- readonly person_ids: v.ArraySchema<v.StringSchema<undefined>, undefined>;
16
- readonly closes_on: v.NullableSchema<v.StringSchema<undefined>, undefined>;
17
- 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>;
18
- 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>;
19
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
20
- readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
21
- readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
22
- readonly value: v.UnknownSchema;
23
- }, undefined>, undefined>, undefined>;
24
- }, undefined>;
25
- export type Deal = v.InferOutput<typeof dealSchema>;
26
- export declare const DEAL_FIELDS: Record<string, FieldMap>;
27
- /** Bitrix24 ⇄ neutral for a deal. */
28
- export declare const fromBitrixDeal: (raw: Raw, metadata?: Metadata) => Deal;
29
- export declare const DEAL: ItemType<Deal>;
4
+ /** Bitrix24 ⇄ neutral for a deal: its pipeline is its category, `0` the default one. */
5
+ export declare const fromBitrixDeal: (raw: Raw, metadata?: Metadata) => CrmItem;
6
+ export declare const DEAL: ItemType<CrmItem>;
30
7
  //# sourceMappingURL=deal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deal.d.ts","sourceRoot":"","sources":["../../src/crm/deal.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,EAGL,KAAK,QAAQ,EAMb,KAAK,GAAG,EAGT,MAAM,aAAa,CAAA;AAEpB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;aAgBrB,CAAA;AAEF,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAWhD,CAAA;AAED,qCAAqC;AACrC,eAAO,MAAM,cAAc,QAAS,GAAG,aAAa,QAAQ,KAAG,IAgB7D,CAAA;AAEF,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI,CAuB/B,CAAA"}
1
+ {"version":3,"file":"deal.d.ts","sourceRoot":"","sources":["../../src/crm/deal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAQ,MAAM,aAAa,CAAA;AAErF,wFAAwF;AACxF,eAAO,MAAM,cAAc,QAAS,GAAG,aAAa,QAAQ,KAAG,OAc7D,CAAA;AAEF,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,OAAO,CAsBlC,CAAA"}
package/dist/crm/deal.js CHANGED
@@ -1,51 +1,19 @@
1
- import * as v from "valibot";
2
- import { id, ids, metadataSchema, nullableTime, number, OUTCOMES, outcomeOf, text, time, } from "./values.js";
3
- export const dealSchema = v.strictObject({
4
- id: v.string(),
5
- title: v.nullable(v.string()),
6
- pipeline_id: v.nullable(v.string()),
7
- stage_id: v.nullable(v.string()),
8
- outcome: v.picklist(OUTCOMES),
9
- amount: v.nullable(v.number()),
10
- currency: v.nullable(v.string()),
11
- assigned_to: v.nullable(v.string()),
12
- organization_id: v.nullable(v.string()),
13
- person_ids: v.array(v.string()),
14
- closes_on: v.nullable(v.string()),
15
- created_at: nullableTime,
16
- updated_at: nullableTime,
17
- url: v.nullable(v.string()),
18
- provider_metadata: metadataSchema,
19
- });
20
- export const DEAL_FIELDS = {
21
- title: { field: "title", kind: "word" },
22
- pipeline_id: { field: "categoryId", kind: "id" },
23
- stage_id: { field: "stageId", kind: "text" },
24
- outcome: { field: "stageSemanticId", kind: "outcome" },
25
- amount: { field: "opportunity", kind: "number" },
26
- currency: { field: "currencyId", kind: "text" },
27
- assigned_to: { field: "assignedById", kind: "id" },
28
- organization_id: { field: "companyId", kind: "id" },
29
- created_at: { field: "createdTime", kind: "time" },
30
- updated_at: { field: "updatedTime", kind: "time" },
31
- };
32
- /** Bitrix24 ⇄ neutral for a deal. */
1
+ import { amountOf, epoch, id, ids, text } from "./values.js";
2
+ /** Bitrix24 ⇄ neutral for a deal: its pipeline is its category, `0` the default one. */
33
3
  export const fromBitrixDeal = (raw, metadata) => ({
34
- id: id(raw.id) ?? "",
35
- title: text(raw.title),
36
- pipeline_id: text(raw.categoryId),
37
- stage_id: text(raw.stageId),
38
- outcome: outcomeOf(raw.stageSemanticId),
39
- amount: number(raw.opportunity),
40
- currency: text(raw.currencyId),
41
- assigned_to: id(raw.assignedById),
42
- organization_id: id(raw.companyId),
43
- person_ids: ids(raw.contactsId),
44
- closes_on: text(raw.closeTime)?.slice(0, 10) ?? null,
45
- created_at: time(raw.createdTime),
46
- updated_at: time(raw.updatedTime),
4
+ externalId: id(raw.id) ?? "",
5
+ title: text(raw.title) ?? "",
6
+ pipeline: text(raw.categoryId) ?? "0",
7
+ stage: text(raw.stageId) ?? "",
8
+ ...amountOf(raw.opportunity, raw.currencyId),
9
+ closeDate: text(raw.closeTime)?.slice(0, 10) ?? null,
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),
47
14
  url: text(raw.url),
48
- ...(metadata ? { provider_metadata: metadata } : {}),
15
+ assignee: id(raw.assignedById),
16
+ ...(metadata ? { metadata } : {}),
49
17
  });
50
18
  export const DEAL = {
51
19
  type: "deal",
@@ -56,16 +24,15 @@ export const DEAL = {
56
24
  "title",
57
25
  "categoryId",
58
26
  "stageId",
59
- "stageSemanticId",
60
27
  "opportunity",
61
28
  "currencyId",
62
- "assignedById",
63
29
  "companyId",
64
30
  "contactsId",
65
31
  "closeTime",
66
32
  "createdTime",
67
33
  "updatedTime",
68
34
  "url",
35
+ "assignedById",
69
36
  ],
70
37
  words: ["title"],
71
38
  nameOf: (deal) => deal.title,
@@ -1 +1 @@
1
- {"version":3,"file":"deal.js","sourceRoot":"","sources":["../../src/crm/deal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deal.js","sourceRoot":"","sources":["../../src/crm/deal.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAA2B,IAAI,EAAE,MAAM,aAAa,CAAA;AAErF,wFAAwF;AACxF,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,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG;IACrC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;IAC9B,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC;IAC5C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI;IACpD,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,YAAY;QACZ,SAAS;QACT,aAAa;QACb,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,WAAW;QACX,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"}
@@ -0,0 +1,20 @@
1
+ import type { CrmField } from "@wirecat/cli-core";
2
+ import type { BitrixTransport } from "../bitrix/transport.js";
3
+ import type { ItemType } from "./items.js";
4
+ import { type Metadata, type Raw } from "./values.js";
5
+ /** One of the portal's own fields on deals, leads, contacts or companies. */
6
+ export type Field = CrmField;
7
+ /**
8
+ * The portal's custom fields of one type, in two calls that need only read rights: REST 3.0's `field.list` has the
9
+ * title and whether a list can filter by it, and REST 2's `userfield.list` the real type and a list field's options,
10
+ * which `field.list` shows only as `int` (apidocs crm.<type>.field.custom.enum.list).
11
+ */
12
+ export declare const loadFields: (portal: BitrixTransport, type: ItemType<unknown>["type"]) => Promise<Field[]>;
13
+ /** Custom values as `{ label, value }`, a list field's option ids turned into their labels. */
14
+ export declare const metadataOf: (custom: Record<string, unknown>, fields: readonly Field[]) => Metadata;
15
+ /**
16
+ * The custom values to write, by code, as typed: a list field's options as their ids, numbers as `field.list` types
17
+ * them (`int`), and a multiple field's values as an array.
18
+ */
19
+ export declare const customValues: (fields: readonly Field[], pairs: readonly [string, string][]) => Raw;
20
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/crm/fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAY,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAa,MAAM,aAAa,CAAA;AAE1E,6EAA6E;AAC7E,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAA;AAO5B;;;;GAIG;AACH,eAAO,MAAM,UAAU,WAAkB,eAAe,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,KAAK,EAAE,CA0B1G,CAAA;AAKD,+FAA+F;AAC/F,eAAO,MAAM,UAAU,WAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,SAAS,KAAK,EAAE,KAAG,QAetF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,WAAY,SAAS,KAAK,EAAE,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAG,GAiB3F,CAAA"}