@wirecat/bitrix24-cli 0.0.0-stage → 0.2.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 (245) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +204 -0
  3. package/README.md +17 -2
  4. package/dist/api-keys.d.ts +21 -0
  5. package/dist/api-keys.d.ts.map +1 -0
  6. package/dist/api-keys.js +58 -0
  7. package/dist/api-keys.js.map +1 -0
  8. package/dist/bin/b24.d.ts +3 -0
  9. package/dist/bin/b24.d.ts.map +1 -0
  10. package/dist/bin/b24.js +40 -0
  11. package/dist/bin/b24.js.map +1 -0
  12. package/dist/bitrix/errors.d.ts +22 -0
  13. package/dist/bitrix/errors.d.ts.map +1 -0
  14. package/dist/bitrix/errors.js +76 -0
  15. package/dist/bitrix/errors.js.map +1 -0
  16. package/dist/bitrix/methods.d.ts +13 -0
  17. package/dist/bitrix/methods.d.ts.map +1 -0
  18. package/dist/bitrix/methods.js +33 -0
  19. package/dist/bitrix/methods.js.map +1 -0
  20. package/dist/bitrix/transport.d.ts +50 -0
  21. package/dist/bitrix/transport.d.ts.map +1 -0
  22. package/dist/bitrix/transport.js +189 -0
  23. package/dist/bitrix/transport.js.map +1 -0
  24. package/dist/bitrix/webhook.d.ts +14 -0
  25. package/dist/bitrix/webhook.d.ts.map +1 -0
  26. package/dist/bitrix/webhook.js +29 -0
  27. package/dist/bitrix/webhook.js.map +1 -0
  28. package/dist/bundle/all-profiles-QJ444GSX.js +24 -0
  29. package/dist/bundle/anthropic-RHRAVHC2.js +70 -0
  30. package/dist/bundle/app-server-QIT6S7AZ.js +224 -0
  31. package/dist/bundle/b24.js +32 -0
  32. package/dist/bundle/bun-H6RSODZ3.js +169 -0
  33. package/dist/bundle/bun-sqlite-BO4LTQHX.js +69 -0
  34. package/dist/bundle/chunk-2KCZ7BKW.js +215 -0
  35. package/dist/bundle/chunk-2SNUMZ7S.js +1028 -0
  36. package/dist/bundle/chunk-45AKJVKV.js +24 -0
  37. package/dist/bundle/chunk-4PDYYS5K.js +2 -0
  38. package/dist/bundle/chunk-5D4AEUVA.js +24783 -0
  39. package/dist/bundle/chunk-6WY72XVQ.js +216 -0
  40. package/dist/bundle/chunk-7GRZAKBB.js +639 -0
  41. package/dist/bundle/chunk-ADLS6FVG.js +24600 -0
  42. package/dist/bundle/chunk-BCF7P4FZ.js +558 -0
  43. package/dist/bundle/chunk-CNNEA2M4.js +54 -0
  44. package/dist/bundle/chunk-CXL33BFL.js +570 -0
  45. package/dist/bundle/chunk-D5S6QV6R.js +95 -0
  46. package/dist/bundle/chunk-DFDN6AUB.js +21 -0
  47. package/dist/bundle/chunk-DTXERR44.js +35 -0
  48. package/dist/bundle/chunk-EVYSBZ3I.js +153 -0
  49. package/dist/bundle/chunk-EXOOKUEA.js +82 -0
  50. package/dist/bundle/chunk-FLUEXJ4X.js +53 -0
  51. package/dist/bundle/chunk-FOTREPNS.js +366 -0
  52. package/dist/bundle/chunk-FZL7F5NR.js +2022 -0
  53. package/dist/bundle/chunk-GDFNH33E.js +1691 -0
  54. package/dist/bundle/chunk-H2ADPPSH.js +50910 -0
  55. package/dist/bundle/chunk-HAXNUIGQ.js +1245 -0
  56. package/dist/bundle/chunk-HGL63O5V.js +288 -0
  57. package/dist/bundle/chunk-INFYLWUA.js +929 -0
  58. package/dist/bundle/chunk-IRV2PCQ2.js +5213 -0
  59. package/dist/bundle/chunk-K3UIB6ZF.js +45 -0
  60. package/dist/bundle/chunk-LRGYKOCP.js +91 -0
  61. package/dist/bundle/chunk-LSPIOT6Z.js +459 -0
  62. package/dist/bundle/chunk-MBDK4YXG.js +34 -0
  63. package/dist/bundle/chunk-N6FLBXZS.js +73 -0
  64. package/dist/bundle/chunk-OTD2ZRXD.js +161 -0
  65. package/dist/bundle/chunk-P33NDCDI.js +78 -0
  66. package/dist/bundle/chunk-P364PLIK.js +257 -0
  67. package/dist/bundle/chunk-PH5FZX6E.js +193 -0
  68. package/dist/bundle/chunk-POC3V3AO.js +36616 -0
  69. package/dist/bundle/chunk-QC53QBNC.js +143 -0
  70. package/dist/bundle/chunk-QGMDQ2PM.js +122 -0
  71. package/dist/bundle/chunk-QIPTIUMJ.js +281 -0
  72. package/dist/bundle/chunk-QMPN6WKD.js +3512 -0
  73. package/dist/bundle/chunk-QQXH2OPB.js +594 -0
  74. package/dist/bundle/chunk-QSNROIJL.js +413 -0
  75. package/dist/bundle/chunk-RRJNNPR4.js +76 -0
  76. package/dist/bundle/chunk-SFRNX2TI.js +6848 -0
  77. package/dist/bundle/chunk-SGRYYE4X.js +266 -0
  78. package/dist/bundle/chunk-TE3FR6MI.js +884 -0
  79. package/dist/bundle/chunk-U5ACMCAQ.js +12049 -0
  80. package/dist/bundle/chunk-VEWWAGTD.js +2315 -0
  81. package/dist/bundle/chunk-VL6SPMZV.js +194 -0
  82. package/dist/bundle/chunk-WII44RXN.js +58 -0
  83. package/dist/bundle/chunk-WKRQ44EH.js +528 -0
  84. package/dist/bundle/chunk-WTPMJYMD.js +8308 -0
  85. package/dist/bundle/chunk-XD4FRDSL.js +565 -0
  86. package/dist/bundle/chunk-XJXONOB5.js +63 -0
  87. package/dist/bundle/chunk-XNHSPHUN.js +48 -0
  88. package/dist/bundle/chunk-XRFJWHY5.js +131 -0
  89. package/dist/bundle/chunk-Y5E2WNWB.js +35 -0
  90. package/dist/bundle/chunk-YYO7D2MO.js +783 -0
  91. package/dist/bundle/chunk-YZ5LHE5Q.js +31 -0
  92. package/dist/bundle/chunk-ZDQQCXFG.js +392 -0
  93. package/dist/bundle/chunk-ZEW4P6AH.js +158 -0
  94. package/dist/bundle/chunk-ZGZT5S6B.js +3480 -0
  95. package/dist/bundle/chunk-ZIAQPTUS.js +82 -0
  96. package/dist/bundle/chunk-ZVVMGPBJ.js +50 -0
  97. package/dist/bundle/command-contract-OKQOE6G4.js +30 -0
  98. package/dist/bundle/decode-5ZPLTYV6.js +160 -0
  99. package/dist/bundle/dist-6Y64DTOE.js +7577 -0
  100. package/dist/bundle/echarts-J6LAPIX7.js +42501 -0
  101. package/dist/bundle/embed-YG5LDHME.js +35 -0
  102. package/dist/bundle/embedder-7FNUA5OZ.js +108 -0
  103. package/dist/bundle/first-run-JPZNWIJN.js +23 -0
  104. package/dist/bundle/first-screen-VQM4MTS7.js +28 -0
  105. package/dist/bundle/instructions-AXWTQHMR.js +11 -0
  106. package/dist/bundle/mcp-7F46P6AM.js +165 -0
  107. package/dist/bundle/mcp-HUD6UH5X.js +160 -0
  108. package/dist/bundle/mcp-J5R5A65I.js +87 -0
  109. package/dist/bundle/node-CWKAIOEM.js +176 -0
  110. package/dist/bundle/node-P4E63KXA.js +2340 -0
  111. package/dist/bundle/node-TLZSIHIJ.js +21 -0
  112. package/dist/bundle/node-sqlite-LSEKVRDA.js +67 -0
  113. package/dist/bundle/oauth-THYNLRLD.js +17 -0
  114. package/dist/bundle/open-E47QYKFC.js +20 -0
  115. package/dist/bundle/openai-EWSGC3BC.js +227 -0
  116. package/dist/bundle/process-WKTEA3WE.js +91 -0
  117. package/dist/bundle/program-UYX5362I.js +20851 -0
  118. package/dist/bundle/prompt-CAQ7QR3U.js +12 -0
  119. package/dist/bundle/recognize-6KGHNZC3.js +23 -0
  120. package/dist/bundle/remote-3UO2WDC3.js +26 -0
  121. package/dist/bundle/rerank-2JVDPZBX.js +49 -0
  122. package/dist/bundle/serve-ES7AG5IK.js +19 -0
  123. package/dist/bundle/server-5LE5LNUQ.js +45 -0
  124. package/dist/bundle/server-BU4VBM6S.js +58 -0
  125. package/dist/bundle/state-7NH5G4XJ.js +33 -0
  126. package/dist/bundle/store-7O4JQD2Z.js +127 -0
  127. package/dist/bundle/store-maintenance-command-UDVGEY2D.js +47 -0
  128. package/dist/commands/api.d.ts +3 -0
  129. package/dist/commands/api.d.ts.map +1 -0
  130. package/dist/commands/api.js +131 -0
  131. package/dist/commands/api.js.map +1 -0
  132. package/dist/commands/crm-writes.d.ts +4 -0
  133. package/dist/commands/crm-writes.d.ts.map +1 -0
  134. package/dist/commands/crm-writes.js +182 -0
  135. package/dist/commands/crm-writes.js.map +1 -0
  136. package/dist/commands/crm.d.ts +3 -0
  137. package/dist/commands/crm.d.ts.map +1 -0
  138. package/dist/commands/crm.js +144 -0
  139. package/dist/commands/crm.js.map +1 -0
  140. package/dist/commands/doctor.d.ts +77 -0
  141. package/dist/commands/doctor.d.ts.map +1 -0
  142. package/dist/commands/doctor.js +74 -0
  143. package/dist/commands/doctor.js.map +1 -0
  144. package/dist/commands/mcp.d.ts +3 -0
  145. package/dist/commands/mcp.d.ts.map +1 -0
  146. package/dist/commands/mcp.js +97 -0
  147. package/dist/commands/mcp.js.map +1 -0
  148. package/dist/commands/session.d.ts +3 -0
  149. package/dist/commands/session.d.ts.map +1 -0
  150. package/dist/commands/session.js +101 -0
  151. package/dist/commands/session.js.map +1 -0
  152. package/dist/commands/write.d.ts +21 -0
  153. package/dist/commands/write.d.ts.map +1 -0
  154. package/dist/commands/write.js +47 -0
  155. package/dist/commands/write.js.map +1 -0
  156. package/dist/config.d.ts +9 -0
  157. package/dist/config.d.ts.map +1 -0
  158. package/dist/config.js +17 -0
  159. package/dist/config.js.map +1 -0
  160. package/dist/crm/conditions.d.ts +25 -0
  161. package/dist/crm/conditions.d.ts.map +1 -0
  162. package/dist/crm/conditions.js +78 -0
  163. package/dist/crm/conditions.js.map +1 -0
  164. package/dist/crm/deal.d.ts +27 -0
  165. package/dist/crm/deal.d.ts.map +1 -0
  166. package/dist/crm/deal.js +74 -0
  167. package/dist/crm/deal.js.map +1 -0
  168. package/dist/crm/items.d.ts +30 -0
  169. package/dist/crm/items.d.ts.map +1 -0
  170. package/dist/crm/items.js +76 -0
  171. package/dist/crm/items.js.map +1 -0
  172. package/dist/crm/lead.d.ts +36 -0
  173. package/dist/crm/lead.d.ts.map +1 -0
  174. package/dist/crm/lead.js +85 -0
  175. package/dist/crm/lead.js.map +1 -0
  176. package/dist/crm/organization.d.ts +32 -0
  177. package/dist/crm/organization.d.ts.map +1 -0
  178. package/dist/crm/organization.js +67 -0
  179. package/dist/crm/organization.js.map +1 -0
  180. package/dist/crm/person.d.ts +31 -0
  181. package/dist/crm/person.d.ts.map +1 -0
  182. package/dist/crm/person.js +67 -0
  183. package/dist/crm/person.js.map +1 -0
  184. package/dist/crm/pipeline.d.ts +17 -0
  185. package/dist/crm/pipeline.d.ts.map +1 -0
  186. package/dist/crm/pipeline.js +42 -0
  187. package/dist/crm/pipeline.js.map +1 -0
  188. package/dist/crm/product.d.ts +43 -0
  189. package/dist/crm/product.d.ts.map +1 -0
  190. package/dist/crm/product.js +42 -0
  191. package/dist/crm/product.js.map +1 -0
  192. package/dist/crm/stage.d.ts +20 -0
  193. package/dist/crm/stage.d.ts.map +1 -0
  194. package/dist/crm/stage.js +65 -0
  195. package/dist/crm/stage.js.map +1 -0
  196. package/dist/crm/user.d.ts +39 -0
  197. package/dist/crm/user.d.ts.map +1 -0
  198. package/dist/crm/user.js +54 -0
  199. package/dist/crm/user.js.map +1 -0
  200. package/dist/crm/values.d.ts +33 -0
  201. package/dist/crm/values.d.ts.map +1 -0
  202. package/dist/crm/values.js +54 -0
  203. package/dist/crm/values.js.map +1 -0
  204. package/dist/crm/walk.d.ts +19 -0
  205. package/dist/crm/walk.d.ts.map +1 -0
  206. package/dist/crm/walk.js +22 -0
  207. package/dist/crm/walk.js.map +1 -0
  208. package/dist/identity.d.ts +5 -0
  209. package/dist/identity.d.ts.map +1 -0
  210. package/dist/identity.js +18 -0
  211. package/dist/identity.js.map +1 -0
  212. package/dist/index.d.ts +3 -0
  213. package/dist/index.d.ts.map +1 -0
  214. package/dist/index.js +3 -0
  215. package/dist/index.js.map +1 -0
  216. package/dist/mcp.d.ts +29 -0
  217. package/dist/mcp.d.ts.map +1 -0
  218. package/dist/mcp.js +99 -0
  219. package/dist/mcp.js.map +1 -0
  220. package/dist/portal.d.ts +47 -0
  221. package/dist/portal.d.ts.map +1 -0
  222. package/dist/portal.js +52 -0
  223. package/dist/portal.js.map +1 -0
  224. package/dist/program.d.ts +6 -0
  225. package/dist/program.d.ts.map +1 -0
  226. package/dist/program.js +45 -0
  227. package/dist/program.js.map +1 -0
  228. package/dist/reasons.d.ts +10 -0
  229. package/dist/reasons.d.ts.map +1 -0
  230. package/dist/reasons.js +28 -0
  231. package/dist/reasons.js.map +1 -0
  232. package/dist/token.d.ts +12 -0
  233. package/dist/token.d.ts.map +1 -0
  234. package/dist/token.js +41 -0
  235. package/dist/token.js.map +1 -0
  236. package/dist/version.d.ts +2 -0
  237. package/dist/version.d.ts.map +1 -0
  238. package/dist/version.js +2 -0
  239. package/dist/version.js.map +1 -0
  240. package/dist/whoami.d.ts +8 -0
  241. package/dist/whoami.d.ts.map +1 -0
  242. package/dist/whoami.js +9 -0
  243. package/dist/whoami.js.map +1 -0
  244. package/package.json +83 -4
  245. package/skills/bitrix24-cli/SKILL.md +41 -0
