@go-labs-sg/bb 2.40.0 → 2.42.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/README.md +12 -0
- package/command-manifest.json +25 -1
- package/command-reference.md +121 -1
- package/dist/index.js +601 -315
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,6 +22,18 @@ The shared API rechecks existing records at submission. Canonical matches reuse
|
|
|
22
22
|
|
|
23
23
|
`bb company use` and `bb company create` are state-changing, potentially external-writing commands. In non-interactive mode their existing permission gates require `--allow-state-change --allow-external-write`. Deploy the backend before publishing this CLI change. See [company discovery details](../api/docs/company-discovery.md) for limits and retry behaviour.
|
|
24
24
|
|
|
25
|
+
## Payload help and uncertain writes
|
|
26
|
+
|
|
27
|
+
Run `bb <command> --help` (for example, `bb create-item --help`) to see required and optional `--payload` fields and an example JSON object. Item creation and updates accept a finite numeric `cost` and convert it to the API's decimal-string input. Validation errors identify the affected field; unsupported QuickBooks name characters are listed explicitly.
|
|
28
|
+
|
|
29
|
+
If `create-budget` reports an uncertain outcome (including Prisma P2028 or a network interruption), **do not retry immediately**. Run `bb list-budgets --projectId <project-id>` and check for the budget name first; the write may have committed even though the CLI did not receive a successful response. This check is not an idempotency guarantee when another budget has the same name.
|
|
30
|
+
|
|
31
|
+
A failed `create-supplier` request may likewise have committed. Inspect `bb list-suppliers --name <name>` and matching supplier details before retrying; names alone do not identify one attempt. If supplier creation succeeded but its separate approval request failed or returned no approval IDs, inspect that supplier's approvals by ID and retry only the approval step if needed. Do not create the supplier again. The CLI confirms the combined supplier-and-approval workflow before the first write.
|
|
32
|
+
|
|
33
|
+
`create-budget-approval` and `create-estimate` accept `--companyPayload`, `--contactPayload`, and `--eventPayload` as JSON objects. The CLI rejects non-object JSON; the API validates required fields.
|
|
34
|
+
|
|
35
|
+
`create-project` requires an existing Asana Deals lead task. In non-interactive runs pass `--asanaTaskId`; interactive runs can select a match with `--asanaSearch`. The Slack channel is resolved from the task unless all Slack channel flags are provided. For a new direct client, create the lead task in the website form first.
|
|
36
|
+
|
|
25
37
|
## Shared catalogue editing
|
|
26
38
|
|
|
27
39
|
All active authenticated users can edit suppliers, inventory items and item categories. Normal-user supplier updates submit a revision for approval in the shared API; item/category edits apply immediately. Lead/Admin supplier edits bypass human review. `bb supplier update` returns the server-owned approval/synchronization result without issuing another approval request. New supplier usage stays on hold during review and linked QuickBooks synchronization; existing usage continues with the last approved details until the edit is approved. Creator identity and delete/archive permissions are unchanged.
|
package/command-manifest.json
CHANGED
|
@@ -790,6 +790,18 @@
|
|
|
790
790
|
{
|
|
791
791
|
"name": "--allow-financial-write",
|
|
792
792
|
"description": "Allow financial-record changes in non-interactive use."
|
|
793
|
+
},
|
|
794
|
+
{
|
|
795
|
+
"name": "--companyPayload <json>",
|
|
796
|
+
"description": "Company update JSON object with id, name, and website fields."
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
"name": "--contactPayload <json>",
|
|
800
|
+
"description": "Contact update JSON object with companyId, title, firstName, lastName, email, and mobile fields."
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
"name": "--eventPayload <json>",
|
|
804
|
+
"description": "Event timing JSON object with date, startTime, and endTime fields."
|
|
793
805
|
}
|
|
794
806
|
],
|
|
795
807
|
"argumentMode": "legacy-passthrough",
|
|
@@ -840,6 +852,18 @@
|
|
|
840
852
|
{
|
|
841
853
|
"name": "--allow-financial-write",
|
|
842
854
|
"description": "Allow financial-record changes in non-interactive use."
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
"name": "--companyPayload <json>",
|
|
858
|
+
"description": "Company update JSON object with id, name, and website fields."
|
|
859
|
+
},
|
|
860
|
+
{
|
|
861
|
+
"name": "--contactPayload <json>",
|
|
862
|
+
"description": "Contact update JSON object with companyId, title, firstName, lastName, email, and mobile fields."
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"name": "--eventPayload <json>",
|
|
866
|
+
"description": "Event timing JSON object with date, startTime, and endTime fields."
|
|
843
867
|
}
|
|
844
868
|
],
|
|
845
869
|
"argumentMode": "legacy-passthrough",
|
|
@@ -5504,7 +5528,7 @@
|
|
|
5504
5528
|
{
|
|
5505
5529
|
"path": ["project", "create"],
|
|
5506
5530
|
"legacyAliases": ["create-project", "create_project"],
|
|
5507
|
-
"summary": "Create
|
|
5531
|
+
"summary": "Create a project linked to an existing Asana Deals lead task. Supply --asanaTaskId in non-interactive use; interactive use searches for and selects a lead task (optionally --asanaSearch). The Slack channel is resolved from the selected Asana task unless all three Slack channel flags are supplied. For a new direct client, create the lead task using the website form first.",
|
|
5508
5532
|
"globalOptions": [
|
|
5509
5533
|
{
|
|
5510
5534
|
"name": "--help",
|
package/command-reference.md
CHANGED
|
@@ -161,6 +161,11 @@ Legacy aliases: `send-estimate-to-contact-person`, `send_estimate_to_contact_per
|
|
|
161
161
|
|
|
162
162
|
Effects: state-change, email.
|
|
163
163
|
|
|
164
|
+
Payload fields (--payload JSON)
|
|
165
|
+
Required: estimateId: string; budgetId: string; to: email; cc: email[]; replyTo: email; subject: string; content: HTML string; signature: HTML string
|
|
166
|
+
Optional: estimateDocNumber: string
|
|
167
|
+
Example: bb send-estimate-to-contact-person --payload '{"estimateId":"<estimate-id>","budgetId":"<budget-id>","to":"client@example.com","cc":[],"replyTo":"team@example.com","subject":"Estimate","content":"<p>Attached estimate</p>","signature":"<p>Team</p>"}'
|
|
168
|
+
|
|
164
169
|
## `bb budget create`
|
|
165
170
|
|
|
166
171
|
Create Budget.
|
|
@@ -169,6 +174,11 @@ Legacy aliases: `create-budget`, `create_budget`.
|
|
|
169
174
|
|
|
170
175
|
Effects: state-change.
|
|
171
176
|
|
|
177
|
+
Payload fields (--payload JSON)
|
|
178
|
+
Required: name: string; budget: decimal string; paymentTerm: string; categoryId: string; projectId: string
|
|
179
|
+
Optional: sourceBudgetId: string; unavailableItemReviewAcknowledged: boolean (only after review); pipedriveDealId: string
|
|
180
|
+
Example: bb create-budget --payload '{"name":"Event budget","budget":"1500","paymentTerm":"Net 30","categoryId":"<category-id>","projectId":"<project-id>"}'
|
|
181
|
+
|
|
172
182
|
## `bb budget update`
|
|
173
183
|
|
|
174
184
|
Update Budget.
|
|
@@ -177,6 +187,11 @@ Legacy aliases: `update-budget`, `update_budget`.
|
|
|
177
187
|
|
|
178
188
|
Effects: state-change.
|
|
179
189
|
|
|
190
|
+
Payload fields (--payload JSON)
|
|
191
|
+
Required: id: string; name: string; budget: decimal string; paymentTerm: string; categoryId: string; projectId: string
|
|
192
|
+
Optional: sourceBudgetId: string; pipedriveDealId: string
|
|
193
|
+
Example: bb update-budget --payload '{"id":"<budget-id>","name":"Event budget","budget":"1500","paymentTerm":"Net 30","categoryId":"<category-id>","projectId":"<project-id>"}'
|
|
194
|
+
|
|
180
195
|
## `bb budget delete`
|
|
181
196
|
|
|
182
197
|
Delete Budget.
|
|
@@ -273,6 +288,11 @@ Legacy aliases: `update-budget-commission`, `update_budget_commission`.
|
|
|
273
288
|
|
|
274
289
|
Effects: state-change, financial-write.
|
|
275
290
|
|
|
291
|
+
Payload fields (--payload JSON)
|
|
292
|
+
Required: budgetId: string; name: string; percentage: decimal string; totalSellingAfterDiscount: number
|
|
293
|
+
Optional: none
|
|
294
|
+
Example: bb update-budget-commission --payload '{"budgetId":"<budget-id>","name":"Sales commission","percentage":"10","totalSellingAfterDiscount":1500}'
|
|
295
|
+
|
|
276
296
|
## `bb budget discount update`
|
|
277
297
|
|
|
278
298
|
Update Budget Discount.
|
|
@@ -281,6 +301,11 @@ Legacy aliases: `update-budget-discount`, `update_budget_discount`.
|
|
|
281
301
|
|
|
282
302
|
Effects: state-change, financial-write.
|
|
283
303
|
|
|
304
|
+
Payload fields (--payload JSON)
|
|
305
|
+
Required: budgetId: string; name: string; type: percentage|amount; value: decimal string; totalSellingBeforeDiscount: number
|
|
306
|
+
Optional: none
|
|
307
|
+
Example: bb update-budget-discount --payload '{"budgetId":"<budget-id>","name":"Discount","type":"amount","value":"100","totalSellingBeforeDiscount":1500}'
|
|
308
|
+
|
|
284
309
|
## `bb budget commission delete`
|
|
285
310
|
|
|
286
311
|
Delete Budget Commission.
|
|
@@ -353,6 +378,11 @@ Legacy aliases: `create-bill`, `create_bill`.
|
|
|
353
378
|
|
|
354
379
|
Effects: state-change, email, external-write, financial-write.
|
|
355
380
|
|
|
381
|
+
Payload fields (--payload JSON)
|
|
382
|
+
Required: budgetId: string; projectId: string; supplierId: string; amount: number (ex-GST); budgetItemIds: string[]; isClaimable: boolean; supplier bills: quotationIds: string[] or quotationAllocations: {budgetItemId, quotationId, amount}[] (unless --quotation-exempt)
|
|
383
|
+
Optional: lineAmounts: {budgetItemId, amount}[] (required with quotationAllocations); attachments: {id,name,key,size}[]; invoiceNumber: string; invoiceDate: ISO date; draftOnly: boolean; alreadyPaid: boolean; extractedAmount: number
|
|
384
|
+
Example: bb create-bill --payload '{"budgetId":"<budget-id>","projectId":"<project-id>","supplierId":"<supplier-id>","amount":1800,"budgetItemIds":["<budget-item-id>"],"isClaimable":false,"quotationIds":["<quotation-id>"],"attachments":[]}'
|
|
385
|
+
|
|
356
386
|
## `bb bill selection validate`
|
|
357
387
|
|
|
358
388
|
Validate the approved supplier and selected bill line items.
|
|
@@ -361,6 +391,11 @@ Legacy aliases: `validate-bill-selection`, `validate_bill_selection`.
|
|
|
361
391
|
|
|
362
392
|
Effects: none.
|
|
363
393
|
|
|
394
|
+
Payload fields (--payload JSON)
|
|
395
|
+
Required: projectId: string; supplierId: string; budgetItemIds: string[]
|
|
396
|
+
Optional: quotationIds: string[] for supplier bills; isClaimable: boolean; amount: number; lineAmounts: {budgetItemId, amount}[]; quotationAllocations: {budgetItemId, quotationId, amount}[] (requires amount and lineAmounts)
|
|
397
|
+
Example: bb validate-bill-selection --payload '{"projectId":"<project-id>","supplierId":"<supplier-id>","budgetItemIds":["<budget-item-id>"],"quotationIds":["<quotation-id>"]}'
|
|
398
|
+
|
|
364
399
|
## `bb bill quotation link`
|
|
365
400
|
|
|
366
401
|
Link Bill Quotations.
|
|
@@ -369,6 +404,11 @@ Legacy aliases: `link-bill-quotations`, `link_bill_quotations`, `billId`.
|
|
|
369
404
|
|
|
370
405
|
Effects: state-change, financial-write.
|
|
371
406
|
|
|
407
|
+
Payload fields (--payload JSON)
|
|
408
|
+
Required: positional <billId>; quotationIds: string[] or quotationAllocations: {budgetItemId, quotationId, amount}[]
|
|
409
|
+
Optional: none (legacy quotationId is not supported)
|
|
410
|
+
Example: bb link-bill-quotations <billId> --payload '{"quotationIds":["<quotation-id>"]}'
|
|
411
|
+
|
|
372
412
|
## `bb bill update`
|
|
373
413
|
|
|
374
414
|
Update a bill or claim; payload must include id. All amount fields exclude GST: amount is the portion billed; extractedAmount is the full invoice subtotal; lineAmounts and quotationAllocations also exclude GST. Example: 1800 + 162 GST = 1962 total requires amount=1800 and extractedAmount=1800 for a full bill. The CLI does not strip GST from input. Re-read and verify both amount fields and allocations after correcting a gross/net mistake.
|
|
@@ -377,6 +417,11 @@ Legacy aliases: `update-bill`, `update_bill`.
|
|
|
377
417
|
|
|
378
418
|
Effects: state-change, external-write, financial-write.
|
|
379
419
|
|
|
420
|
+
Payload fields (--payload JSON)
|
|
421
|
+
Required: id: string; budgetId: string; projectId: string; supplierId: string; amount: number (ex-GST); budgetItemIds: string[]; isClaimable: boolean
|
|
422
|
+
Optional: quotationIds: string[]; quotationAllocations: {budgetItemId, quotationId, amount}[]; lineAmounts: {budgetItemId, amount}[]; attachments: {id,name,key,size}[]; invoiceNumber: string; invoiceDate: ISO date
|
|
423
|
+
Example: bb update-bill --payload '{"id":"<bill-id>","budgetId":"<budget-id>","projectId":"<project-id>","supplierId":"<supplier-id>","amount":1800,"budgetItemIds":["<budget-item-id>"],"isClaimable":false,"quotationIds":["<quotation-id>"],"attachments":[]}'
|
|
424
|
+
|
|
380
425
|
## `bb bill payment-evidence update`
|
|
381
426
|
|
|
382
427
|
Update Bill Payment Evidence.
|
|
@@ -385,6 +430,11 @@ Legacy aliases: `update-bill-payment-evidence`, `update_bill_payment_evidence`.
|
|
|
385
430
|
|
|
386
431
|
Effects: state-change, financial-write.
|
|
387
432
|
|
|
433
|
+
Payload fields (--payload JSON)
|
|
434
|
+
Required: id: string; paymentReference: string; paymentProofAttachments: {id,name (PDF),key,size}[] (at least one)
|
|
435
|
+
Optional: none
|
|
436
|
+
Example: bb update-bill-payment-evidence --payload '{"id":"<bill-id>","paymentReference":"TRANSFER-123","paymentProofAttachments":[{"id":"<attachment-id>","name":"receipt.pdf","key":"<staged-key>","size":1000}]}'
|
|
437
|
+
|
|
388
438
|
## `bb bill delete`
|
|
389
439
|
|
|
390
440
|
Delete Bill.
|
|
@@ -513,6 +563,11 @@ Legacy aliases: `create-quotation`, `create_quotation`.
|
|
|
513
563
|
|
|
514
564
|
Effects: state-change.
|
|
515
565
|
|
|
566
|
+
Payload fields (--payload JSON)
|
|
567
|
+
Required: projectId: string; budgetId: string; supplierId: string; budgetItemIds: string[]; amountWithoutGst: number; gstAmount: number; attachments: array (uploaded attachment)
|
|
568
|
+
Optional: lineAmounts: {budgetItemId, amount}[] (required for multiple budget items)
|
|
569
|
+
Example: bb create-quotation --payload '{"projectId":"<project-id>","budgetId":"<budget-id>","supplierId":"<supplier-id>","budgetItemIds":["<budget-item-id>"],"amountWithoutGst":1200,"gstAmount":0,"attachments":[{"id":"<attachment-id>","name":"quote.pdf","key":"<staged-key>","size":1000}]}'
|
|
570
|
+
|
|
516
571
|
## `bb quotation update`
|
|
517
572
|
|
|
518
573
|
Update a DRAFT or REJECTED quotation using --payload JSON with id and the complete creation payload. Multiple budget items require lineAmounts: [{"budgetItemId":"<first-id>","amount":750},{"budgetItemId":"<second-id>","amount":450}], covering every budgetItemIds entry exactly once and summing to amountWithoutGst. Amounts exclude GST; use gstAmount: 0 for no GST.
|
|
@@ -521,6 +576,11 @@ Legacy aliases: `update-quotation`, `update_quotation`.
|
|
|
521
576
|
|
|
522
577
|
Effects: state-change.
|
|
523
578
|
|
|
579
|
+
Payload fields (--payload JSON)
|
|
580
|
+
Required: id: string; projectId: string; budgetId: string; supplierId: string; budgetItemIds: string[]; amountWithoutGst: number; gstAmount: number; attachments: array
|
|
581
|
+
Optional: lineAmounts: {budgetItemId, amount}[] (required for multiple budget items)
|
|
582
|
+
Example: bb update-quotation --payload '{"id":"<quotation-id>","projectId":"<project-id>","budgetId":"<budget-id>","supplierId":"<supplier-id>","budgetItemIds":["<budget-item-id>"],"amountWithoutGst":1200,"gstAmount":0,"attachments":[{"id":"<attachment-id>","name":"quote.pdf","key":"<staged-key>","size":1000}]}'
|
|
583
|
+
|
|
524
584
|
## `bb quotation delete`
|
|
525
585
|
|
|
526
586
|
Delete Quotation.
|
|
@@ -641,6 +701,11 @@ Legacy aliases: `create-customer-invoice`, `create_customer_invoice`.
|
|
|
641
701
|
|
|
642
702
|
Effects: state-change, email, external-write, financial-write.
|
|
643
703
|
|
|
704
|
+
Payload fields (--payload JSON)
|
|
705
|
+
Required: budgetId: string; splits: [{label: string, percentage: number, dueDate: ISO date}] (exactly one)
|
|
706
|
+
Optional: requestId: UUID string (recommended); invoiceDate: ISO date; details: {billingAddress: string, customerMemo: string}; isCustomPercentage: boolean
|
|
707
|
+
Example: bb create-customer-invoice --payload '{"budgetId":"<budget-id>","splits":[{"label":"Deposit","percentage":50,"dueDate":"2026-10-15"}],"details":{"billingAddress":"1 Example St","customerMemo":"Thanks"}}'
|
|
708
|
+
|
|
644
709
|
## `bb customer-invoice discard`
|
|
645
710
|
|
|
646
711
|
Discard Customer Invoice.
|
|
@@ -689,6 +754,11 @@ Legacy aliases: `send-customer-invoice-to-contact-person`, `send_customer_invoic
|
|
|
689
754
|
|
|
690
755
|
Effects: state-change, email.
|
|
691
756
|
|
|
757
|
+
Payload fields (--payload JSON)
|
|
758
|
+
Required: invoiceId: string; to: email; cc: email[]; replyTo: email; subject: string; content: HTML string; signature: HTML string
|
|
759
|
+
Optional: none
|
|
760
|
+
Example: bb send-customer-invoice-to-contact-person --payload '{"invoiceId":"<invoice-id>","to":"client@example.com","cc":[],"replyTo":"team@example.com","subject":"Invoice","content":"<p>Attached invoice</p>","signature":"<p>Team</p>"}'
|
|
761
|
+
|
|
692
762
|
## `bb customer-invoice pdf download`
|
|
693
763
|
|
|
694
764
|
Download a customer invoice PDF when permitted.
|
|
@@ -817,6 +887,11 @@ Legacy aliases: `update-company`, `update_company`.
|
|
|
817
887
|
|
|
818
888
|
Effects: state-change, external-write.
|
|
819
889
|
|
|
890
|
+
Payload fields (--payload JSON)
|
|
891
|
+
Required: id: string; name: string; website: URL string
|
|
892
|
+
Optional: confirmDistinct: boolean
|
|
893
|
+
Example: bb update-company --payload '{"id":"<company-id>","name":"Example Co","website":"https://example.com"}'
|
|
894
|
+
|
|
820
895
|
## `bb company delete`
|
|
821
896
|
|
|
822
897
|
Delete Company.
|
|
@@ -875,7 +950,7 @@ Effects: state-change, external-write.
|
|
|
875
950
|
|
|
876
951
|
## `bb project create`
|
|
877
952
|
|
|
878
|
-
Create
|
|
953
|
+
Create a project linked to an existing Asana Deals lead task. Supply --asanaTaskId in non-interactive use; interactive use searches for and selects a lead task (optionally --asanaSearch). The Slack channel is resolved from the selected Asana task unless all three Slack channel flags are supplied. For a new direct client, create the lead task using the website form first.
|
|
879
954
|
|
|
880
955
|
Legacy aliases: `create-project`, `create_project`.
|
|
881
956
|
|
|
@@ -889,6 +964,11 @@ Legacy aliases: `update-project`, `update_project`.
|
|
|
889
964
|
|
|
890
965
|
Effects: state-change, external-write.
|
|
891
966
|
|
|
967
|
+
Payload fields (--payload JSON)
|
|
968
|
+
Required: id: string; name: string; companyId: string; contactPersonId: string; asanaTaskId: string; insideSalesId: string; businessDevelopmentId: string; venue: string; dateRange: {from: ISO date}
|
|
969
|
+
Optional: dateRange.to: ISO date; projectManagerId: string; pax: string; description: string; slackChannelId/slackChannelUrl/slackChannelName: strings (supply all three); requestQboAccountantNotification: boolean; confirmEstimateInvalidation: boolean
|
|
970
|
+
Example: bb update-project --payload '{"id":"<project-id>","name":"Launch","companyId":"<company-id>","contactPersonId":"<contact-id>","asanaTaskId":"<asana-task-id>","insideSalesId":"<user-id>","businessDevelopmentId":"<user-id>","venue":"Hall","dateRange":{"from":"2026-10-01T09:00:00Z"}}'
|
|
971
|
+
|
|
892
972
|
## `bb project delete`
|
|
893
973
|
|
|
894
974
|
Delete Project.
|
|
@@ -953,6 +1033,11 @@ Legacy aliases: `create-contact-person`, `create_contact_person`.
|
|
|
953
1033
|
|
|
954
1034
|
Effects: state-change.
|
|
955
1035
|
|
|
1036
|
+
Payload fields (--payload JSON)
|
|
1037
|
+
Required: companyId: string; title: MR|MRS|MS|DR; firstName: string; lastName: string|null; email: string; mobile: string
|
|
1038
|
+
Optional: address: {streetAddress1?, city?, state?, postalCode?, country?}
|
|
1039
|
+
Example: bb create-contact-person --payload '{"companyId":"<company-id>","title":"MS","firstName":"Jane","lastName":"Tan","email":"jane@example.com","mobile":"+65 9123 4567"}'
|
|
1040
|
+
|
|
956
1041
|
## `bb contact update`
|
|
957
1042
|
|
|
958
1043
|
Update Contact Person.
|
|
@@ -961,6 +1046,11 @@ Legacy aliases: `update-contact-person`, `update_contact_person`.
|
|
|
961
1046
|
|
|
962
1047
|
Effects: state-change.
|
|
963
1048
|
|
|
1049
|
+
Payload fields (--payload JSON)
|
|
1050
|
+
Required: id: string; companyId: string; title: MR|MRS|MS|DR; firstName: string; lastName: string|null; email: string; mobile: string
|
|
1051
|
+
Optional: address: object
|
|
1052
|
+
Example: bb update-contact-person --payload '{"id":"<contact-id>","companyId":"<company-id>","title":"MS","firstName":"Jane","lastName":"Tan","email":"jane@example.com","mobile":"+65 9123 4567"}'
|
|
1053
|
+
|
|
964
1054
|
## `bb supplier list`
|
|
965
1055
|
|
|
966
1056
|
List suppliers.
|
|
@@ -977,6 +1067,11 @@ Legacy aliases: `create-supplier`, `create_supplier`.
|
|
|
977
1067
|
|
|
978
1068
|
Effects: state-change, email, external-write.
|
|
979
1069
|
|
|
1070
|
+
Payload fields (--payload JSON)
|
|
1071
|
+
Required: name: string; primaryContactPerson: string; email: string; phone: string; paymentMethodId: string; paymentTerm: string; roleId: string
|
|
1072
|
+
Optional: gstRegistered: boolean; tags: string[]; website: URL string; address: object; attachments: array; bank and PayNow fields
|
|
1073
|
+
Example: bb create-supplier --payload '{"name":"Example Supplier","primaryContactPerson":"Jane Tan","email":"jane@example.com","phone":"91234567","paymentMethodId":"<method-id>","paymentTerm":"Net 30","roleId":"<role-id>"}'
|
|
1074
|
+
|
|
980
1075
|
## `bb supplier update`
|
|
981
1076
|
|
|
982
1077
|
Update Supplier.
|
|
@@ -985,6 +1080,11 @@ Legacy aliases: `update-supplier`, `update_supplier`.
|
|
|
985
1080
|
|
|
986
1081
|
Effects: state-change, email, external-write.
|
|
987
1082
|
|
|
1083
|
+
Payload fields (--payload JSON)
|
|
1084
|
+
Required: id: string; name: string; primaryContactPerson: string; email: string; phone: string; paymentMethodId: string; paymentTerm: string; roleId: string
|
|
1085
|
+
Optional: gstRegistered: boolean; tags: string[]; website: URL string; address: object; attachments: array; bank and PayNow fields
|
|
1086
|
+
Example: bb update-supplier --payload '{"id":"<supplier-id>","name":"Example Supplier","primaryContactPerson":"Jane Tan","email":"jane@example.com","phone":"91234567","paymentMethodId":"<method-id>","paymentTerm":"Net 30","roleId":"<role-id>"}'
|
|
1087
|
+
|
|
988
1088
|
## `bb supplier delete`
|
|
989
1089
|
|
|
990
1090
|
Delete Suppliers.
|
|
@@ -1065,6 +1165,11 @@ Legacy aliases: `create-item`, `create_item`.
|
|
|
1065
1165
|
|
|
1066
1166
|
Effects: state-change, external-write.
|
|
1067
1167
|
|
|
1168
|
+
Payload fields (--payload JSON)
|
|
1169
|
+
Required: name: string (QuickBooks-safe characters); categoryId: string; supplierId: string; cost: decimal string or number
|
|
1170
|
+
Optional: description: string; gstInclusive: boolean; gstOutOfScope: boolean; goLabsProduct: boolean; attachments: array
|
|
1171
|
+
Example: bb create-item --payload '{"name":"Event Crew per hour","categoryId":"<category-id>","supplierId":"<supplier-id>","cost":19}'
|
|
1172
|
+
|
|
1068
1173
|
## `bb item update`
|
|
1069
1174
|
|
|
1070
1175
|
Update Item.
|
|
@@ -1073,6 +1178,11 @@ Legacy aliases: `update-item`, `update_item`.
|
|
|
1073
1178
|
|
|
1074
1179
|
Effects: state-change, external-write.
|
|
1075
1180
|
|
|
1181
|
+
Payload fields (--payload JSON)
|
|
1182
|
+
Required: id: string; name: string; categoryId: string; supplierId: string; cost: decimal string or number
|
|
1183
|
+
Optional: description: string; gstInclusive: boolean; gstOutOfScope: boolean; goLabsProduct: boolean; attachments: array
|
|
1184
|
+
Example: bb update-item --payload '{"id":"<item-id>","name":"Event Crew per hour","categoryId":"<category-id>","supplierId":"<supplier-id>","cost":"19"}'
|
|
1185
|
+
|
|
1076
1186
|
## `bb item archive`
|
|
1077
1187
|
|
|
1078
1188
|
Archive Items.
|
|
@@ -1297,6 +1407,11 @@ Legacy aliases: `save-inbound-mapping`, `save_inbound_mapping`.
|
|
|
1297
1407
|
|
|
1298
1408
|
Effects: state-change.
|
|
1299
1409
|
|
|
1410
|
+
Payload fields (--payload JSON)
|
|
1411
|
+
Required: positional <sourceId>; payload: [{canonicalField: enum, typeformFieldId: string, required?: boolean, typeformFieldRef?: string|null}] (1-50 entries)
|
|
1412
|
+
Optional: required defaults false; typeformFieldRef may be omitted
|
|
1413
|
+
Example: bb save-inbound-mapping <sourceId> --payload '[{"canonicalField":"CONTACT_FIRST_NAME","typeformFieldId":"<typeform-field-id>"}]'
|
|
1414
|
+
|
|
1300
1415
|
## `bb inbound automation save`
|
|
1301
1416
|
|
|
1302
1417
|
Save Inbound Automation Config.
|
|
@@ -1305,6 +1420,11 @@ Legacy aliases: `save-inbound-automation-config`, `save_inbound_automation_confi
|
|
|
1305
1420
|
|
|
1306
1421
|
Effects: state-change.
|
|
1307
1422
|
|
|
1423
|
+
Payload fields (--payload JSON)
|
|
1424
|
+
Required: positional <sourceId>; asanaCustomFields: object; asanaDefaultAssigneeId: string|null; asanaDefaultAssigneeName: string|null; asanaFollowerIds: string[]; asanaProjectId: string; asanaSectionId: string; asanaWonSectionId: string; asanaLostSectionId: string; googleCalendarId: string; googleCalendarTimeZone: string; goshBriefBaseUrl: URL; slackDefaultAssigneeId: string|null; slackInboundChannelId: string; slackInviteUserIds: string[]; slackPitchChannelPrefix: string
|
|
1425
|
+
Optional: asanaDiscussionSectionId, asanaFirstContactSectionId, asanaFirstProposalSentSectionId, asanaProposalWipSectionId: string|null; asanaCustomFields.*: mapped IDs
|
|
1426
|
+
Example: bb save-inbound-automation-config <sourceId> --payload '{"asanaCustomFields":{},"asanaDefaultAssigneeId":null,"asanaDefaultAssigneeName":null,"asanaFollowerIds":[],"asanaProjectId":"<asana-project-id>","asanaSectionId":"<asana-section-id>","asanaWonSectionId":"<asana-won-id>","asanaLostSectionId":"<asana-lost-id>","googleCalendarId":"team@example.com","googleCalendarTimeZone":"Asia/Singapore","goshBriefBaseUrl":"https://example.com/brief","slackDefaultAssigneeId":null,"slackInboundChannelId":"<slack-channel-id>","slackInviteUserIds":[],"slackPitchChannelPrefix":"pitch"}'
|
|
1427
|
+
|
|
1308
1428
|
## `bb inbound processing update`
|
|
1309
1429
|
|
|
1310
1430
|
Update Inbound Processing.
|