@wirecat/bitrix24-cli 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/LICENSE +204 -0
- package/README.md +17 -2
- package/dist/api-keys.d.ts +21 -0
- package/dist/api-keys.d.ts.map +1 -0
- package/dist/api-keys.js +58 -0
- package/dist/api-keys.js.map +1 -0
- package/dist/bin/b24.d.ts +3 -0
- package/dist/bin/b24.d.ts.map +1 -0
- package/dist/bin/b24.js +40 -0
- package/dist/bin/b24.js.map +1 -0
- package/dist/bitrix/errors.d.ts +22 -0
- package/dist/bitrix/errors.d.ts.map +1 -0
- package/dist/bitrix/errors.js +76 -0
- package/dist/bitrix/errors.js.map +1 -0
- package/dist/bitrix/methods.d.ts +13 -0
- package/dist/bitrix/methods.d.ts.map +1 -0
- package/dist/bitrix/methods.js +33 -0
- package/dist/bitrix/methods.js.map +1 -0
- package/dist/bitrix/transport.d.ts +50 -0
- package/dist/bitrix/transport.d.ts.map +1 -0
- package/dist/bitrix/transport.js +189 -0
- package/dist/bitrix/transport.js.map +1 -0
- package/dist/bitrix/webhook.d.ts +14 -0
- package/dist/bitrix/webhook.d.ts.map +1 -0
- package/dist/bitrix/webhook.js +29 -0
- package/dist/bitrix/webhook.js.map +1 -0
- package/dist/bundle/all-profiles-QJ444GSX.js +24 -0
- package/dist/bundle/anthropic-RHRAVHC2.js +70 -0
- package/dist/bundle/app-server-QIT6S7AZ.js +224 -0
- package/dist/bundle/b24.js +32 -0
- package/dist/bundle/bun-H6RSODZ3.js +169 -0
- package/dist/bundle/bun-sqlite-BO4LTQHX.js +69 -0
- package/dist/bundle/chunk-2KCZ7BKW.js +215 -0
- package/dist/bundle/chunk-2SNUMZ7S.js +1028 -0
- package/dist/bundle/chunk-45AKJVKV.js +24 -0
- package/dist/bundle/chunk-4PDYYS5K.js +2 -0
- package/dist/bundle/chunk-5D4AEUVA.js +24783 -0
- package/dist/bundle/chunk-6WY72XVQ.js +216 -0
- package/dist/bundle/chunk-7GRZAKBB.js +639 -0
- package/dist/bundle/chunk-ADLS6FVG.js +24600 -0
- package/dist/bundle/chunk-BCF7P4FZ.js +558 -0
- package/dist/bundle/chunk-CNNEA2M4.js +54 -0
- package/dist/bundle/chunk-CXL33BFL.js +570 -0
- package/dist/bundle/chunk-CZ23EVP4.js +1691 -0
- package/dist/bundle/chunk-D5S6QV6R.js +95 -0
- package/dist/bundle/chunk-DFDN6AUB.js +21 -0
- package/dist/bundle/chunk-DTXERR44.js +35 -0
- package/dist/bundle/chunk-EVYSBZ3I.js +153 -0
- package/dist/bundle/chunk-EXOOKUEA.js +82 -0
- package/dist/bundle/chunk-FLUEXJ4X.js +53 -0
- package/dist/bundle/chunk-FOTREPNS.js +366 -0
- package/dist/bundle/chunk-FZL7F5NR.js +2022 -0
- package/dist/bundle/chunk-H2ADPPSH.js +50910 -0
- package/dist/bundle/chunk-HAXNUIGQ.js +1245 -0
- package/dist/bundle/chunk-HGL63O5V.js +288 -0
- package/dist/bundle/chunk-INFYLWUA.js +929 -0
- package/dist/bundle/chunk-IRV2PCQ2.js +5213 -0
- package/dist/bundle/chunk-K3UIB6ZF.js +45 -0
- package/dist/bundle/chunk-LRGYKOCP.js +91 -0
- package/dist/bundle/chunk-LSPIOT6Z.js +459 -0
- package/dist/bundle/chunk-MBDK4YXG.js +34 -0
- package/dist/bundle/chunk-N6FLBXZS.js +73 -0
- package/dist/bundle/chunk-OTD2ZRXD.js +161 -0
- package/dist/bundle/chunk-P33NDCDI.js +78 -0
- package/dist/bundle/chunk-P364PLIK.js +257 -0
- package/dist/bundle/chunk-PH5FZX6E.js +193 -0
- package/dist/bundle/chunk-POC3V3AO.js +36616 -0
- package/dist/bundle/chunk-QC53QBNC.js +143 -0
- package/dist/bundle/chunk-QGMDQ2PM.js +122 -0
- package/dist/bundle/chunk-QIPTIUMJ.js +281 -0
- package/dist/bundle/chunk-QMPN6WKD.js +3512 -0
- package/dist/bundle/chunk-QQXH2OPB.js +594 -0
- package/dist/bundle/chunk-QSNROIJL.js +413 -0
- package/dist/bundle/chunk-RRJNNPR4.js +76 -0
- package/dist/bundle/chunk-SFRNX2TI.js +6848 -0
- package/dist/bundle/chunk-SGRYYE4X.js +266 -0
- package/dist/bundle/chunk-TE3FR6MI.js +884 -0
- package/dist/bundle/chunk-U5ACMCAQ.js +12049 -0
- package/dist/bundle/chunk-VEWWAGTD.js +2315 -0
- package/dist/bundle/chunk-VL6SPMZV.js +194 -0
- package/dist/bundle/chunk-WII44RXN.js +58 -0
- package/dist/bundle/chunk-WKRQ44EH.js +528 -0
- package/dist/bundle/chunk-WTPMJYMD.js +8308 -0
- package/dist/bundle/chunk-XD4FRDSL.js +565 -0
- package/dist/bundle/chunk-XJXONOB5.js +63 -0
- package/dist/bundle/chunk-XNHSPHUN.js +48 -0
- package/dist/bundle/chunk-XRFJWHY5.js +131 -0
- package/dist/bundle/chunk-Y5E2WNWB.js +35 -0
- package/dist/bundle/chunk-YYO7D2MO.js +783 -0
- package/dist/bundle/chunk-YZ5LHE5Q.js +31 -0
- package/dist/bundle/chunk-ZDQQCXFG.js +392 -0
- package/dist/bundle/chunk-ZEW4P6AH.js +158 -0
- package/dist/bundle/chunk-ZGZT5S6B.js +3480 -0
- package/dist/bundle/chunk-ZIAQPTUS.js +82 -0
- package/dist/bundle/chunk-ZVVMGPBJ.js +50 -0
- package/dist/bundle/command-contract-OKQOE6G4.js +30 -0
- package/dist/bundle/decode-5ZPLTYV6.js +160 -0
- package/dist/bundle/dist-PII6Z6X3.js +7577 -0
- package/dist/bundle/echarts-J6LAPIX7.js +42501 -0
- package/dist/bundle/embed-YG5LDHME.js +35 -0
- package/dist/bundle/embedder-7FNUA5OZ.js +108 -0
- package/dist/bundle/first-run-JPZNWIJN.js +23 -0
- package/dist/bundle/first-screen-VQM4MTS7.js +28 -0
- package/dist/bundle/instructions-AXWTQHMR.js +11 -0
- package/dist/bundle/mcp-7F46P6AM.js +165 -0
- package/dist/bundle/mcp-J5R5A65I.js +87 -0
- package/dist/bundle/mcp-WALJM6QX.js +160 -0
- package/dist/bundle/node-CWKAIOEM.js +176 -0
- package/dist/bundle/node-P4E63KXA.js +2340 -0
- package/dist/bundle/node-TLZSIHIJ.js +21 -0
- package/dist/bundle/node-sqlite-LSEKVRDA.js +67 -0
- package/dist/bundle/oauth-THYNLRLD.js +17 -0
- package/dist/bundle/open-E47QYKFC.js +20 -0
- package/dist/bundle/openai-EWSGC3BC.js +227 -0
- package/dist/bundle/process-WKTEA3WE.js +91 -0
- package/dist/bundle/program-GO3RVP2H.js +20847 -0
- package/dist/bundle/prompt-CAQ7QR3U.js +12 -0
- package/dist/bundle/recognize-6KGHNZC3.js +23 -0
- package/dist/bundle/remote-3UO2WDC3.js +26 -0
- package/dist/bundle/rerank-2JVDPZBX.js +49 -0
- package/dist/bundle/serve-ES7AG5IK.js +19 -0
- package/dist/bundle/server-5LE5LNUQ.js +45 -0
- package/dist/bundle/server-BU4VBM6S.js +58 -0
- package/dist/bundle/state-7NH5G4XJ.js +33 -0
- package/dist/bundle/store-7O4JQD2Z.js +127 -0
- package/dist/bundle/store-maintenance-command-UDVGEY2D.js +47 -0
- package/dist/commands/api.d.ts +3 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +130 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/crm-writes.d.ts +4 -0
- package/dist/commands/crm-writes.d.ts.map +1 -0
- package/dist/commands/crm-writes.js +182 -0
- package/dist/commands/crm-writes.js.map +1 -0
- package/dist/commands/crm.d.ts +3 -0
- package/dist/commands/crm.d.ts.map +1 -0
- package/dist/commands/crm.js +142 -0
- package/dist/commands/crm.js.map +1 -0
- package/dist/commands/doctor.d.ts +77 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +74 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +97 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +101 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/write.d.ts +21 -0
- package/dist/commands/write.d.ts.map +1 -0
- package/dist/commands/write.js +47 -0
- package/dist/commands/write.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/crm/conditions.d.ts +25 -0
- package/dist/crm/conditions.d.ts.map +1 -0
- package/dist/crm/conditions.js +78 -0
- package/dist/crm/conditions.js.map +1 -0
- package/dist/crm/deal.d.ts +27 -0
- package/dist/crm/deal.d.ts.map +1 -0
- package/dist/crm/deal.js +76 -0
- package/dist/crm/deal.js.map +1 -0
- package/dist/crm/items.d.ts +30 -0
- package/dist/crm/items.d.ts.map +1 -0
- package/dist/crm/items.js +76 -0
- package/dist/crm/items.js.map +1 -0
- package/dist/crm/lead.d.ts +36 -0
- package/dist/crm/lead.d.ts.map +1 -0
- package/dist/crm/lead.js +86 -0
- package/dist/crm/lead.js.map +1 -0
- package/dist/crm/organization.d.ts +32 -0
- package/dist/crm/organization.d.ts.map +1 -0
- package/dist/crm/organization.js +68 -0
- package/dist/crm/organization.js.map +1 -0
- package/dist/crm/person.d.ts +31 -0
- package/dist/crm/person.d.ts.map +1 -0
- package/dist/crm/person.js +68 -0
- package/dist/crm/person.js.map +1 -0
- package/dist/crm/pipeline.d.ts +17 -0
- package/dist/crm/pipeline.d.ts.map +1 -0
- package/dist/crm/pipeline.js +42 -0
- package/dist/crm/pipeline.js.map +1 -0
- package/dist/crm/product.d.ts +43 -0
- package/dist/crm/product.d.ts.map +1 -0
- package/dist/crm/product.js +42 -0
- package/dist/crm/product.js.map +1 -0
- package/dist/crm/stage.d.ts +20 -0
- package/dist/crm/stage.d.ts.map +1 -0
- package/dist/crm/stage.js +65 -0
- package/dist/crm/stage.js.map +1 -0
- package/dist/crm/user.d.ts +39 -0
- package/dist/crm/user.d.ts.map +1 -0
- package/dist/crm/user.js +54 -0
- package/dist/crm/user.js.map +1 -0
- package/dist/crm/values.d.ts +30 -0
- package/dist/crm/values.d.ts.map +1 -0
- package/dist/crm/values.js +50 -0
- package/dist/crm/values.js.map +1 -0
- package/dist/crm/walk.d.ts +19 -0
- package/dist/crm/walk.d.ts.map +1 -0
- package/dist/crm/walk.js +22 -0
- package/dist/crm/walk.js.map +1 -0
- package/dist/identity.d.ts +5 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +18 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +29 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +99 -0
- package/dist/mcp.js.map +1 -0
- package/dist/portal.d.ts +33 -0
- package/dist/portal.d.ts.map +1 -0
- package/dist/portal.js +46 -0
- package/dist/portal.js.map +1 -0
- package/dist/program.d.ts +6 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +45 -0
- package/dist/program.js.map +1 -0
- package/dist/reasons.d.ts +10 -0
- package/dist/reasons.d.ts.map +1 -0
- package/dist/reasons.js +28 -0
- package/dist/reasons.js.map +1 -0
- package/dist/token.d.ts +12 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +41 -0
- package/dist/token.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/whoami.d.ts +8 -0
- package/dist/whoami.d.ts.map +1 -0
- package/dist/whoami.js +9 -0
- package/dist/whoami.js.map +1 -0
- package/package.json +83 -4
- 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,CA6B/B,CAAA"}
|
package/dist/crm/lead.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
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 ?? raw.contactIds),
|
|
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
|
+
"contactIds",
|
|
75
|
+
"phone",
|
|
76
|
+
"email",
|
|
77
|
+
"sourceId",
|
|
78
|
+
"createdTime",
|
|
79
|
+
"updatedTime",
|
|
80
|
+
"url",
|
|
81
|
+
],
|
|
82
|
+
words: ["title"],
|
|
83
|
+
nameOf: (lead) => lead.title,
|
|
84
|
+
map: fromBitrixLead,
|
|
85
|
+
};
|
|
86
|
+
//# 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,CAuB/C,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 ?? raw.industry),
|
|
33
|
+
revenue: number(raw.revenue),
|
|
34
|
+
currency: text(raw.currencyId),
|
|
35
|
+
person_ids: ids(raw.contactsId ?? raw.contactIds),
|
|
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
|
+
"contactIds",
|
|
57
|
+
"phone",
|
|
58
|
+
"email",
|
|
59
|
+
"assignedById",
|
|
60
|
+
"createdTime",
|
|
61
|
+
"updatedTime",
|
|
62
|
+
"url",
|
|
63
|
+
],
|
|
64
|
+
words: ["title"],
|
|
65
|
+
nameOf: (organization) => organization.name,
|
|
66
|
+
map: fromBitrixOrganization,
|
|
67
|
+
};
|
|
68
|
+
//# 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,CAuBnC,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 ?? raw.companyIds);
|
|
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
|
+
"companyIds",
|
|
57
|
+
"phone",
|
|
58
|
+
"email",
|
|
59
|
+
"assignedById",
|
|
60
|
+
"createdTime",
|
|
61
|
+
"updatedTime",
|
|
62
|
+
"url",
|
|
63
|
+
],
|
|
64
|
+
words: ["name", "lastName"],
|
|
65
|
+
nameOf: (person) => person.name,
|
|
66
|
+
map: fromBitrixPerson,
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=person.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.js","sourceRoot":"","sources":["../../src/crm/person.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|