@@ -0,0 +1,36 @@
1
+ import * as v from "valibot";
2
+ import type { FieldMap } from "./conditions.js";
3
+ import type { ItemType } from "./items.js";
4
+ import { type Raw } from "./values.js";
5
+ export declare const leadSchema: v.StrictObjectSchema<{
6
+ readonly id: v.StringSchema<undefined>;
7
+ readonly title: v.NullableSchema<v.StringSchema<undefined>, undefined>;
8
+ readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
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.UnknownSchema, undefined>, undefined>;
30
+ }, undefined>;
31
+ export type Lead = v.InferOutput<typeof leadSchema>;
32
+ export declare const LEAD_FIELDS: Record<string, FieldMap>;
33
+ /** 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. */
34
+ export declare const fromBitrixLead: (raw: Raw, custom?: Raw) => Lead;
35
+ export declare const LEAD: ItemType<Lead>;
36
+ //# sourceMappingURL=lead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lead.d.ts","sourceRoot":"","sources":["../../src/crm/lead.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,EAYL,KAAK,GAAG,EAGT,MAAM,aAAa,CAAA;AAEpB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;aAmBrB,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,wHAAwH;AACxH,eAAO,MAAM,cAAc,QAAS,GAAG,WAAW,GAAG,KAAG,IAmBtD,CAAA;AAEF,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI,CA4B/B,CAAA"}
@@ -0,0 +1,85 @@
1
+ import * as v from "valibot";
2
+ import { contactSchema, contacts, customFields, fullName, id, ids, metadataSchema, nullableTime, number, OUTCOMES, outcomeOf, text, time, } from "./values.js";
3
+ export const leadSchema = v.strictObject({
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. */
36
+ export const fromBitrixLead = (raw, custom) => ({
37
+ id: id(raw.id) ?? "",
38
+ title: text(raw.title),
39
+ name: fullName(raw.name, raw.secondName, raw.lastName),
40
+ organization_name: text(raw.companyTitle),
41
+ stage_id: text(raw.stageId),
42
+ outcome: outcomeOf(raw.stageSemanticId),
43
+ amount: number(raw.opportunity),
44
+ currency: text(raw.currencyId),
45
+ assigned_to: id(raw.assignedById),
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),
53
+ url: text(raw.url),
54
+ ...(custom && Object.keys(customFields(custom)).length ? { provider_metadata: customFields(custom) } : {}),
55
+ });
56
+ export const LEAD = {
57
+ type: "lead",
58
+ entityTypeId: 1,
59
+ word: "lead",
60
+ select: [
61
+ "id",
62
+ "title",
63
+ "name",
64
+ "secondName",
65
+ "lastName",
66
+ "companyTitle",
67
+ "stageId",
68
+ "stageSemanticId",
69
+ "opportunity",
70
+ "currencyId",
71
+ "assignedById",
72
+ "companyId",
73
+ "contactsId",
74
+ "phone",
75
+ "email",
76
+ "sourceId",
77
+ "createdTime",
78
+ "updatedTime",
79
+ "url",
80
+ ],
81
+ words: ["title"],
82
+ nameOf: (lead) => lead.title,
83
+ map: fromBitrixLead,
84
+ };
85
+ //# sourceMappingURL=lead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lead.js","sourceRoot":"","sources":["../../src/crm/lead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import * as v from "valibot";
2
+ import type { FieldMap } from "./conditions.js";
3
+ import type { ItemType } from "./items.js";
4
+ import { type Raw } from "./values.js";
5
+ /** A Bitrix24 company: an `organizations` record in WireCat's words. */
6
+ export declare const organizationSchema: v.StrictObjectSchema<{
7
+ readonly id: v.StringSchema<undefined>;
8
+ readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
9
+ readonly type_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
10
+ readonly industry_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
11
+ readonly revenue: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
12
+ readonly currency: v.NullableSchema<v.StringSchema<undefined>, undefined>;
13
+ readonly person_ids: v.ArraySchema<v.StringSchema<undefined>, undefined>;
14
+ readonly phones: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
15
+ readonly type: v.NullableSchema<v.StringSchema<undefined>, undefined>;
16
+ readonly value: v.StringSchema<undefined>;
17
+ }, undefined>, undefined>, undefined>;
18
+ readonly emails: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
19
+ readonly type: v.NullableSchema<v.StringSchema<undefined>, undefined>;
20
+ readonly value: v.StringSchema<undefined>;
21
+ }, undefined>, undefined>, undefined>;
22
+ readonly assigned_to: v.NullableSchema<v.StringSchema<undefined>, undefined>;
23
+ 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>;
24
+ 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>;
25
+ readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
26
+ readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
27
+ }, undefined>;
28
+ export type Organization = v.InferOutput<typeof organizationSchema>;
29
+ export declare const ORGANIZATION_FIELDS: Record<string, FieldMap>;
30
+ export declare const fromBitrixOrganization: (raw: Raw, custom?: Raw) => Organization;
31
+ export declare const ORGANIZATION: ItemType<Organization>;
32
+ //# sourceMappingURL=organization.d.ts.map
@@ -0,0 +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,EASL,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,WAAW,GAAG,KAAG,YAe9D,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY,CAsB/C,CAAA"}
@@ -0,0 +1,67 @@
1
+ import * as v from "valibot";
2
+ import { contactSchema, contacts, customFields, id, ids, metadataSchema, nullableTime, number, text, time, } from "./values.js";
3
+ /** A Bitrix24 company: an `organizations` record in WireCat's words. */
4
+ export const organizationSchema = v.strictObject({
5
+ id: v.string(),
6
+ name: v.nullable(v.string()),
7
+ type_id: v.nullable(v.string()),
8
+ industry_id: v.nullable(v.string()),
9
+ revenue: v.nullable(v.number()),
10
+ currency: v.nullable(v.string()),
11
+ person_ids: v.array(v.string()),
12
+ phones: v.optional(v.array(contactSchema)),
13
+ emails: v.optional(v.array(contactSchema)),
14
+ assigned_to: 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 ORGANIZATION_FIELDS = {
21
+ name: { field: "title", kind: "word" },
22
+ type_id: { field: "typeId", kind: "text" },
23
+ industry_id: { field: "industryId", kind: "text" },
24
+ assigned_to: { field: "assignedById", kind: "id" },
25
+ created_at: { field: "createdTime", kind: "time" },
26
+ updated_at: { field: "updatedTime", kind: "time" },
27
+ };
28
+ export const fromBitrixOrganization = (raw, custom) => ({
29
+ id: id(raw.id) ?? "",
30
+ name: text(raw.title),
31
+ type_id: text(raw.typeId),
32
+ industry_id: text(raw.industryId),
33
+ revenue: number(raw.revenue),
34
+ currency: text(raw.currencyId),
35
+ person_ids: ids(raw.contactsId),
36
+ ...(Array.isArray(raw.phone) ? { phones: contacts(raw.phone) } : {}),
37
+ ...(Array.isArray(raw.email) ? { emails: contacts(raw.email) } : {}),
38
+ assigned_to: id(raw.assignedById),
39
+ created_at: time(raw.createdTime),
40
+ updated_at: time(raw.updatedTime),
41
+ url: text(raw.url),
42
+ ...(custom && Object.keys(customFields(custom)).length ? { provider_metadata: customFields(custom) } : {}),
43
+ });
44
+ export const ORGANIZATION = {
45
+ type: "company",
46
+ entityTypeId: 4,
47
+ word: "organization",
48
+ select: [
49
+ "id",
50
+ "title",
51
+ "typeId",
52
+ "industryId",
53
+ "revenue",
54
+ "currencyId",
55
+ "contactsId",
56
+ "phone",
57
+ "email",
58
+ "assignedById",
59
+ "createdTime",
60
+ "updatedTime",
61
+ "url",
62
+ ],
63
+ words: ["title"],
64
+ nameOf: (organization) => organization.name,
65
+ map: fromBitrixOrganization,
66
+ };
67
+ //# sourceMappingURL=organization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/crm/organization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import * as v from "valibot";
2
+ import type { FieldMap } from "./conditions.js";
3
+ import type { ItemType } from "./items.js";
4
+ import { type Raw } from "./values.js";
5
+ /** A Bitrix24 contact: a `people` record in WireCat's words. */
6
+ export declare const personSchema: v.StrictObjectSchema<{
7
+ readonly id: v.StringSchema<undefined>;
8
+ readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
9
+ readonly first_name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
10
+ readonly last_name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
11
+ readonly position: v.NullableSchema<v.StringSchema<undefined>, undefined>;
12
+ readonly organization_ids: v.ArraySchema<v.StringSchema<undefined>, undefined>;
13
+ readonly phones: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
14
+ readonly type: v.NullableSchema<v.StringSchema<undefined>, undefined>;
15
+ readonly value: v.StringSchema<undefined>;
16
+ }, undefined>, undefined>, undefined>;
17
+ readonly emails: 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 assigned_to: v.NullableSchema<v.StringSchema<undefined>, undefined>;
22
+ 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>;
23
+ 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>;
24
+ readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
25
+ readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
26
+ }, undefined>;
27
+ export type Person = v.InferOutput<typeof personSchema>;
28
+ export declare const PERSON_FIELDS: Record<string, FieldMap>;
29
+ export declare const fromBitrixPerson: (raw: Raw, custom?: Raw) => Person;
30
+ export declare const PERSON: ItemType<Person>;
31
+ //# sourceMappingURL=person.d.ts.map
@@ -0,0 +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,EASL,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,WAAW,GAAG,KAAG,MAkBzD,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAsBnC,CAAA"}
@@ -0,0 +1,67 @@
1
+ import * as v from "valibot";
2
+ import { contactSchema, contacts, customFields, fullName, id, ids, metadataSchema, nullableTime, text, time, } from "./values.js";
3
+ /** A Bitrix24 contact: a `people` record in WireCat's words. */
4
+ export const personSchema = v.strictObject({
5
+ id: v.string(),
6
+ name: v.nullable(v.string()),
7
+ first_name: v.nullable(v.string()),
8
+ last_name: v.nullable(v.string()),
9
+ position: v.nullable(v.string()),
10
+ organization_ids: v.array(v.string()),
11
+ phones: v.optional(v.array(contactSchema)),
12
+ emails: v.optional(v.array(contactSchema)),
13
+ assigned_to: v.nullable(v.string()),
14
+ created_at: nullableTime,
15
+ updated_at: nullableTime,
16
+ url: v.nullable(v.string()),
17
+ provider_metadata: metadataSchema,
18
+ });
19
+ export const PERSON_FIELDS = {
20
+ name: { field: "name", kind: "word" },
21
+ assigned_to: { field: "assignedById", kind: "id" },
22
+ created_at: { field: "createdTime", kind: "time" },
23
+ updated_at: { field: "updatedTime", kind: "time" },
24
+ };
25
+ export const fromBitrixPerson = (raw, custom) => {
26
+ const companies = ids(raw.companiesId);
27
+ const first = id(raw.companyId);
28
+ return {
29
+ id: id(raw.id) ?? "",
30
+ name: fullName(raw.name, raw.secondName, raw.lastName),
31
+ first_name: text(raw.name),
32
+ last_name: text(raw.lastName),
33
+ position: text(raw.post),
34
+ organization_ids: companies.length || first === null ? companies : [first],
35
+ ...(Array.isArray(raw.phone) ? { phones: contacts(raw.phone) } : {}),
36
+ ...(Array.isArray(raw.email) ? { emails: contacts(raw.email) } : {}),
37
+ assigned_to: id(raw.assignedById),
38
+ created_at: time(raw.createdTime),
39
+ updated_at: time(raw.updatedTime),
40
+ url: text(raw.url),
41
+ ...(custom && Object.keys(customFields(custom)).length ? { provider_metadata: customFields(custom) } : {}),
42
+ };
43
+ };
44
+ export const PERSON = {
45
+ type: "contact",
46
+ entityTypeId: 3,
47
+ word: "person",
48
+ select: [
49
+ "id",
50
+ "name",
51
+ "secondName",
52
+ "lastName",
53
+ "post",
54
+ "companyId",
55
+ "companiesId",
56
+ "phone",
57
+ "email",
58
+ "assignedById",
59
+ "createdTime",
60
+ "updatedTime",
61
+ "url",
62
+ ],
63
+ words: ["name", "lastName"],
64
+ nameOf: (person) => person.name,
65
+ map: fromBitrixPerson,
66
+ };
67
+ //# sourceMappingURL=person.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person.js","sourceRoot":"","sources":["../../src/crm/person.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAG5B,OAAO,EACL,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,EAAE,EACF,GAAG,EACH,cAAc,EACd,YAAY,EAEZ,IAAI,EACJ,IAAI,GACL,MAAM,aAAa,CAAA;AAEpB,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnC,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,cAAc;CAClC,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IACrC,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;IAClD,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;CACnD,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAE,MAAY,EAAU,EAAE;IACjE,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC/B,OAAO;QACL,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;QACpB,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC;QACtD,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB,gBAAgB,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1E,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;QACjC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QACjC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QACjC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAClB,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAqB;IACtC,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,CAAC;IACf,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE;QACN,IAAI;QACJ,MAAM;QACN,YAAY;QACZ,UAAU;QACV,MAAM;QACN,WAAW;QACX,aAAa;QACb,OAAO;QACP,OAAO;QACP,cAAc;QACd,aAAa;QACb,aAAa;QACb,KAAK;KACN;IACD,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IAC3B,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI;IAC/B,GAAG,EAAE,gBAAgB;CACtB,CAAA"}
@@ -0,0 +1,17 @@
1
+ import * as v from "valibot";
2
+ import type { BitrixTransport } from "../bitrix/transport.js";
3
+ import { type Raw } from "./values.js";
4
+ export declare const pipelineSchema: v.StrictObjectSchema<{
5
+ readonly id: v.StringSchema<undefined>;
6
+ readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
7
+ readonly is_default: v.BooleanSchema<undefined>;
8
+ readonly sort: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
9
+ }, undefined>;
10
+ export type Pipeline = v.InferOutput<typeof pipelineSchema>;
11
+ /** Deal pipelines are Bitrix24's deal categories; the default one has id 0. Leads have no pipelines. */
12
+ export declare const fromBitrixPipeline: (raw: Raw) => Pipeline;
13
+ export declare const listPipelines: (portal: BitrixTransport) => Promise<Pipeline[]>;
14
+ /** By id, or by a name matched whole; a name two pipelines share is refused with both. */
15
+ export declare const findPipeline: (pipelines: readonly Pipeline[], reference: string) => Pipeline;
16
+ export declare const pipelineId: (raw: unknown) => string | null;
17
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/crm/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAc,KAAK,GAAG,EAAa,MAAM,aAAa,CAAA;AAE7D,eAAO,MAAM,cAAc;;;;;aAKzB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,wGAAwG;AACxG,eAAO,MAAM,kBAAkB,QAAS,GAAG,KAAG,QAK5C,CAAA;AAEF,eAAO,MAAM,aAAa,WAAkB,eAAe,KAAG,OAAO,CAAC,QAAQ,EAAE,CAI/E,CAAA;AAED,0FAA0F;AAC1F,eAAO,MAAM,YAAY,cAAe,SAAS,QAAQ,EAAE,aAAa,MAAM,KAAG,QAehF,CAAA;AAED,eAAO,MAAM,UAAU,QAAS,OAAO,kBAAY,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import * as v from "valibot";
3
+ import { id, number, text, yes } from "./values.js";
4
+ export const pipelineSchema = v.strictObject({
5
+ id: v.string(),
6
+ name: v.nullable(v.string()),
7
+ is_default: v.boolean(),
8
+ sort: v.nullable(v.number()),
9
+ });
10
+ /** Deal pipelines are Bitrix24's deal categories; the default one has id 0. Leads have no pipelines. */
11
+ export const fromBitrixPipeline = (raw) => ({
12
+ id: text(raw.id) ?? "0",
13
+ name: text(raw.name),
14
+ is_default: yes(raw.isDefault),
15
+ sort: number(raw.sort),
16
+ });
17
+ export const listPipelines = async (portal) => {
18
+ const answer = await portal.call("crm.category.list", { entityTypeId: 2 });
19
+ const categories = answer.result?.categories;
20
+ return Array.isArray(categories) ? categories.map(fromBitrixPipeline) : [];
21
+ };
22
+ /** By id, or by a name matched whole; a name two pipelines share is refused with both. */
23
+ export const findPipeline = (pipelines, reference) => {
24
+ const byId = pipelines.find((one) => one.id === reference);
25
+ if (byId)
26
+ return byId;
27
+ const named = pipelines.filter((one) => one.name?.toLocaleLowerCase() === reference.trim().toLocaleLowerCase());
28
+ if (named.length === 1 && named[0])
29
+ return named[0];
30
+ const candidates = (named.length ? named : pipelines).map((one) => ({ id: one.id, name: one.name }));
31
+ if (named.length > 1)
32
+ throw new CliError("validation_error", "two pipelines have that name; name one by its id", {
33
+ reason: "pipeline.ambiguous",
34
+ candidates,
35
+ });
36
+ throw new CliError("not_found", "no pipeline has that id or name; the portal's pipelines are in candidates", {
37
+ reason: "pipeline.not-found",
38
+ candidates,
39
+ });
40
+ };
41
+ export const pipelineId = (raw) => id(raw);
42
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/crm/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import * as v from "valibot";
2
+ import type { BitrixTransport } from "../bitrix/transport.js";
3
+ import { type Condition } from "./conditions.js";
4
+ import { type Raw } from "./values.js";
5
+ import { type Window } from "./walk.js";
6
+ export declare const productSchema: v.StrictObjectSchema<{
7
+ readonly id: v.StringSchema<undefined>;
8
+ readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
9
+ readonly price: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
10
+ readonly currency: v.NullableSchema<v.StringSchema<undefined>, undefined>;
11
+ readonly active: v.BooleanSchema<undefined>;
12
+ readonly section_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
13
+ }, undefined>;
14
+ export type Product = v.InferOutput<typeof productSchema>;
15
+ export declare const PRODUCT_FIELDS: {
16
+ readonly name: {
17
+ readonly field: "NAME";
18
+ readonly kind: "word";
19
+ };
20
+ readonly active: {
21
+ readonly field: "ACTIVE";
22
+ readonly kind: "text";
23
+ };
24
+ readonly section_id: {
25
+ readonly field: "SECTION_ID";
26
+ readonly kind: "id";
27
+ };
28
+ };
29
+ /** The CRM catalog through REST 2's crm.product.*; upper-case fields, as that older API names them. */
30
+ export declare const fromBitrixProduct: (raw: Raw) => Product;
31
+ export declare const listProducts: (portal: BitrixTransport, conditions: readonly Condition[], window: Window) => Promise<{
32
+ items: {
33
+ id: string;
34
+ name: string | null;
35
+ price: number | null;
36
+ currency: string | null;
37
+ active: boolean;
38
+ section_id: string | null;
39
+ }[];
40
+ has_more: boolean;
41
+ }>;
42
+ export declare const getProduct: (portal: BitrixTransport, reference: string) => Promise<Product>;
43
+ //# sourceMappingURL=product.d.ts.map
@@ -0,0 +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,EAAc,KAAK,GAAG,EAAa,MAAM,aAAa,CAAA;AAC7D,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,CACO,CAAA"}
@@ -0,0 +1,42 @@
1
+ import * as v from "valibot";
2
+ import { rest2Filter } from "./conditions.js";
3
+ import { id, number, text, yes } from "./values.js";
4
+ import { walk } from "./walk.js";
5
+ export const productSchema = v.strictObject({
6
+ id: v.string(),
7
+ name: v.nullable(v.string()),
8
+ price: v.nullable(v.number()),
9
+ currency: v.nullable(v.string()),
10
+ active: v.boolean(),
11
+ section_id: v.nullable(v.string()),
12
+ });
13
+ export const PRODUCT_FIELDS = {
14
+ name: { field: "NAME", kind: "word" },
15
+ active: { field: "ACTIVE", kind: "text" },
16
+ section_id: { field: "SECTION_ID", kind: "id" },
17
+ };
18
+ const SELECT = ["ID", "NAME", "PRICE", "CURRENCY_ID", "ACTIVE", "SECTION_ID"];
19
+ /** The CRM catalog through REST 2's crm.product.*; upper-case fields, as that older API names them. */
20
+ export const fromBitrixProduct = (raw) => ({
21
+ id: id(raw.ID) ?? "",
22
+ name: text(raw.NAME),
23
+ price: number(raw.PRICE),
24
+ currency: text(raw.CURRENCY_ID),
25
+ active: yes(raw.ACTIVE),
26
+ section_id: id(raw.SECTION_ID),
27
+ });
28
+ const activeAsBitrix = (conditions) => conditions.map((one) => (one.field === "ACTIVE" ? { ...one, value: one.value === "true" ? "Y" : "N" } : one));
29
+ export const listProducts = async (portal, conditions, window) => {
30
+ const { items, has_more } = await walk(window, 50, async (start) => {
31
+ const answer = await portal.call("crm.product.list", {
32
+ select: SELECT,
33
+ filter: rest2Filter(activeAsBitrix(conditions)),
34
+ order: { ID: "DESC" },
35
+ start,
36
+ });
37
+ return { rows: Array.isArray(answer.result) ? answer.result : [], more: answer.next !== undefined };
38
+ });
39
+ return { items: items.map(fromBitrixProduct), has_more };
40
+ };
41
+ export const getProduct = async (portal, reference) => fromBitrixProduct((await portal.call("crm.product.get", { id: Number(reference) })).result);
42
+ //# sourceMappingURL=product.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../../src/crm/product.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import * as v from "valibot";
2
+ import type { BitrixTransport } from "../bitrix/transport.js";
3
+ import { type Raw } from "./values.js";
4
+ export declare const STAGE_ENTITIES: readonly ["deals", "leads"];
5
+ export declare const stageSchema: v.StrictObjectSchema<{
6
+ readonly id: v.StringSchema<undefined>;
7
+ readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
8
+ readonly entity: v.PicklistSchema<readonly ["deals", "leads"], undefined>;
9
+ readonly pipeline_id: v.NullableSchema<v.StringSchema<undefined>, undefined>;
10
+ readonly outcome: v.PicklistSchema<readonly ["open", "won", "lost"], undefined>;
11
+ readonly sort: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
12
+ readonly color: v.NullableSchema<v.StringSchema<undefined>, undefined>;
13
+ }, undefined>;
14
+ export type Stage = v.InferOutput<typeof stageSchema>;
15
+ export declare const directoryOf: (entity: (typeof STAGE_ENTITIES)[number], pipeline?: string) => string;
16
+ /** The outcome comes from the stage's semantics, never its name (apidocs crm.status.fields). */
17
+ export declare const fromBitrixStage: (raw: Raw) => Stage | undefined;
18
+ export declare const listStages: (portal: BitrixTransport, directory?: string) => Promise<Stage[]>;
19
+ export declare const findStage: (stages: readonly Stage[], reference: string) => Stage;
20
+ //# sourceMappingURL=stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../../src/crm/stage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAA+B,KAAK,GAAG,EAAQ,MAAM,aAAa,CAAA;AAEzE,eAAO,MAAM,cAAc,YAAI,OAAO,EAAE,OAAO,CAAU,CAAA;AAEzD,eAAO,MAAM,WAAW;;;;;;;;aAQtB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,WAAW,CAAC,CAAA;AAKrD,eAAO,MAAM,WAAW,WAAY,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,aAAa,MAAM,KAAG,MACgB,CAAA;AAEzG,gGAAgG;AAChG,eAAO,MAAM,eAAe,QAAS,GAAG,KAAG,KAAK,GAAG,SAclD,CAAA;AAED,eAAO,MAAM,UAAU,WAAkB,eAAe,cAAc,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAO7F,CAAA;AAED,eAAO,MAAM,SAAS,WAAY,SAAS,KAAK,EAAE,aAAa,MAAM,KAAG,KAqBvE,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import * as v from "valibot";
3
+ import { number, OUTCOMES, outcomeOf, text } from "./values.js";
4
+ export const STAGE_ENTITIES = ["deals", "leads"];
5
+ export const stageSchema = v.strictObject({
6
+ id: v.string(),
7
+ name: v.nullable(v.string()),
8
+ entity: v.picklist(STAGE_ENTITIES),
9
+ pipeline_id: v.nullable(v.string()),
10
+ outcome: v.picklist(OUTCOMES),
11
+ sort: v.nullable(v.number()),
12
+ color: v.nullable(v.string()),
13
+ });
14
+ /** Lead stages are the `STATUS` directory; deal stages `DEAL_STAGE` for pipeline 0 and `DEAL_STAGE_<id>` for the rest. */
15
+ const DIRECTORY = /^(STATUS|DEAL_STAGE)(?:_(\d+))?$/;
16
+ export const directoryOf = (entity, pipeline) => entity === "leads" ? "STATUS" : !pipeline || pipeline === "0" ? "DEAL_STAGE" : `DEAL_STAGE_${pipeline}`;
17
+ /** The outcome comes from the stage's semantics, never its name (apidocs crm.status.fields). */
18
+ export const fromBitrixStage = (raw) => {
19
+ const directory = DIRECTORY.exec(String(raw.ENTITY_ID ?? ""));
20
+ if (!directory)
21
+ return undefined;
22
+ const extra = (raw.EXTRA ?? {});
23
+ const leads = directory[1] === "STATUS";
24
+ return {
25
+ id: text(raw.STATUS_ID) ?? "",
26
+ name: text(raw.NAME),
27
+ entity: leads ? "leads" : "deals",
28
+ pipeline_id: leads ? null : (directory[2] ?? "0"),
29
+ outcome: outcomeOf(raw.SEMANTICS ?? extra.SEMANTICS),
30
+ sort: number(raw.SORT),
31
+ color: text(raw.COLOR ?? extra.COLOR),
32
+ };
33
+ };
34
+ export const listStages = async (portal, directory) => {
35
+ const answer = await portal.call("crm.status.list", {
36
+ ...(directory ? { filter: { ENTITY_ID: directory } } : {}),
37
+ order: { SORT: "ASC" },
38
+ });
39
+ const rows = Array.isArray(answer.result) ? answer.result : [];
40
+ return rows.map(fromBitrixStage).filter((stage) => stage !== undefined);
41
+ };
42
+ export const findStage = (stages, reference) => {
43
+ const byId = stages.filter((one) => one.id === reference);
44
+ const named = byId.length
45
+ ? byId
46
+ : stages.filter((one) => one.name?.toLocaleLowerCase() === reference.trim().toLocaleLowerCase());
47
+ if (named.length === 1 && named[0])
48
+ return named[0];
49
+ const candidates = (named.length ? named : stages).map(({ id, name, entity, pipeline_id }) => ({
50
+ id,
51
+ name,
52
+ entity,
53
+ pipeline_id,
54
+ }));
55
+ if (named.length > 1)
56
+ throw new CliError("validation_error", "more than one stage has that name; name one by its id", {
57
+ reason: "stage.ambiguous",
58
+ candidates,
59
+ });
60
+ throw new CliError("not_found", "no stage has that id or name here; the stages are in candidates", {
61
+ reason: "stage.not-found",
62
+ candidates,
63
+ });
64
+ };
65
+ //# sourceMappingURL=stage.js.map