@tocca-systems/twp-cli 0.35.0 → 0.36.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.public.md +6 -0
- package/README.md +35 -7
- package/dist/{api-command-AHVUUK3I.js → api-command-YUZFGC2W.js} +2 -2
- package/dist/{app-JPJHLNTW.js → app-NIJ3MAGU.js} +3 -3
- package/dist/{auto-update-worker-73HBKKVT.js → auto-update-worker-Y44TD6FD.js} +1 -1
- package/dist/{backlog-NS2V3WKG.js → backlog-2VHFVU5C.js} +1 -1
- package/dist/{chunk-WQRWQ7IM.js → chunk-DBIDYOKW.js} +1 -1
- package/dist/{chunk-FII7YYYZ.js → chunk-DCGL7XJF.js} +1 -1
- package/dist/{chunk-N4ZW4IVU.js → chunk-HAIZHSNZ.js} +2 -2
- package/dist/{chunk-7CQKNDAE.js → chunk-IF2K4PM5.js} +1 -1
- package/dist/chunk-MQ3WFH54.js +141 -0
- package/dist/{chunk-Z7GNYWCU.js → chunk-PLBOUQE7.js} +1 -1
- package/dist/{chunk-77DFFCZF.js → chunk-PWXXCLVZ.js} +1 -1
- package/dist/{chunk-U6RXDDAB.js → chunk-R5HF6LTR.js} +9 -9
- package/dist/{chunk-DU42VCON.js → chunk-REPGG75N.js} +1 -1
- package/dist/{chunk-EVR3OFVS.js → chunk-VECUCVIY.js} +8 -8
- package/dist/chunk-XNW2UNWQ.js +6 -0
- package/dist/cli.js +61 -8
- package/dist/{commands-RQQN7TXW.js → commands-OABOHHNC.js} +1 -1
- package/dist/company-6HMFGVPJ.js +161 -0
- package/dist/{department-XRIBRAQE.js → department-DH5YABBF.js} +1 -1
- package/dist/{inquiry-LOH3OKG3.js → inquiry-67OW3HBZ.js} +1 -1
- package/dist/{job-title-EMRVK4RO.js → job-title-YEIANJNC.js} +1 -1
- package/dist/{leave-BGDVEHQ7.js → leave-XXDCHUGK.js} +1 -1
- package/dist/{media-OQRJYMJT.js → media-NZD6J7KE.js} +4 -5
- package/dist/{notification-4DFO464P.js → notification-BQ4ODX6U.js} +1 -1
- package/dist/{oneshot-QLTXLUSM.js → oneshot-GCQYYNIH.js} +1 -1
- package/dist/{position-3NRFWS3E.js → position-WR5YODDU.js} +1 -1
- package/dist/{prospect-7L2UUNY3.js → prospect-YZUHE7PL.js} +3 -3
- package/dist/{registry-XL6Z2QCB.js → registry-3O2KBG5I.js} +1 -1
- package/dist/{report-YIOEMKUU.js → report-SGAVGU4G.js} +1 -1
- package/dist/{run-N5EIN5WQ.js → run-WXHHCFT7.js} +1 -1
- package/dist/{sales-7DTKXDMD.js → sales-OFEVE2PG.js} +1 -1
- package/dist/{task-CBJOR2GF.js → task-IE7DNU34.js} +2 -2
- package/dist/{update-3D2CMAIV.js → update-MAQJ6VWV.js} +1 -1
- package/dist/{user-TNGMHVOJ.js → user-UJIB3SCU.js} +1 -1
- package/dist/{workflow-XDGT7L6G.js → workflow-QWVZH4NG.js} +1 -1
- package/package.json +1 -1
- package/dist/chunk-A2MX47LP.js +0 -85
- package/dist/chunk-IWIGE7U4.js +0 -6
- package/dist/company-4O3HA6A2.js +0 -26
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.36.0
|
|
15
|
+
|
|
16
|
+
顧客管理の操作が CLI からひととおりできるようになりました。担当者・対応履歴の詳細、最近の対応の一覧、名刺画像の登録と裏面メモ、企業をまたいだ人物の一覧と CSV 書き出し、登録前の類似企業検索、仕入先を含む取引先企業の登録・更新・削除ができます。
|
|
17
|
+
|
|
18
|
+
顧客の契約書を CLI から扱えるようになりました。PDF の登録・版の差替え・ダウンロード(過去版を含む)・書類名の変更・削除ができます。あわせて、顧客の案件書類の一覧と、施策マスタの作成・更新・削除ができるようになりました。
|
|
19
|
+
|
|
14
20
|
## 0.35.0
|
|
15
21
|
|
|
16
22
|
レポート(日報)を CLI から書けるようになりました(`twp report`)。フォーマットの入力項目から雛形を作り、下書きの作成・更新・提出ができます。
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
24
24
|
| **できる** | `twp department` / `twp position` / `twp job-title` による組織マスタ(部署・役職・職位)の一覧・取得・作成・更新・削除と、部署ツリー・部署の所属者の表示。作成・更新・削除は管理者の権限が要ります |
|
|
25
25
|
| **できる** | `twp inquiry category` による問い合わせカテゴリの一覧・取得・作成・更新(通知先の設定・末尾への並べ替えを含む)。取得・作成・更新は問い合わせ機能の管理者の権限が要ります |
|
|
26
26
|
| **できる** | `twp notification` による自分宛ての通知の一覧(未読・カテゴリ・語で絞り込み)・詳細・未読件数・カテゴリ一覧と、1件ずつ・まとめての既読化 |
|
|
27
|
-
| **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細、`twp company` / `twp customer` による取引先企業・顧客の一覧と詳細(名前でも指定できます)、`twp customer` による顧客の登録・更新・削除(担当者・対応履歴ごと。ID
|
|
27
|
+
| **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細、`twp company` / `twp customer` による取引先企業・顧客の一覧と詳細(名前でも指定できます)、`twp customer` による顧客の登録・更新・削除(担当者・対応履歴ごと。ID を並べたファイルでの一括削除を含む)と担当者・対応履歴の一覧・詳細・登録・更新・削除、全顧客の最近の対応、名刺画像の登録・裏面メモ・削除、企業をまたいだ人物の一覧・詳細・CSV 書き出し、登録前の類似企業検索、`twp company` による取引先企業(仕入先を含む)の登録・更新・削除、`twp prospect` によるアプローチ先(見込客)の一覧・登録・更新・削除・CSV での一括登録と書き出し・重複確認・顧客への昇格と対応履歴の記録。販売管理・顧客管理の権限が要ります |
|
|
28
28
|
| **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・削除(ゴミ箱へ移す)・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP ダウンロード)、`twp storage get` によるストレージ使用量の確認(管理者) |
|
|
29
29
|
| **できる** | `twp attendance` による自分の勤怠の参照(いまの打刻状態・打刻の履歴・月の勤怠表)と打刻、管理者向けの残業サマリ(36協定を含む)・締め状況の参照 |
|
|
30
30
|
| **できる** | `twp leave` による有給の残日数・取得履歴・付与履歴の参照、`twp workchange list` / `twp shift list` による月の勤務変更・シフトの参照(`--me` で自分の分・無ければ全員分=勤怠の管理者) |
|
|
@@ -366,7 +366,7 @@ twp customer get <顧客>
|
|
|
366
366
|
- `get <見積ID>` / `get <請求ID>` は一覧の `id` 列の数字です。見積番号・請求番号で探すなら `list --keyword <番号>` を使ってください
|
|
367
367
|
- 請求の一覧は画面と同じく、統合請求書を本体1行で出し、統合元の請求はその `children` に入ります
|
|
368
368
|
- 一覧は **ページ番号で辿ります**(`--cursor` はページ番号・`--limit` は1ページの件数でサーバの上限は100)。並びは登録の新しい順(ID の降順)に固定しています。絞り込み全体の件数と合計金額は stderr に出ます
|
|
369
|
-
-
|
|
369
|
+
- 画面にあるそれ以外の絞り込み(確度・見積区分・部署など)と、見積・請求の作成・更新・削除はまだありません(顧客・取引先は次の節。`twp api /api/v2/sales/estimates --query-param reliability_list=A` のように到達できます。ただし `twp api` はこの一覧の続きを自動では辿らず1ページだけを返すので、`--query-param page_no=2` のようにページを送ってください)
|
|
370
370
|
- ヘルプは `twp estimate help` / `twp invoice help` / `twp company help` / `twp customer help`
|
|
371
371
|
|
|
372
372
|
### 顧客を登録・更新・削除する
|
|
@@ -376,18 +376,46 @@ twp customer create --name <企業名> [--kana <フリガナ>] [--tel <電話番
|
|
|
376
376
|
twp customer update <顧客> [項目…]
|
|
377
377
|
twp customer delete <顧客> --yes
|
|
378
378
|
twp customer delete --file <ファイル> [--dry-run] --yes
|
|
379
|
-
twp customer contact list|create|update|delete [<担当者ID>] --customer <顧客> [項目…]
|
|
380
|
-
twp customer interaction list|create|update|delete [<対応履歴ID>] --customer <顧客> [項目…]
|
|
379
|
+
twp customer contact list|get|create|update|delete [<担当者ID>] --customer <顧客> [項目…]
|
|
380
|
+
twp customer interaction list|get|create|update|delete [<対応履歴ID>] --customer <顧客> [項目…]
|
|
381
|
+
twp customer interaction recent [--all]
|
|
382
|
+
twp customer business-card list|add --customer <顧客> --contact <担当者ID> [--front <画像>] [--back <画像>] [--note <裏面メモ>]
|
|
383
|
+
twp customer business-card note|delete <名刺ID> --customer <顧客> --contact <担当者ID> [--note <メモ> | --clear]
|
|
384
|
+
twp customer people list [--keyword <語>] [--company <語>] [--owner <ユーザー>] [--campaign <施策ID>]... [--is-customer true|false] [--all]
|
|
385
|
+
twp customer people get <人物ID>
|
|
386
|
+
twp customer people export --out <パス.csv> [--force] [同じ絞り込み]
|
|
387
|
+
twp customer search-similar <企業名>
|
|
388
|
+
twp customer contract list|get [<書類ID>] --customer <顧客>
|
|
389
|
+
twp customer contract update <書類ID> --customer <顧客> [--name <書類名>] [--type basic_contract|nda|other]
|
|
390
|
+
twp customer contract delete <書類ID> --customer <顧客> --yes
|
|
391
|
+
twp customer contract create --customer <顧客> --file <パス.pdf> --type basic_contract|nda|other --name <書類名>
|
|
392
|
+
twp customer contract add-version <書類ID> --customer <顧客> --file <パス.pdf>
|
|
393
|
+
twp customer contract download <書類ID> --customer <顧客> --out <パス> [--rev <版番号>] [--force]
|
|
394
|
+
twp customer case-document list --customer <顧客>
|
|
395
|
+
twp customer campaign list [--keyword <語>] [--active true|false]
|
|
396
|
+
twp customer campaign get <施策ID>
|
|
397
|
+
twp customer campaign create|update [<施策ID>] [--name <施策名>] [--description <説明>] [--sort-order <整数>] [--active true|false]
|
|
398
|
+
twp customer campaign delete <施策ID> --yes
|
|
399
|
+
twp company create --name <企業名> (--customer true | --supplier true) [項目…]
|
|
400
|
+
twp company update <取引先> [項目…]
|
|
401
|
+
twp company delete <取引先> --yes
|
|
381
402
|
```
|
|
382
403
|
|
|
383
404
|
- **`delete` は顧客(取引先企業)と、それに紐づく担当者・対応履歴をまとめて消します。** 送る前に件数(企業N社・担当者M件・対応履歴K件)を stderr に出すので、`--dry-run` で下見してから `--yes` を付けて打ってください
|
|
384
|
-
- 順序は企業ごとに「企業の削除 → 担当者の削除 →
|
|
405
|
+
- 順序は企業ごとに「企業の削除 → 担当者の削除 → 対応履歴が残っていないかの確認」です。**見積・請求書・案件書類・契約書・プロジェクト等から参照されている企業はサーバが削除を断り、その理由(「見積2件・案件書類1件…」)をそのまま出して止まります。** その企業では担当者も消しません
|
|
385
406
|
- **一括(`--file`)は1行に1つ顧客の ID を書きます**(名前は受けません。空行と `#` の行は読み飛ばします)。仕入先だけの取引先・ID の形の誤り・重複が1行でもあれば、1件も消さずに行番号と理由を全部出します
|
|
386
407
|
- 途中で止まったら、完了した企業・どこまで消えたか・未着手の ID を出します(終了コード 3)。原因を取り除いて**同じコマンドを打ち直すと、削除済みの企業は残りの担当者・対応履歴だけを消して進みます**
|
|
387
408
|
- 顧客かつ仕入先の企業も削除します(企業は1件なので仕入先としても消えます。下見で知らせます)。仕入先だけの取引先は `twp customer` では扱いません
|
|
388
409
|
- 権限: 登録・更新は顧客管理の「編集者」以上か販売管理の「メンバー」以上。削除は、企業が顧客管理の「管理者」か販売管理の「メンバー」以上、担当者・対応履歴が顧客管理の「管理者」。**担当者・対応履歴が残る顧客を顧客管理の「管理者」でない権限で消そうとすると、企業だけ消えて担当者が残るのを避けるため1件も送らずに止めます**
|
|
389
|
-
-
|
|
390
|
-
-
|
|
410
|
+
- **名刺(`business-card add`)は画像のアップロードと登録を1コマンドで行います。** 送る前にテナントの容量を検査し、超過なら何も送りません。画像を上げる前に、担当者がその顧客にいることと、顧客管理の権限(「編集者」以上)を確かめます。既存の名刺は差し替えず、追加した名刺が最新になります。裏面メモ(`--note`)は裏面の画像がある名刺にだけ付けられます。画像そのものは `twp task attachment download <添付ID> --out <パス>` で取り出せます
|
|
411
|
+
- **人物(`people`)は企業をまたいだ担当者の一覧です。** サーバは担当者を最大 5,000 件まで集めて並べるので、それを超えるテナントでは一覧・CSV が全件になりません。そのときは stderr に「全件ではありません」と出ます(CSV は `--output json` の `headers` にも出ます)。CSV 出力は顧客管理の「管理者」だけです
|
|
412
|
+
- **`twp company delete` は担当者を消しません**(対応履歴だけサーバが併せて消します)。担当者が残る取引先は送る前に止め、`twp customer delete` を案内します
|
|
413
|
+
- `twp customer search-similar` は顧客だけでなく仕入先だけの取引先も当てます
|
|
414
|
+
- **契約書(`contract create` / `add-version`)は PDF のアップロードと登録を1コマンドで行います。** 送る前にテナントの容量を検査し、超過なら何も送りません。PDF 以外(名前が `.pdf` で終わらない・中身の先頭が `%PDF-` でない)はサーバも受け付けないので、送る前に止めます。差替えは新しい版として足され、過去版は `contract get` の `versions` に残り `download --rev <版番号>` で取り出せます。登録・差替え・更新は顧客管理の「編集者」以上、削除は「管理者」です。**契約書が残っている顧客はサーバが削除を断る**ので、顧客を消す前に `contract delete` で消してください
|
|
415
|
+
- 案件書類(`case-document list`)は見積をまたいだ一覧だけです(登録・差替え・削除・ダウンロードは見積ごとの操作で、CLI にはまだありません)。案件書類が残る顧客もサーバが削除を断るので、その顧客は画面から案件書類を片付けてから削除してください
|
|
416
|
+
- 施策(`campaign`)の作成・更新・削除は顧客管理の「管理者」だけです。**サーバは担当者・アプローチ先からの参照を検査せずに削除する**ので、参照を残したまま止めるなら `--active false` で無効にしてください
|
|
417
|
+
- タグ・施策の紐づけはまだありません(`twp api /api/v2/customers/<顧客ID>/contacts/<担当者ID>` に `tags` / `campaign_ids` を送って到達できます)
|
|
418
|
+
- ヘルプは `twp customer delete help` / `twp customer contact help` / `twp customer interaction help` / `twp customer business-card help` / `twp customer people help` / `twp customer contract help` / `twp customer case-document help` / `twp customer campaign help` / `twp company help`
|
|
391
419
|
|
|
392
420
|
### アプローチ先(見込客)を扱う
|
|
393
421
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
import{parseOperationArgs,repeatedValues}from"./chunk-IOGVQVGD.js";import"./chunk-
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-R5HF6LTR.js";import{renderOutput}from"./chunk-6NEQ6PZZ.js";import{redactSecretValues,withDebug}from"./chunk-BUZKNZ45.js";import"./chunk-XNW2UNWQ.js";import{evaluateQuery}from"./chunk-GDM2QUBL.js";import{readBody}from"./chunk-HGTG5XQ7.js";
|
|
4
|
+
import{parseOperationArgs,repeatedValues}from"./chunk-IOGVQVGD.js";import"./chunk-DBIDYOKW.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-TAN5I2DP.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";
|
|
5
5
|
import{HELP_TOKEN}from"./chunk-523KROGI.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,positiveInteger,readEnvelopeCursor,shellQuote}from"./chunk-R53CMVWR.js";import"./chunk-II5RVJQN.js";import{EXIT_OK,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-RZVI6PMW.js";
|
|
6
6
|
import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
|
|
7
7
|
test(segment)?null:segment)})}parsedCache.set(routes,parsed);return parsed}function matches(route,segments){if(route.segments.length!==segments.length)return false;return route.segments.every((literal,i)=>literal===null||literal===segments[i])}function compareSpecificity(a,b){const literals=route=>route.segments.filter(segment=>segment!==null).length;const diff=literals(b)-literals(a);if(diff!==0)return diff;for(let i=0;i<a.segments.length;i+=1){const aLiteral=a.segments[i]!==null;const bLiteral=b.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-
|
|
4
|
-
import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-
|
|
3
|
+
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-HAIZHSNZ.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-BUZKNZ45.js";
|
|
4
|
+
import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-DBIDYOKW.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-PWXXCLVZ.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,
|
|
5
5
|
isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-VQMR5UTD.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-523KROGI.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
|
|
6
6
|
import"./chunk-N2UVRM3Z.js";import"./chunk-II5RVJQN.js";import"./chunk-7WSNIXTQ.js";import"./chunk-PMOUHEJQ.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
|
|
|
1212
1212
|
1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
|
|
1213
1213
|
`}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
|
|
1214
1214
|
`}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
|
|
1215
|
-
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-
|
|
1215
|
+
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-WXHHCFT7.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
|
|
1216
1216
|
{},argv:parsed.domainArgv,help:parsed.domainHelp,globals,version:deps.version,io,...deps.fetchImpl!==void 0?{fetchImpl:deps.fetchImpl}:{}});return{code,out,err}}catch(e){return{code:1,out,err:`${err}${e.message}
|
|
1217
1217
|
`}}}var GIT_LOG_OUTPUT=["9f3c1a2 feat(ui): \u4E00\u89A7\u306E\u30D5\u30A3\u30EB\u30BF\u3092 URL \u30AF\u30A8\u30EA\u3068\u540C\u671F\u3059\u308B","4b8e0d7 fix(ui): \u4EEE\u60F3\u30B9\u30AF\u30ED\u30FC\u30EB\u306E\u884C\u9AD8\u3055\u3092\u5B9F\u6E2C\u5024\u306B\u5408\u308F\u305B\u308B","c15a99e refactor(api): \u4E00\u89A7\u53D6\u5F97\u306E\u30DA\u30FC\u30B8\u30F3\u30B0\u51E6\u7406\u3092\u5171\u901A\u5316\u3059\u308B","2d70f4b test: \u4E00\u89A7\u30D5\u30A3\u30EB\u30BF\u306E\u56DE\u5E30\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
|
|
1218
1218
|
"a6e2b38 fix(api): \u7A7A\u306E\u691C\u7D22\u6761\u4EF6\u3067\u5168\u4EF6\u8FD4\u3089\u306A\u3044\u3088\u3046\u306B\u3059\u308B","7c40d51 chore(deps): \u958B\u767A\u4F9D\u5B58\u3092\u6700\u65B0\u3078\u66F4\u65B0\u3059\u308B","e83b1c6 docs: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u624B\u9806\u306B Node 22 \u306E\u524D\u63D0\u3092\u8FFD\u8A18\u3059\u308B","b91f7a4 fix(ui): \u30E2\u30FC\u30C0\u30EB\u306E\u91CD\u306A\u308A\u9806\u3092\u6307\u5B9A\u3059\u308B","5a2c8e0 perf(api): \u4E00\u89A7\u306E N+1 \u3092\u89E3\u6D88\u3059\u308B",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-
|
|
3
|
+
import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-REPGG75N.js";import"./chunk-PWXXCLVZ.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-2NKVGAAE.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";
|
|
4
4
|
import"./chunk-4VZKNEVN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-VSJBJXZO.js";import{execFile}from"child_process";import fs from"fs";import path from"path";var PARENT_WAIT_MAX_MS=12*60*60*1e3;var PARENT_POLL_MS=1e3;var LOCK_STALE_MS=PARENT_WAIT_MAX_MS+60*60*1e3;var INSTALL_TIMEOUT_MS=0;function childEnv(env){const next={...env};delete next[WORKER_ENV];delete next[PARENT_PID_ENV];return next}function createNpmRunner(env=process.env){const cmd=resolveNpmCommand({env});if(cmd===null)return null;return(args,timeoutMs)=>new Promise(resolve=>{execFile(cmd.file,[...cmd.prefix,...args],{timeout:timeoutMs,windowsHide:true,maxBuffer:8*1024*1024,cwd:path.dirname(lockFilePath(env)),env:childEnv(env)},(error,stdout,stderr)=>{if(error===null){resolve({ok:true,stdout:String(stdout),stderr:String(
|
|
5
5
|
stderr)});return}const e=error;resolve({ok:false,stdout:String(stdout??""),stderr:String(stderr??""),...e.killed?{error:"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F"}:typeof e.code==="string"?{error:e.code}:{}})})})}function summarizeNpmFailure(result){const text=`${result.stderr}
|
|
6
6
|
${result.stdout}`;const code=/npm (?:ERR!|error) code (\S+)/.exec(text)?.[1]??result.error;let reason;if(code==="EACCES"||code==="EPERM"){reason=`\u30B0\u30ED\u30FC\u30D0\u30EB\u306E\u5C0E\u5165\u5148\u306B\u66F8\u304D\u8FBC\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\uFF08${code}\uFF09`}else if(code!==void 0&&/^(ENOTFOUND|ETIMEDOUT|ECONNREFUSED|ECONNRESET|EAI_AGAIN|ENETUNREACH)$/.test(code)){reason=`npm registry \u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${code}\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{readBody}from"./chunk-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-
|
|
3
|
+
import{readBody}from"./chunk-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-DBIDYOKW.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-NHYMHCAT.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";
|
|
4
4
|
import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-RZVI6PMW.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
|
|
5
5
|
eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","create\
|
|
6
6
|
dUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","mailAddress","roleType"];var SPACE_FLAG={name:"--space",summary:"Backlog \u30B9\u30DA\u30FC\u30B9\uFF08ID / \u30B9\u30DA\u30FC\u30B9URL / \u30B5\u30D6\u30C9\u30E1\u30A4\u30F3\uFF09\u3002\u767B\u9332\u304C1\u4EF6\u306A\u3089\u7701\u7565\u3067\u304D\u307E\u3059",takesValue:true,placeholder:"<ID|URL>"};var BODY_MAX_CHARS=1e5;var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{ApiError}from"./chunk-
|
|
3
|
+
import{ApiError}from"./chunk-IF2K4PM5.js";import{ResolveError,UUID_RE,isSafePathSegment,resolveProjectRef,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{loadProjectConfig,loadUserConfig}from"./chunk-4VZKNEVN.js";import{isTaskKey}from"./chunk-II5RVJQN.js";import{UsageError}from"./chunk-7WSNIXTQ.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";var BACKLOG_BASE_PATH="/api/v2/integrations/backlog";function assertBacklogPathSegment(value,label){if(!isSafePathSegment(value)){throw new ResolveError(`${label}\u3068\u3057\u3066 URL \u306B\u5165\u308C\u3089\u308C\u306A\u3044\u5024\u304C\u30B5\u30FC\u30D0\u304B\u3089\u8FD4\u308A\u307E\u3057\u305F: ${JSON.stringify(value)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function backlogSpacePath(spaceId,suffix=""){assertBacklogPathSegment(spaceId,
|
|
4
4
|
"Backlog \u30B9\u30DA\u30FC\u30B9 ID");return`${BACKLOG_BASE_PATH}/${encodeURIComponent(spaceId)}${suffix}`}function idString(value){if(typeof value==="number"&&Number.isFinite(value))return String(value);if(typeof value==="string"&&value.trim()!=="")return value.trim();return null}function text(value){return typeof value==="string"&&value.trim()!==""?value.trim():null}function backlogSpaceAliases(spaceUrl){const aliases=[];const trimmed=spaceUrl.trim().replace(/\/+$/,"");if(trimmed==="")return aliases;
|
|
5
5
|
let host;try{host=new URL(trimmed).host}catch{host=trimmed.replace(/^\/+/,"").split("/")[0]??""}if(host==="")return aliases;aliases.push(host);const label=host.split(".")[0];if(label!==void 0&&label!==""&&label!==host)aliases.push(label);return aliases}function backlogSpaceRow(row){const url=text(row["space_url"]);return{id:idString(row["id"]),name:url,code:null,aliases:url!==null?backlogSpaceAliases(url):[]}}function backlogProjectRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:text(
|
|
6
6
|
row["projectKey"])}}function backlogStatusRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:null}}function backlogUserRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:null,aliases:[text(row["userId"]),text(row["mailAddress"])].filter(v=>v!==null)}}var DEFAULT_LOOKUP_SCOPE="\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8";function fold(value){return value.trim().toLowerCase()}function keysOf(ref){return[ref.id,ref.code,ref.name,...ref.aliases??[]].filter(v=>typeof v==="string"&&v.trim()!=="").map(fold)}function describe(ref){return ref.code!==void 0&&ref.code!==null&&ref.code!==""&&ref.code!==ref.name?`${ref.name}\uFF08${ref.code}\uFF09`:ref.name}async function suggest(input,candidates){try{const{default:fuzzysort}=await import("./fuzzysort-DFVKV4B4.js");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{booleanText,boundedText,isoDate}from"./chunk-UDPJ2IGK.js";import{ORG_MASTER_LIMIT}from"./chunk-
|
|
3
|
+
import{booleanText,boundedText,isoDate}from"./chunk-UDPJ2IGK.js";import{ORG_MASTER_LIMIT}from"./chunk-DBIDYOKW.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{nonEmpty,positiveInteger}from"./chunk-R53CMVWR.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){
|
|
4
4
|
flags.push({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)});if(field.kind==="ref")flags.push({name:field.clearFlag,summary:field.clearSummary,takesValue:false})}return flags}function integerValue(field,raw){const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;const tooLarge=field.max!==void 0&&value>field.max;if(!Number.isSafeInteger(value)||value<field.min||tooLarge){const range=field.max!==void 0?`${field.min} \u4EE5\u4E0A ${field.
|
|
5
5
|
max} \u4EE5\u4E0B`:`${field.min} \u4EE5\u4E0A`;throw new UsageError(`${field.flag} \u306F ${range}\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`${field.label}\u3092\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function fieldBody(input,fields){const body={};for(const field of fields){switch(field.kind){case"text":{const value=boundedText(input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.
|
|
6
6
|
key]=value;break}case"integer":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=integerValue(field,raw);break}case"boolean":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=booleanText(field.flag,raw);break}case"enum":{const raw=input.flags.get(field.flag);if(raw===void 0)break;const value=raw.trim().toLowerCase();if(!field.values.includes(value)){throw new UsageError(`${field.flag} \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-BUZKNZ45.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-
|
|
4
|
-
import{
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-BUZKNZ45.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-PWXXCLVZ.js";import{isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";
|
|
4
|
+
import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-NAUH75MM.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{configReadDirs,ensureTwpHome,
|
|
5
5
|
twpHomeDir}from"./chunk-RZVI6PMW.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
|
|
6
6
|
abs){assertInside(real,root,abs);assertNotSecret(real,home)}return abs}function realToolPath(input,cwd,home=homedir()){return realOrSelf(resolveToolPath(input,cwd,home))}function assertInside(target,root,reported){const rel=relative(root,target);const outside=rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel);if(outside){throw new PathDeniedError(`path escapes the working directory (${reported}). Only paths under ${root} can be accessed.`)}}function realOrSelf(target){let current=target;const rest=[];
|
|
7
7
|
for(;;){try{const real=realpathSync(current);return rest.length===0?real:resolve(real,...rest.reverse())}catch{const parent=dirname(current);if(parent===current)return target;rest.push(current.slice(parent.length+1));current=parent}}}function assertNotSecret(absPath,home=homedir(),env=process.env){const reason=secretReason(absPath,home,env);if(reason!==null)throw new PathDeniedError(`refusing to access ${absPath}: ${reason}`)}function secretReason(absPath,_home=homedir(),env=process.env){const lower=absPath.
|
|
@@ -14,7 +14,7 @@ byteLength}return out}function encodeScalar(key,value,inArray){if(typeof value==
|
|
|
14
14
|
return value}function buildQuery(params){if(!params)return"";const search=new URLSearchParams;for(const[key,value]of Object.entries(params)){if(value===null||value===void 0)continue;if(Array.isArray(value)){if(value.length===0)continue;search.append(key,value.map(v=>encodeScalar(key,v,true)).join(","));continue}search.append(key,encodeScalar(key,value,false))}return search.toString()}function appendQuery(path,params){const qs=buildQuery(params);if(qs==="")return path;if(path.endsWith("?")||path.
|
|
15
15
|
endsWith("&"))return`${path}${qs}`;return`${path}${path.includes("?")?"&":"?"}${qs}`}var ApiError=class extends Error{constructor(status,body,method,path){super(`${method} ${path} -> ${status}${reasonOf(body)}`);this.status=status;this.body=body}status;body};function reasonOf(body){const head=body?.error_description||body?.message||"";const detail=errorListMessages(body?.error_list).filter(text=>!text.endsWith(`: ${head}`)&&text!==head).join(" / ");if(head!==""&&detail!=="")return` (${head} ${detail})`;if(head!=="")return` (${head})`;return detail!==""?` (${detail})`:""}var TwpApiClient=class{constructor(apiUrl,session,fetchImpl=httpFetch,cliVersion="\
|
|
16
16
|
0.0.0-dev"){this.apiUrl=apiUrl;this.session=session;this.fetchImpl=fetchImpl;this.cliVersion=cliVersion}apiUrl;session;fetchImpl;cliVersion;async get(path,query){return this.request("GET",appendQuery(path,query))}async post(path,body,query){return this.request("POST",appendQuery(path,query),body)}async put(path,body,query){return this.request("PUT",appendQuery(path,query),body)}async patch(path,body,query){return this.request("PATCH",appendQuery(path,query),body)}async delete(path,query){return this.
|
|
17
|
-
request("DELETE",appendQuery(path,query))}async requestBinary(method,path){let token=await this.session.getAccessToken();let res=await this.send(method,path,token);if(res.status===401){token=await this.session.refresh(token);res=await this.send(method,path,token)}if(!res.ok){const errBody=await res.json().then(parsed=>parsed,()=>null);throw new ApiError(res.status,errBody,method,path)}return{bytes:new Uint8Array(await res.arrayBuffer()),contentType:res.headers.get("content-type")}}async request(method,path,body){
|
|
17
|
+
request("DELETE",appendQuery(path,query))}async requestBinary(method,path){let token=await this.session.getAccessToken();let res=await this.send(method,path,token);if(res.status===401){token=await this.session.refresh(token);res=await this.send(method,path,token)}if(!res.ok){const errBody=await res.json().then(parsed=>parsed,()=>null);throw new ApiError(res.status,errBody,method,path)}return{bytes:new Uint8Array(await res.arrayBuffer()),contentType:res.headers.get("content-type"),headers:res.headers}}async request(method,path,body){
|
|
18
18
|
let token=await this.session.getAccessToken();let res=await this.send(method,path,token,body);if(res.status===401){token=await this.session.refresh(token);res=await this.send(method,path,token,body)}if(!res.ok){const errBody=await res.json().then(parsed=>parsed,()=>null);throw new ApiError(res.status,errBody,method,path)}if(res.status===204||res.headers.get("content-length")==="0"){return null}const raw=await res.text();if(raw.trim()==="")return null;try{return JSON.parse(raw)}catch{throw new ApiError(
|
|
19
19
|
res.status,null,method,path)}}send(method,path,token,body){const multipart=body instanceof MultipartBody?body.encode():null;return this.fetchImpl(`${this.apiUrl}${path}`,{method,headers:{Accept:"application/json",Authorization:`Bearer ${token}`,"User-Agent":`twp-cli/${this.cliVersion}`,...multipart!==null?{"Content-Type":multipart.contentType}:body!==void 0?{"Content-Type":"application/json"}:{}},...multipart!==null?{body:multipart.bytes}:body!==void 0?{body:JSON.stringify(body)}:{}})}};function errorListMessages(list){
|
|
20
20
|
if(Array.isArray(list)){return list.flatMap(item=>{if(typeof item!=="object"||item===null)return[];const{name,message}=item;if(typeof message!=="string"||message==="")return[];return[typeof name==="string"&&name!==""?`${name}: ${message}`:message]})}if(typeof list==="object"&&list!==null){return Object.entries(list).flatMap(([name,messages])=>(Array.isArray(messages)?messages:[messages]).filter(message=>typeof message==="string"&&message!=="").map(message=>`${name}: ${message}`))}return[]}export{MultipartBody,appendQuery,ApiError,TwpApiClient,errorListMessages};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{readCsvFileText}from"./chunk-I6DWJXPC.js";import{contentTypeFor,inspectLocalFile,issued}from"./chunk-VECUCVIY.js";import{checkUploadQuota}from"./chunk-DDKZ5IPT.js";import{featureLicenseGuidance}from"./chunk-PLBOUQE7.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-DCGL7XJF.js";import{CUSTOMERS_PATH,SALES_COMPANIES_PATH,isExactNumericId}from"./chunk-DBIDYOKW.js";import{ApiError,errorListMessages}from"./chunk-IF2K4PM5.js";import{
|
|
4
|
+
isSafePathSegment}from"./chunk-GMBJTG6A.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-R53CMVWR.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import fs from"fs";import path from"path";function levelForbidden(licenseGuidance,levelGuidance){return body=>body?.error==="permission_denied"?licenseGuidance:levelGuidance}var COMPANY_LICENSE="\u53D6\u5F15\u5148\u3092\u6271\u3046\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u304B\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u304C\u3001\u3069\u3061\u3089\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u3069\u3061\u3089\u3082\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E\u6A29\u9650\u304C\u3069\u3061\u3089\u3082\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
5
|
+
var CUSTOMER_LICENSE=featureLicenseGuidance("\u9867\u5BA2\u7BA1\u7406");var COMPANY_WRITE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u9867\u5BA2\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u306F\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u304B\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u306E\u3069\u3061\u3089\u304B\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
6
|
+
var LEVEL_LABELS={admin:"\u7BA1\u7406\u8005",editor:"\u7DE8\u96C6\u8005",viewer:"\u95B2\u89A7\u8005",none:"\u306A\u3057"};var CHILD_DELETE_NEEDS="\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059";var CUSTOMER_DELETE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u9867\u5BA2\u306E\u524A\u9664\u306B\u306F\u3001\u4F01\u696D\u306E\u524A\u9664\u306B\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304B\u8CA9\u58F2\u7BA1\u7406\u306E\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u3001\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u306B\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\
|
|
7
|
+
\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");var CUSTOMER_UPDATE_FORBIDDEN=levelForbidden(CUSTOMER_LICENSE,"\u9867\u5BA2\u306E\u66F4\u65B0\u306B\u306F\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u304B\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u306E\u3069\u3061\u3089\u304B\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
8
|
+
function childForbidden(label,write){return levelForbidden(CUSTOMER_LICENSE,write==="edit"?`${label}\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`:`${label}\u306E\u524A\u9664\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\uFF08\u300C\u7DE8\u96C6\u8005\u300D\u3067\u306F\u524A\u9664\u3067\u304D\u307E\u305B\u3093\uFF09\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
9
|
+
var NO_LIMIT=Number.POSITIVE_INFINITY;var COMPANY_FIELDS=[{kind:"text",flag:"--name",key:"company_name",label:"\u4F01\u696D\u540D",maxChars:255,summary:"\u4F01\u696D\u540D\uFF08create \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"text",flag:"--kana",key:"company_name_kana",label:"\u30D5\u30EA\u30AC\u30CA",maxChars:255,summary:"\u4F01\u696D\u540D\u306E\u30D5\u30EA\u30AC\u30CA"},{kind:"text",flag:"--short-name",key:"company_short_name",label:"\u7565\u79F0",maxChars:100,summary:"\u7565\u79F0"},{kind:"tex\
|
|
10
|
+
t",flag:"--company-no",key:"company_no",label:"\u6CD5\u4EBA\u756A\u53F7",maxChars:20,summary:"\u6CD5\u4EBA\u756A\u53F7"},{kind:"text",flag:"--post-code",key:"post_code",label:"\u90F5\u4FBF\u756A\u53F7",maxChars:10,summary:"\u90F5\u4FBF\u756A\u53F7"},{kind:"text",flag:"--address1",key:"address1",label:"\u4F4F\u62401",maxChars:255,summary:"\u4F4F\u62401\uFF08\u90FD\u9053\u5E9C\u770C\u30FB\u5E02\u533A\u753A\u6751\uFF09"},{kind:"text",flag:"--address2",key:"address2",label:"\u4F4F\u62402",maxChars:255,
|
|
11
|
+
summary:"\u4F4F\u62402\uFF08\u756A\u5730\uFF09"},{kind:"text",flag:"--address3",key:"address3",label:"\u4F4F\u62403",maxChars:255,summary:"\u4F4F\u62403\uFF08\u5EFA\u7269\u540D\uFF09"},{kind:"text",flag:"--tel",key:"tel",label:"\u96FB\u8A71\u756A\u53F7",maxChars:20,summary:"\u96FB\u8A71\u756A\u53F7"},{kind:"text",flag:"--fax",key:"fax",label:"FAX",maxChars:20,summary:"FAX \u756A\u53F7"},{kind:"text",flag:"--industry",key:"industry",label:"\u696D\u7A2E",maxChars:100,summary:"\u696D\u7A2E"},{kind:"\
|
|
12
|
+
text",flag:"--website",key:"website",label:"Web \u30B5\u30A4\u30C8",maxChars:255,summary:"Web \u30B5\u30A4\u30C8\u306E URL"},{kind:"text",flag:"--memo",key:"memo",label:"\u30E1\u30E2",maxChars:NO_LIMIT,summary:"\u30E1\u30E2"},{kind:"boolean",flag:"--supplier",key:"supplier_flg",summary:"\u4ED5\u5165\u5148\uFF08\u8ABF\u9054\u5148\uFF09\u3068\u3057\u3066\u3082\u767B\u9332\u3059\u308B\u304B\uFF08true / false\uFF09"}];var CONTACT_FIELDS=[{kind:"text",flag:"--name",key:"name",label:"\u6C0F\u540D",maxChars:255,
|
|
13
|
+
summary:"\u6C0F\u540D\uFF08create \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"text",flag:"--kana",key:"name_kana",label:"\u30D5\u30EA\u30AC\u30CA",maxChars:255,summary:"\u6C0F\u540D\u306E\u30D5\u30EA\u30AC\u30CA"},{kind:"text",flag:"--department",key:"department",label:"\u90E8\u7F72",maxChars:255,summary:"\u90E8\u7F72"},{kind:"text",flag:"--position",key:"position",label:"\u5F79\u8077",maxChars:255,summary:"\u5F79\u8077"},{kind:"text",flag:"--role",key:"role_label",label:"\u5F79\u5272",maxChars:255,
|
|
14
|
+
summary:"\u5F79\u5272\uFF08\u6C7A\u88C1\u8005\u30FB\u7A93\u53E3 \u306A\u3069\uFF09"},{kind:"text",flag:"--email",key:"email",label:"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",maxChars:255,summary:"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9"},{kind:"text",flag:"--phone",key:"phone",label:"\u96FB\u8A71\u756A\u53F7",maxChars:50,summary:"\u96FB\u8A71\u756A\u53F7"},{kind:"text",flag:"--mobile",key:"mobile",label:"\u643A\u5E2F\u96FB\u8A71",maxChars:50,summary:"\u643A\u5E2F\u96FB\u8A71\u306E\u756A\u53F7"},
|
|
15
|
+
{kind:"boolean",flag:"--primary",key:"is_primary",summary:"\u4E3B\u62C5\u5F53\u306B\u3059\u308B\u304B\uFF08true / false\uFF09"},{kind:"text",flag:"--notes",key:"notes",label:"\u30E1\u30E2",maxChars:1e4,summary:"\u30E1\u30E2"}];var INTERACTION_TYPES=["call","email","visit","web_meeting","other"];var INTERACTION_STATUSES=["appointment","meeting","meeting_completed","proposing","proposal_accepted","communication","thanks_mail_sent"];var INTERACTION_FIELDS=[{kind:"enum",flag:"--type",key:"interactio\
|
|
16
|
+
n_type",values:INTERACTION_TYPES,summary:`\u5BFE\u5FDC\u306E\u7A2E\u5225\uFF08${INTERACTION_TYPES.join(" / ")}\u30FBcreate \u3067\u306F\u5FC5\u9808\uFF09`},{kind:"text",flag:"--date",key:"interaction_date",label:"\u5BFE\u5FDC\u65E5",maxChars:NO_LIMIT,summary:"\u5BFE\u5FDC\u65E5\uFF08\u4F8B 2026-09-29\u30FBcreate \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"enum",flag:"--status",key:"status",values:INTERACTION_STATUSES,summary:`\u72B6\u6CC1\uFF08${INTERACTION_STATUSES.join(" / ")}\uFF09`},{kind:"text",
|
|
17
|
+
flag:"--subject",key:"subject",label:"\u4EF6\u540D",maxChars:255,summary:"\u4EF6\u540D"},{kind:"text",flag:"--content",key:"content",label:"\u5185\u5BB9",maxChars:5e4,summary:"\u5185\u5BB9"},{kind:"text",flag:"--contact",key:"contact_id",label:"\u62C5\u5F53\u8005 ID",maxChars:255,summary:"\u5BFE\u5FDC\u3057\u305F\u76F8\u624B\u306E\u62C5\u5F53\u8005 ID\uFF08twp customer contact list \u306E id \u5217\uFF09"},{kind:"text",flag:"--next-action",key:"next_action",label:"\u6B21\u306E\u30A2\u30AF\u30B7\u30E7\u30F3",
|
|
18
|
+
maxChars:1e3,summary:"\u6B21\u306E\u30A2\u30AF\u30B7\u30E7\u30F3"},{kind:"text",flag:"--next-action-date",key:"next_action_date",label:"\u6B21\u306E\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u65E5\u4ED8",maxChars:NO_LIMIT,summary:"\u6B21\u306E\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u65E5\u4ED8"}];function dataOf(body,what){const data=isRecord(body)?body["data"]:void 0;if(!isRecord(body)||body["result"]!==true||!isRecord(data)||typeof data["id"]!=="string"&&typeof data["id"]!=="number"){throw new ApiResponseError(
|
|
19
|
+
`${what}\u306E\u5FDC\u7B54\u306B data.id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return data}var COMPANY_COLUMNS=["id","company_name","company_name_kana","company_short_name","customer_flg","supplier_flg","tel","address1"];var CONTACT_COLUMNS=["id","company_id","name","department","position","email","phone","is_primary"];var INTERACTION_COLUMNS=["id","company_id","interaction_type","interaction_date","status","sub\
|
|
20
|
+
ject","contact_id"];var RECENT_COLUMNS=["id","target_type","company_id","prospect_id","interaction_type","interaction_date","status","subject"];var CONTACT_GET_COLUMNS=[...CONTACT_COLUMNS,"name_kana","role_label","mobile","is_customer","notes","updated_at"];var INTERACTION_GET_COLUMNS=[...INTERACTION_COLUMNS,"content","next_action","next_action_date","user_name","updated_at"];async function resolveCustomer(ctx,raw,flag){return(await ctx.resolver.company(raw,{flag,source:"customer",mustExist:true})).
|
|
21
|
+
id}function companyPath(input){const id=requireResolved(input,"companyId");if(!isExactNumericId(id))throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u53D6\u5F15\u5148 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${id}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return`${SALES_COMPANIES_PATH}/${id}`}function childBase(companyId,kind){if(!isExactNumericId(companyId))throw new ApiResponseError(`\u53D6\u5F15\u5148 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${companyId}\
|
|
22
|
+
\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return`${CUSTOMERS_PATH}/${companyId}/${kind}`}var REF_HELP="<\u9867\u5BA2> \u306F\u4F01\u696D\u540D\u30FB\u7565\u79F0\u30FB\u30AB\u30CA\u306E\u5B8C\u5168\u4E00\u81F4\u304B ID\uFF08twp customer list \u306E id \u5217\u306E\u6570\u5B57\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\n\u4ED5\u5165\u5148\u3060\u3051\u306E\u53D6\u5F15\u5148\u306F\u9867\u5BA2\u3068\u3057\u3066\u6271\u308F\u306A\u3044\u306E\u3067\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08twp company list \u3067\u898B\u3048\u307E\u3059\uFF09\u3002";
|
|
23
|
+
var createOperation={name:"create",summary:"\u9867\u5BA2\uFF08\u53D6\u5F15\u5148\u4F01\u696D\uFF09\u3092\u767B\u9332\u3059\u308B",usage:"twp customer create --name <\u4F01\u696D\u540D> [\u9805\u76EE\u2026]",description:"\u53D6\u5F15\u5148\u4F01\u696D\u3092\u300C\u9867\u5BA2\u300D\u3068\u3057\u3066\u767B\u9332\u3057\u307E\u3059\uFF08customer_flg \u3092\u7ACB\u3066\u3066\u4F5C\u6210\u3057\u307E\u3059\uFF09\u3002--name \u304C\u5FC5\u9808\u3067\u3059\u3002\n--supplier true \u3092\u4ED8\u3051\u308B\u3068\u4ED5\u5165\u5148\uFF08\u8ABF\u9054\u5148\uFF09\u3068\u3057\u3066\u3082\u767B\u9332\u3057\u307E\u3059\u3002\n\n\u4F5C\u6210\u3057\u305F\u9867\u5BA2\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002\u62C5\u5F53\u8005\u306F twp customer contact create \u3067\u8DB3\u3057\u307E\u3059\u3002",
|
|
24
|
+
forbidden:COMPANY_WRITE_FORBIDDEN,flags:createFlags(COMPANY_FIELDS),plan(input){if(input.args.length>0)throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp customer create help");const body=fieldBody(input,COMPANY_FIELDS);if(body["company_name"]===void 0)throw new UsageError("--name \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp customer create help");return{method:"POST",path:SALES_COMPANIES_PATH,body:{...body,
|
|
25
|
+
customer_flg:true}}},summarize:body=>pick(dataOf(body,"\u9867\u5BA2\u306E\u767B\u9332"),COMPANY_COLUMNS),raw:body=>dataOf(body,"\u9867\u5BA2\u306E\u767B\u9332")};var updateOperation={name:"update",summary:"\u9867\u5BA2\uFF08\u53D6\u5F15\u5148\u4F01\u696D\uFF09\u306E\u9805\u76EE\u3092\u66F4\u65B0\u3059\u308B",usage:"twp customer update <\u9867\u5BA2> [\u9805\u76EE\u2026]",description:`\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
26
|
+
|
|
27
|
+
${REF_HELP}`,forbidden:CUSTOMER_UPDATE_FORBIDDEN,flags:updateFlags(COMPANY_FIELDS),async prepare(input,ctx){if(!hasAnyField(input,COMPANY_FIELDS))throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp customer update help");fieldBody(input,COMPANY_FIELDS);const raw=singleRef(input,{flag:"<\u9867\u5BA2>",label:"\u9867\u5BA2",usage:"twp customer update help"});return withResolved(input,{companyId:await resolveCustomer(
|
|
28
|
+
ctx,raw,"<\u9867\u5BA2>")})},plan:input=>({method:"PUT",path:companyPath(input),body:fieldBody(input,COMPANY_FIELDS)}),summarize:body=>pick(dataOf(body,"\u9867\u5BA2\u306E\u66F4\u65B0"),COMPANY_COLUMNS),raw:body=>dataOf(body,"\u9867\u5BA2\u306E\u66F4\u65B0")};var DELETE_FILE_MAX_BYTES=1024*1024;var CHILD_PAGE_LIMIT=100;var FILE_FLAG={name:"--file",summary:"\u524A\u9664\u3059\u308B\u9867\u5BA2\u306E ID \u30921\u884C\u306B1\u3064\u66F8\u3044\u305F\u30D5\u30A1\u30A4\u30EB",takesValue:true,placeholder:"\
|
|
29
|
+
<\u30D5\u30A1\u30A4\u30EB>"};function parseDeleteIds(text){const ids=[];const errors=[];const seen=new Map;text.split(/\r?\n/).forEach((raw,index)=>{const line=index+1;const value=raw.trim();if(value===""||value.startsWith("#"))return;if(!isExactNumericId(value)){errors.push(`${line} \u884C\u76EE: \u9867\u5BA2\u306E ID\uFF08\u5148\u982D\u306B 0 \u3092\u4ED8\u3051\u306A\u3044\u6570\u5B57\uFF09\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ${value}`);return}const first=seen.get(value);if(first!==void 0){
|
|
30
|
+
errors.push(`${line} \u884C\u76EE: ID ${value} \u306F ${first} \u884C\u76EE\u3068\u91CD\u8907\u3057\u3066\u3044\u307E\u3059`);return}seen.set(value,line);ids.push({line,id:value})});return{ids,errors}}function flagIsCustomer(value){return value===true||value===1}async function inspectTarget(ctx,id,line){const record=await ctx.resolver.companyRecord(id);if(record!==null&&!flagIsCustomer(record["customer_flg"])){throw new UsageError(`ID ${id}\uFF08${String(record["company_name"]??"")}\uFF09\u306F\u9867\u5BA2\u3067\u306F\u306A\u3044\uFF08\u4ED5\u5165\u5148\u3060\
|
|
31
|
+
\u3051\u306E\uFF09\u53D6\u5F15\u5148\u3067\u3059\u3002twp customer delete \u3067\u306F\u524A\u9664\u3057\u307E\u305B\u3093`)}const contacts=await ctx.resolver.customerChildren(id,"contacts");const interactions=await ctx.resolver.customerChildren(id,"interactions");return{line,id,exists:record!==null,name:record===null?null:String(record["company_name"]??""),supplier:record!==null&&flagIsCustomer(record["supplier_flg"]),contactIds:contacts.map(row=>String(row["id"])),interactionCount:interactions.
|
|
32
|
+
length}}async function prepareDelete(input,ctx){const usage="twp customer delete help";const file=input.flags.get(FILE_FLAG.name);if(file===void 0){const raw=singleRef(input,{flag:"<\u9867\u5BA2>",label:"\u9867\u5BA2",usage});const id=isExactNumericId(raw.trim())?raw.trim():await resolveCustomer(ctx,raw,"<\u9867\u5BA2>");const target=await inspectTarget(ctx,id,null);if(!target.exists&&target.contactIds.length===0&&target.interactionCount===0){throw new UsageError(`ID ${id} \u306E\u9867\u5BA2\u306F\u3042\u308A\u307E\u305B\u3093\uFF08\u524A\u9664\u6E08\u307F\u3067\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\
|
|
33
|
+
\u6B74\u3082\u6B8B\u3063\u3066\u3044\u306A\u3044\u304B\u3001\u5B58\u5728\u3057\u306A\u3044 ID \u3067\u3059\uFF09`,"twp customer list \u3067 ID \u3092\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002")}return withTargets(input,ctx,[target])}if(input.args.length>0)throw new UsageError(`--file \u306E\u3068\u304D\u306F\u9867\u5BA2\u3092\u4F4D\u7F6E\u5F15\u6570\u3067\u53D7\u3051\u307E\u305B\u3093: ${input.args.join(" ")}`,usage);if(file.trim()==="")throw new UsageError("--file <\u30D5\u30A1\u30A4\u30EB> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
34
|
+
usage);const text=readCsvFileText(file,usage,DELETE_FILE_MAX_BYTES,size=>new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${size} \u30D0\u30A4\u30C8\u30FB\u4E0A\u9650 ${DELETE_FILE_MAX_BYTES} \u30D0\u30A4\u30C8\uFF09: ${file}`,"\u30D5\u30A1\u30A4\u30EB\u3092\u5206\u3051\u3066\u6253\u3063\u3066\u304F\u3060\u3055\u3044\u3002"));const parsed=parseDeleteIds(text);const errors=parsed.errors.map(text2=>({line:Number(text2.split(" ")[0]),text:text2}));
|
|
35
|
+
const targets=[];for(const{line,id}of parsed.ids){try{targets.push(await inspectTarget(ctx,id,line))}catch(err){if(!(err instanceof UsageError))throw err;errors.push({line,text:`${line} \u884C\u76EE: ${err.message}`})}}if(errors.length>0){errors.sort((a,b)=>a.line-b.line);throw new UsageError(`\u30D5\u30A1\u30A4\u30EB\u306B\u524A\u9664\u3067\u304D\u306A\u3044\u884C\u304C ${errors.length} \u884C\u3042\u308B\u305F\u3081\u30011\u4EF6\u3082\u524A\u9664\u3057\u3066\u3044\u307E\u305B\u3093:
|
|
36
|
+
${errors.map(e=>e.text).join("\n ")}`,`\u6B63\u3057\u3044\u884C\u306F ${targets.length} \u884C\u3067\u3059\u3002\u305D\u306E\u884C\u3092\u76F4\u3059\u304B\u524A\u9664\u3057\u3066\u304B\u3089\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}if(targets.length===0)throw new UsageError(`\u30D5\u30A1\u30A4\u30EB\u306B\u9867\u5BA2\u306E ID \u304C\u3042\u308A\u307E\u305B\u3093: ${file}`,usage);return withTargets(input,ctx,targets)}async function withTargets(input,ctx,targets){const children=targets.
|
|
37
|
+
reduce((n,t)=>n+t.contactIds.length+(t.exists?0:t.interactionCount),0);let blocked="";if(children>0){const{isAdmin,level}=await ctx.resolver.featureLevel("customer");if(!isAdmin&&level!=="admin"){blocked=`${CHILD_DELETE_NEEDS}\uFF08\u3042\u306A\u305F\u306E\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650: ${LEVEL_LABELS[level??""]??level??"\u4E0D\u660E"}\uFF09\u3002\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u304C ${children} \u4EF6\u3042\u308B\u305F\u3081\u3001\u59CB\u3081\u308B\u3068\u4F01\u696D\u3060\u3051\u304C\u6D88\u3048\u3066\u62C5\u5F53\u8005\u304C\u6B8B\u308A\u307E\u3059\u30021\u4EF6\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093\u3002`}}
|
|
38
|
+
return withResolved(input,{targets:JSON.stringify(targets),childDeleteBlocked:blocked})}function deleteTargets(input){return JSON.parse(requireResolved(input,"targets"))}function contactPath(companyId,contactId){if(!isSafePathSegment(contactId))throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u62C5\u5F53\u8005 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${contactId}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return`${childBase(
|
|
39
|
+
companyId,"contacts")}/${encodeURIComponent(contactId)}`}function firstDeletePlan(targets){for(const target of targets){if(target.exists)return{method:"DELETE",path:`${SALES_COMPANIES_PATH}/${target.id}`};const[contactId]=target.contactIds;if(contactId!==void 0)return{method:"DELETE",path:contactPath(target.id,contactId)}}return{method:"GET",path:`${SALES_COMPANIES_PATH}/${targets[0].id}`}}function targetLabel(target){const where=target.line===null?"":`${target.line} \u884C\u76EE `;return`${where}\
|
|
40
|
+
ID ${target.id}${target.name===null?"\uFF08\u4F01\u696D\u306F\u524A\u9664\u6E08\u307F\u30FB\u307E\u305F\u306F\u5B58\u5728\u3057\u306A\u3044 ID\uFF09":` ${target.name}`}`}function deletePlannedNotes(input){const targets=deleteTargets(input);const companies=targets.filter(t=>t.exists).length;const contacts=targets.reduce((n,t)=>n+t.contactIds.length,0);const interactions=targets.reduce((n,t)=>n+t.interactionCount,0);const lines=[`\u524A\u9664\u306E\u4E0B\u898B: \u4F01\u696D ${companies} \u793E\u30FB\u62C5\u5F53\u8005 ${contacts}\
|
|
41
|
+
\u4EF6\u30FB\u5BFE\u5FDC\u5C65\u6B74 ${interactions} \u4EF6\uFF08${targets.length} \u4EF6\u306E\u6307\u5B9A\uFF09`];for(const target of targets){const supplier=target.supplier?"\u30FB\u4ED5\u5165\u5148\u3068\u3057\u3066\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u3059\uFF08\u524A\u9664\u3059\u308B\u3068\u4ED5\u5165\u5148\u3068\u3057\u3066\u3082\u6D88\u3048\u307E\u3059\uFF09":"";lines.push(` ${targetLabel(target)}: \u62C5\u5F53\u8005 ${target.contactIds.length} \u4EF6\u30FB\u5BFE\u5FDC\u5C65\u6B74 ${target.
|
|
42
|
+
interactionCount} \u4EF6${supplier}`)}const blocked=input.resolved?.["childDeleteBlocked"];if(blocked!==void 0&&blocked!=="")lines.push(`\u3053\u306E\u6A29\u9650\u3067\u306F\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093: ${blocked}`);if(companies+contacts+interactions===0){lines.push("\u524A\u9664\u3059\u308B\u3082\u306E\u306F\u6B8B\u3063\u3066\u3044\u307E\u305B\u3093\uFF08\u9001\u308B\u306E\u306F\u78BA\u8A8D\u306E GET \u3060\u3051\u3067\u3059\uFF09\u3002");return lines}lines.push("\u4F01\u696D\u3054\u3068\u306B\u300C\u4F01\u696D\u306E\u8AAD\u307F\u76F4\u3057\uFF08\u9867\u5BA2\u306E\
|
|
43
|
+
\u307E\u307E\u304B\uFF09\u2192 \u4F01\u696D\u306E\u524A\u9664 \u2192 \u62C5\u5F53\u8005\u306E\u524A\u9664 \u2192 \u5BFE\u5FDC\u5C65\u6B74\u304C\u6B8B\u3063\u3066\u3044\u306A\u3044\u304B\u306E\u78BA\u8A8D\u300D\u306E\u9806\u3067\u9001\u308A\u307E\u3059\uFF08\u5BFE\u5FDC\u5C65\u6B74\u306F\u4F01\u696D\u306E\u524A\u9664\u3067\u30B5\u30FC\u30D0\u304C\u9023\u9396\u3057\u3066\u6D88\u3057\u307E\u3059\uFF09\u3002","\u898B\u7A4D\u30FB\u8ACB\u6C42\u66F8\u30FB\u6848\u4EF6\u66F8\u985E\u30FB\u5951\u7D04\u66F8\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7B49\u304B\u3089\u53C2\u7167\u3055\u308C\u3066\u3044\u308B\u4F01\u696D\u306F\u30B5\u30FC\u30D0\u304C\u524A\u9664\u3092\u65AD\u308A\u307E\u3059\u3002\u305D\u306E\u3068\u304D\u306F\u305D\u306E\u4F01\u696D\u3067\u306F\u4F55\u3082\u524A\u9664\u305B\u305A\u3001\u305D\u3053\u3067\u6B62\u3081\u307E\u3059\uFF08\u4F7F\u7528\u4E2D\u304B\u3069\u3046\u304B\u306F\u30B5\u30FC\u30D0\u304C\u5224\u5B9A\u3059\u308B\u306E\
|
|
44
|
+
\u3067\u3001\u3053\u306E\u4E0B\u898B\u306B\u306F\u51FA\u307E\u305B\u3093\uFF09\u3002","\u9014\u4E2D\u3067\u6B62\u307E\u3063\u305F\u3089\u3001\u6D88\u3048\u305F\u3082\u306E\u30FB\u6B8B\u3063\u305F\u3082\u306E\u3092\u51FA\u3057\u307E\u3059\u3002\u539F\u56E0\u3092\u53D6\u308A\u9664\u3044\u3066\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3092\u6253\u3061\u76F4\u3059\u3068\u3001\u524A\u9664\u6E08\u307F\u306E\u4F01\u696D\u306F\u6B8B\u308A\u3060\u3051\u3092\u6D88\u3057\u307E\u3059\u3002");lines.push("--dry-ru\
|
|
45
|
+
n \u304C\u8868\u793A\u3059\u308B\u8981\u6C42\u306F\u3001\u6700\u521D\u306B\u72B6\u614B\u3092\u5909\u3048\u308B1\u4EF6\u3067\u3059\uFF08\u305D\u306E\u524D\u306B\u4F01\u696D\u3092\u8AAD\u307F\u76F4\u3059 GET \u3092\u9001\u308A\u307E\u3059\uFF09\u3002");return lines}function isDeleteBody(body){return isRecord(body)&&body["customerDelete"]===true&&Array.isArray(body["done"])}function rejectionReason(err){if(!(err instanceof ApiError))return err.message;const list=err.body?.error_list;const first=Array.
|
|
46
|
+
isArray(list)?list[0]:void 0;const message=isRecord(first)?first["message"]:void 0;if(typeof message==="string"&&message!=="")return message;return errorListMessages(list)[0]??err.body?.error_description??err.body?.message??err.message}var DeleteStopped=class extends Error{constructor(reason,companyDeleted,contactsDeleted,interactionsDeleted){super("stopped");this.reason=reason;this.companyDeleted=companyDeleted;this.contactsDeleted=contactsDeleted;this.interactionsDeleted=interactionsDeleted}reason;companyDeleted;contactsDeleted;interactionsDeleted};
|
|
47
|
+
async function listAllChildren(ctx,companyId,kind){const label=kind==="contacts"?"\u62C5\u5F53\u8005":"\u5BFE\u5FDC\u5C65\u6B74";const ids=[];const seenCursors=new Set;let cursor;for(;;){const body=await ctx.send({method:"GET",path:childBase(companyId,kind),query:{limit:CHILD_PAGE_LIMIT,cursor}});const items=isRecord(body)?body["items"]:void 0;if(!Array.isArray(items))throw new ApiResponseError(`${label}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B items \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);
|
|
48
|
+
for(const row of items){const id=isRecord(row)?row["id"]:void 0;if(typeof id!=="string"||!isSafePathSegment(id)){throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F${label} ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${String(id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}ids.push(id)}const hasMore=isRecord(body)?body["has_more"]:void 0;const next=isRecord(body)?body["next_cursor"]:void 0;if(hasMore===false)return ids;
|
|
49
|
+
if(hasMore!==true||typeof next!=="string"||next===""||seenCursors.has(next)){throw new ApiResponseError(`${label}\u4E00\u89A7\u306E\u5FDC\u7B54\u306E has_more / next_cursor \u304C\u8AAD\u3081\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}seenCursors.add(next);cursor=next}}async function drain(ctx,companyId,kind,onDeleted){const label=kind==="contacts"?"\u62C5\u5F53\u8005":"\u5BFE\u5FDC\u5C65\u6B74";const gone=new Set;for(;;){const listed=await listAllChildren(
|
|
50
|
+
ctx,companyId,kind);const fresh=listed.filter(id=>!gone.has(id));if(fresh.length===0){for(const id of listed){try{await ctx.send({method:"GET",path:`${childBase(companyId,kind)}/${encodeURIComponent(id)}`})}catch(err){if(err instanceof ApiError&&err.status===404)continue;throw err}throw new ApiResponseError(`\u524A\u9664\u3092\u53D7\u3051\u4ED8\u3051\u305F${label}\uFF08ID ${id}\uFF09\u304C\u307E\u3060\u6B8B\u3063\u3066\u3044\u307E\u3059\u3002\u6642\u9593\u3092\u7F6E\u3044\u3066\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3092\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
51
|
+
return}for(const id of fresh){try{await ctx.send({method:"DELETE",path:`${childBase(companyId,kind)}/${encodeURIComponent(id)}`});onDeleted()}catch(err){if(!(err instanceof ApiError)||err.status!==404)throw err}gone.add(id)}}}function rejectedBeforeWrite(err){return err instanceof ApiError&&[401,403,422].includes(err.status)}async function companyNow(ctx,id){try{const body=await ctx.send({method:"GET",path:`${SALES_COMPANIES_PATH}/${id}`});return dataOf(body,"\u53D6\u5F15\u5148")}catch(err){if(err instanceof
|
|
52
|
+
ApiError&&err.status===404)return null;throw err}}async function deleteOne(ctx,target){let company="already";let current;try{current=await companyNow(ctx,target.id)}catch(err){throw new DeleteStopped(err,"no",0,0)}if(current!==null&&!flagIsCustomer(current["customer_flg"])){throw new DeleteStopped(new UsageError(`\u4E0B\u898B\u306E\u5F8C\u306B\u9867\u5BA2\u3067\u306F\u306A\u3044\uFF08\u4ED5\u5165\u5148\u3060\u3051\u306E\uFF09\u53D6\u5F15\u5148\u306B\u5909\u308F\u3063\u305F\u305F\u3081\u3001\u524A\u9664\u3057\u307E\u305B\u3093`),
|
|
53
|
+
"no",0,0)}if(current!==null){try{await ctx.send({method:"DELETE",path:`${SALES_COMPANIES_PATH}/${target.id}`});company="deleted"}catch(err){if(rejectedBeforeWrite(err))throw new DeleteStopped(err,"no",0,0);if(!(err instanceof ApiError&&err.status===404)){let after;try{after=await companyNow(ctx,target.id)}catch{throw new DeleteStopped(err,"uncertain",0,0)}if(after!==null)throw new DeleteStopped(err,"no",0,0);company="deleted"}}}let contacts=0;let interactions=0;try{await drain(ctx,target.id,"con\
|
|
54
|
+
tacts",()=>contacts+=1);await drain(ctx,target.id,"interactions",()=>interactions+=1)}catch(err){throw new DeleteStopped(err,company,contacts,interactions)}if(contacts>target.contactIds.length){ctx.warn(`ID ${target.id}: \u4E0B\u898B\u306E\u5F8C\u306B\u5897\u3048\u305F\u62C5\u5F53\u8005 ${contacts-target.contactIds.length} \u4EF6\u3082\u524A\u9664\u3057\u307E\u3057\u305F\uFF08\u4F01\u696D\u306B\u7D10\u3065\u304F\u62C5\u5F53\u8005\u3092\u6B8B\u3055\u306A\u3044\u305F\u3081\uFF09\u3002`)}return{id:target.
|
|
55
|
+
id,line:target.line,company_name:target.name,company,contacts_deleted:contacts,interactions_deleted:interactions}}function doneLine(item){const where=item.line===null?"":`${item.line} \u884C\u76EE `;const company=item.company==="deleted"?"\u4F01\u696D\u3092\u524A\u9664":"\u4F01\u696D\u306F\u524A\u9664\u6E08\u307F";return`${where}ID ${item.id}${item.company_name===null?"":` ${item.company_name}`}\uFF08${company}\u30FB\u62C5\u5F53\u8005 ${item.contacts_deleted} \u4EF6\u30FB\u9023\u9396\u3067\u6D88\u3048\u306A\u304B\u3063\u305F\u5BFE\u5FDC\u5C65\u6B74 ${item.
|
|
56
|
+
interactions_deleted} \u4EF6\uFF09`}function stopReason(err){if(err instanceof ApiError&&err.status===422)return rejectionReason(err);if(err instanceof ApiError&&err.status===403)return`\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\uFF08${CHILD_DELETE_NEEDS}\uFF09`;return err.message}async function runDelete(input,ctx){const targets=deleteTargets(input);const blocked=input.resolved?.["childDeleteBlocked"];if(blocked!==void 0&&blocked!=="")throw new ApiRejectedError(blocked);const done=[];for(const[
|
|
57
|
+
index,target]of targets.entries()){try{done.push(await deleteOne(ctx,target))}catch(caught){if(!(caught instanceof DeleteStopped))throw caught;const err=caught.reason;const unsent=targets.slice(index+1);const touched=caught.companyDeleted!=="no"||caught.contactsDeleted+caught.interactionsDeleted>0;if(targets.length===1&&!touched)throw err;const lines=[`\u9867\u5BA2\u306E\u524A\u9664\u306F ${targetLabel(target)} \u3067\u6B62\u307E\u308A\u307E\u3057\u305F\uFF08${targets.length} \u4EF6\u4E2D \u5B8C\u4E86 ${done.
|
|
58
|
+
length} \u4EF6\u30FB\u5931\u6557 1 \u4EF6\u30FB\u672A\u7740\u624B ${unsent.length} \u4EF6\uFF09\u3002`];if(caught.companyDeleted==="no"){lines.push(` \u5931\u6557: \u4F01\u696D\u3092\u524A\u9664\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: ${stopReason(err)}`);lines.push(" \u3053\u306E\u4F01\u696D\u3067\u306F\u4F55\u3082\u524A\u9664\u3057\u3066\u3044\u307E\u305B\u3093\uFF08\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u3082\u305D\u306E\u307E\u307E\u3067\u3059\uFF09\u3002")}else if(caught.
|
|
59
|
+
companyDeleted==="uncertain"){lines.push(` \u5931\u6557: \u4F01\u696D\u306E\u524A\u9664\u306E\u7D50\u679C\u304C\u5206\u304B\u308A\u307E\u305B\u3093\uFF08${err.message}\uFF09\u3002\u8AAD\u307F\u76F4\u3057\u3082\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002`);lines.push(" \u4F01\u696D\u304C\u6D88\u3048\u305F\u304B\u3069\u3046\u304B\u306F\u672A\u78BA\u8A8D\u3067\u3059\u3002\u62C5\u5F53\u8005\u306F\u307E\u3060\u6D88\u3057\u3066\u3044\u307E\u305B\u3093\u3002")}else{lines.push(` \u5931\u6557: ${caught.
|
|
60
|
+
companyDeleted==="deleted"?"\u4F01\u696D\u306F\u524A\u9664\u3057\u307E\u3057\u305F\u304C\u3001":"\u4F01\u696D\u306F\u524A\u9664\u6E08\u307F\u3067\u3059\u304C\u3001"}\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u3067\u6B62\u307E\u308A\u307E\u3057\u305F\uFF08${stopReason(err)}\uFF09\u3002`);lines.push(` \u6D88\u3057\u305F\u62C5\u5F53\u8005 ${caught.contactsDeleted} \u4EF6\u30FB\u5BFE\u5FDC\u5C65\u6B74 ${caught.interactionsDeleted} \u4EF6\u3002\u6B8B\u308A\u306F\u3053\u306E\u4F01\u696D ID \u306B\u6B8B\u3063\u3066\u3044\u307E\u3059\u3002`)}
|
|
61
|
+
lines.push(done.length===0?" \u5B8C\u4E86: \u306A\u3057":` \u5B8C\u4E86:
|
|
62
|
+
${done.map(item=>` ${doneLine(item)}`).join("\n")}`);lines.push(unsent.length===0?" \u672A\u7740\u624B: \u306A\u3057":` \u672A\u7740\u624B: ${unsent.map(t=>`ID ${t.id}`).join(" / ")}`);if(err instanceof ApiError&&err.status===422){lines.push("\u53C2\u7167\u3057\u3066\u3044\u308B\u30C7\u30FC\u30BF\u3092\u524A\u9664\u30FB\u4ED8\u3051\u66FF\u3048\u308B\u304B\u3001\u305D\u306E ID \u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u9664\u3044\u3066\u304B\u3089\u3001\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3092\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5B8C\u4E86\u3057\u305F\u4F01\u696D\u306F\u524A\u9664\u6E08\u307F\u3068\u3057\u3066\u98DB\u3070\u3057\u307E\u3059\uFF09\u3002")}else if(err instanceof
|
|
63
|
+
ApiError&&err.status===403){lines.push(`\u3053\u306E\u6A29\u9650\u3067\u306F\u6253\u3061\u76F4\u3057\u3066\u3082\u9032\u307F\u307E\u305B\u3093\u3002${CHILD_DELETE_NEEDS}\u3002\u6A29\u9650\u3092\u6301\u3064\u4EBA\u306B\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u306E\u5B9F\u884C\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u524A\u9664\u6E08\u307F\u306E\u4F01\u696D\u306F\u6B8B\u308A\u3060\u3051\u3092\u6D88\u3057\u307E\u3059\uFF09\u3002`)}else{lines.push("\u539F\u56E0\u3092\u53D6\u308A\u9664\u3044\u3066\u304B\u3089\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3092\u6253\u3061\u76F4\u3059\u3068\u3001\u524A\u9664\u6E08\u307F\u306E\u4F01\u696D\u306F\u6B8B\u308A\u306E\u62C5\
|
|
64
|
+
\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u3060\u3051\u3092\u6D88\u3057\u307E\u3059\u3002")}ctx.warn(lines.join("\n"));if(done.length===0&&!touched)throw err;throw new ApiRejectedError(`\u9867\u5BA2\u306E\u524A\u9664\u306F\u5B8C\u4E86\u3057\u3066\u3044\u307E\u305B\u3093\uFF08\u5B8C\u4E86 ${done.length} \u4EF6\u30FB\u5931\u6557 1 \u4EF6\u30FB\u672A\u7740\u624B ${unsent.length} \u4EF6\uFF09\u3002`)}}return{customerDelete:true,done}}var deleteOperation={name:"delete",summary:"\u9867\u5BA2\u3092\u524A\u9664\u3059\u308B\uFF08\u4F01\u696D\u3068\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u3092\u307E\
|
|
65
|
+
\u3068\u3081\u3066\u3002--file \u3067\u4E00\u62EC\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp customer delete <\u9867\u5BA2> --yes | twp customer delete --file <\u30D5\u30A1\u30A4\u30EB> --yes",description:"\u9867\u5BA2\uFF08\u53D6\u5F15\u5148\u4F01\u696D\uFF09\u3068\u3001\u305D\u308C\u306B\u7D10\u3065\u304F\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u3092\u307E\u3068\u3081\u3066\u524A\u9664\u3057\u307E\u3059\u3002\n\u9001\u308B\u524D\u306B\u4F01\u696D\u30FB\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u4EF6\u6570\u3092\u6570\u3048\u3066 stderr \u306B\u51FA\u3057\u307E\u3059\u3002--dry-run \u3067\u9001\u3089\u305A\u306B\u4E0B\u898B\u3060\u3051\u3067\u304D\u307E\u3059\u3002\n\n\u9806\u5E8F\u306F\u4F01\u696D\u3054\u3068\u306B\u300C\u4F01\u696D\u306E\u8AAD\u307F\u76F4\u3057\uFF08\u9867\u5BA2\u306E\u307E\u307E\u304B\uFF09\u2192 \u4F01\u696D\u306E\u524A\u9664 \u2192 \u62C5\u5F53\u8005\u306E\u524A\u9664 \u2192 \u5BFE\u5FDC\u5C65\u6B74\u304C\u6B8B\u3063\u3066\u3044\u306A\u3044\u304B\u306E\u78BA\u8A8D\u300D\u3067\u3059\u3002\n\u4F01\u696D\u304C\u898B\u7A4D\u30FB\u8ACB\u6C42\u66F8\u30FB\u6848\u4EF6\u66F8\u985E\u30FB\u5951\u7D04\u66F8\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7B49\u304B\u3089\u53C2\u7167\u3055\u308C\u3066\u3044\u308B\u3068\u3001\u30B5\u30FC\u30D0\u304C\u524A\u9664\u3092\u65AD\u308A\u307E\u3059\uFF08\u7406\u7531\u306E\u6587\u9762\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\uFF09\u3002\n\u305D\u306E\u3068\u304D\u306F\u305D\u306E\u4F01\u696D\u3067\u306F\u4F55\u3082\u524A\u9664\u305B\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\uFF08\u62C5\u5F53\u8005\u3092\u5148\u306B\u6D88\u3057\u3066\u4F01\u696D\u3060\u3051\u6B8B\u308B\u3001\u306F\u8D77\u304D\u307E\u305B\u3093\uFF09\u3002\n\u5951\u7D04\u66F8\u304C\u6B8B\u3063\u3066\u3044\u308B\u306A\u3089 \
|
|
66
|
+
twp customer contract list / delete \u3067\u5148\u306B\u6D88\u3057\u307E\u3059\u3002\n\n\u4E00\u62EC\uFF08--file\uFF09: 1\u884C\u306B1\u3064\u9867\u5BA2\u306E ID \u3092\u66F8\u304D\u307E\u3059\uFF08\u540D\u524D\u306F\u53D7\u3051\u307E\u305B\u3093\uFF09\u3002\u7A7A\u884C\u3068 # \u3067\u59CB\u307E\u308B\u884C\u306F\u8AAD\u307F\u98DB\u3070\u3057\u307E\u3059\u3002\n\u9001\u308B\u524D\u306B\u5168\u884C\u3092\u691C\u67FB\u3057\u3001\u9867\u5BA2\u3067\u306F\u306A\u3044\uFF08\u4ED5\u5165\u5148\u3060\u3051\u306E\uFF09\u53D6\u5F15\u5148\u30FBID \u306E\u5F62\u306E\u8AA4\u308A\u30FB\u91CD\u8907\u304C1\u3064\u3067\u3082\u3042\u308C\u3070\n1\u4EF6\u3082\u9001\u3089\u305A\u306B\u884C\u756A\u53F7\u3068\u7406\u7531\u3092\u3059\u3079\u3066\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u7D42\u308F\u308A\u307E\u3059\u3002\n\u9001\u4FE1\u4E2D\u306B\u5931\u6557\u3057\u305F\u3089\u305D\u3053\u3067\u6B62\u3081\u3001\u5B8C\u4E86\u3057\u305F\u4F01\u696D\u30FB\u5931\u6557\u3057\u305F\u4F01\u696D\uFF08\u3069\u3053\u307E\u3067\u6D88\u3048\u305F\u304B\uFF09\u30FB\u672A\u7740\u624B\u306E ID \u3092\u51FA\u3057\u307E\u3059\n\uFF08\u7D42\u4E86\u30B3\u30FC\u30C9 3\u3002\u4F55\u3082\u6D88\u3057\u3066\u3044\u306A\u3051\u308C\u3070\u5931\u6557\u3057\u305F\u8981\u6C42\u306E\u7D42\u4E86\u30B3\u30FC\u30C9\uFF09\u3002\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3092\u6253\u3061\u76F4\u3059\u3068\u3001\n\u524A\u9664\u6E08\u307F\u306E\u4F01\u696D\u306F\u6B8B\u308A\u306E\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u3060\u3051\u3092\u6D88\u3057\u3066\u9032\u307F\u307E\u3059\u3002\n\n\u9867\u5BA2\u304B\u3064\u4ED5\u5165\u5148\u306E\u4F01\u696D\u3082\u524A\u9664\u3057\u307E\u3059\uFF08\u4F01\u696D\u306F1\u4EF6\u306A\u306E\u3067\u3001\u4ED5\u5165\u5148\u3068\u3057\u3066\u3082\u6D88\u3048\u307E\u3059\u3002\u4E0B\u898B\u3067\u77E5\u3089\u305B\u307E\u3059\uFF09\u3002\n\u4F01\u696D\u306E\u524A\u9664\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304B\u8CA9\u58F2\u7BA1\u7406\u306E\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u3001\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304C\u8981\u308A\u307E\u3059\u3002\n\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u304C\u6B8B\u308B\u9867\u5BA2\u3092\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u3067\u306A\u3044\u6A29\u9650\u3067\u6D88\u305D\u3046\u3068\u3059\u308B\u3068\u3001\u4F01\u696D\u3060\u3051\u6D88\u3048\u3066\u62C5\u5F53\u8005\u304C\u6B8B\u308B\u306E\u3092\u907F\u3051\u308B\u305F\u3081\n1\u4EF6\u3082\u9001\u3089\
|
|
67
|
+
\u305A\u306B\u6B62\u3081\u307E\u3059\uFF08--dry-run \u3067\u306F\u4E0B\u898B\u3068\u7406\u7531\u3092\u51FA\u3057\u307E\u3059\uFF09\u3002\n\n"+REF_HELP,destructive:true,forbidden:CUSTOMER_DELETE_FORBIDDEN,flags:[FILE_FLAG],prepare:prepareDelete,plan:input=>firstDeletePlan(deleteTargets(input)),plannedNotes:deletePlannedNotes,execute:runDelete,summarize:body=>isDeleteBody(body)?body.done:body,raw:body=>isDeleteBody(body)?body.done:body,notes(body){if(!isDeleteBody(body))return[];const companies=body.
|
|
68
|
+
done.filter(d=>d.company==="deleted").length;const contacts=body.done.reduce((n,d)=>n+d.contacts_deleted,0);const interactions=body.done.reduce((n,d)=>n+d.interactions_deleted,0);return[`\u524A\u9664\u3057\u307E\u3057\u305F: \u4F01\u696D ${companies} \u793E\u30FB\u62C5\u5F53\u8005 ${contacts} \u4EF6\uFF08\u5BFE\u5FDC\u5C65\u6B74\u306F\u4F01\u696D\u306E\u524A\u9664\u3067\u9023\u9396\u3002\u9023\u9396\u3067\u6D88\u3048\u305A\u306B\u500B\u5225\u306B\u6D88\u3057\u305F\u3082\u306E ${interactions} \u4EF6\uFF09\u3002`,
|
|
69
|
+
"\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u304C\u4E00\u89A7\u304B\u3089\u6D88\u3048\u305F\u3053\u3068\u3092\u78BA\u304B\u3081\u3066\u304B\u3089\u7D42\u3048\u3066\u3044\u307E\u3059\u3002"]}};var CUSTOMER_FLAG={name:"--customer",summary:"\u5BFE\u8C61\u306E\u9867\u5BA2\uFF08\u4F01\u696D\u540D\u30FB\u7565\u79F0\u30FB\u30AB\u30CA\u306E\u5B8C\u5168\u4E00\u81F4\u304B ID\uFF09",takesValue:true,placeholder:"<\u9867\u5BA2>"};async function prepareCustomerFlag(input,ctx,usage){const raw=nonEmpty(input.
|
|
70
|
+
flags,CUSTOMER_FLAG.name);if(raw===void 0)throw new UsageError("--customer <\u9867\u5BA2> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);return withResolved(input,{companyId:await resolveCustomer(ctx,raw,CUSTOMER_FLAG.name)})}function childId(input,spec,usage){const[raw,...rest]=input.args;if(raw===void 0||raw.trim()==="")throw new UsageError(`${spec.label}\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usage);if(rest.length>0)throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B${spec.
|
|
71
|
+
label}\u306E ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,usage);const id=raw.trim();if(!isSafePathSegment(id))throw new UsageError(`${spec.label}\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u6587\u5B57\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059: ${id}`,`twp customer ${spec.name} list \u306E id \u5217\u306E\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return id}function childResource(spec){const base=input=>childBase(requireResolved(input,"comp\
|
|
72
|
+
anyId"),spec.kind);const item=(input,usage2)=>`${base(input)}/${encodeURIComponent(childId(input,spec,usage2))}`;const one=(body,what)=>dataOf(body,what);const paging=envelopePaging({label:`${spec.label}\u4E00\u89A7`});const usage=op=>`twp customer ${spec.name} ${op} help`;return{name:spec.name,summary:`\u9867\u5BA2\u306E${spec.label}\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664${spec.extraOperations===void 0?"":`\u30FB${spec.extraOperations.map(op=>op.
|
|
73
|
+
name).join("\u30FB")}`}`,operations:[{name:"list",summary:`\u9867\u5BA2\u306E${spec.label}\u3092\u4E00\u89A7\u3059\u308B`,usage:`twp customer ${spec.name} list --customer <\u9867\u5BA2> [--all] [--limit <\u4EF6\u6570>]`,description:`--customer \u304C\u5FC5\u9808\u3067\u3059\u3002
|
|
74
|
+
|
|
75
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
76
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${spec.columns.join(" / ")}\uFF09\u3067\u3059\u3002
|
|
77
|
+
|
|
78
|
+
${LIST_PAGING_HELP}`,flags:[...LIST_FLAGS,CUSTOMER_FLAG],paging,forbidden:levelForbidden(CUSTOMER_LICENSE,`${spec.label}\u3092\u898B\u308B\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`),async prepare(input,ctx){if(input.args.length>0)throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,
|
|
79
|
+
usage("list"));return prepareCustomerFlag(input,ctx,usage("list"))},plan:input=>({method:"GET",path:base(input),query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}),summarize:body=>paging.items(body).map(row=>pick(row,spec.columns)),raw:body=>paging.items(body)},{name:"get",summary:`\u9867\u5BA2\u306E${spec.label}1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B`,usage:`twp customer ${spec.name} get <${spec.label}ID> --customer <\u9867\u5BA2>`,description:`${spec.
|
|
80
|
+
label}\u306E ID \u306F twp customer ${spec.name} list \u306E id \u5217\u306E\u5024\u3067\u3059\u3002--customer \u304C\u5FC5\u9808\u3067\u3059\uFF08\u5225\u306E\u9867\u5BA2\u306E ID \u3092\u6307\u5B9A\u3059\u308B\u3068\u300C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u300D\u306B\u306A\u308A\u307E\u3059\uFF09\u3002
|
|
81
|
+
|
|
82
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
83
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${spec.getColumns.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[CUSTOMER_FLAG],forbidden:levelForbidden(CUSTOMER_LICENSE,`${spec.label}\u3092\u898B\u308B\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`),async prepare(input,ctx){childId(input,spec,usage("get"));return prepareCustomerFlag(input,ctx,
|
|
84
|
+
usage("get"))},plan:input=>({method:"GET",path:item(input,usage("get"))}),summarize:body=>pick(one(body,spec.label),spec.getColumns),raw:body=>one(body,spec.label)},{name:"create",summary:`\u9867\u5BA2\u306B${spec.label}\u3092\u767B\u9332\u3059\u308B`,usage:`twp customer ${spec.name} create --customer <\u9867\u5BA2> ${spec.required.map(f=>`${f} <\u5024>`).join(" ")} [\u9805\u76EE\u2026]`,description:spec.createHelp,forbidden:childForbidden(spec.label,"edit"),flags:[...createFlags(spec.fields),CUSTOMER_FLAG],
|
|
85
|
+
async prepare(input,ctx){if(input.args.length>0)throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usage("create"));fieldBody(input,spec.fields);for(const flag of spec.required){if(!input.flags.has(flag))throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usage("create"))}return prepareCustomerFlag(input,ctx,usage("create"))},plan:input=>({method:"POST",path:base(input),body:fieldBody(input,spec.
|
|
86
|
+
fields)}),summarize:body=>pick(one(body,`${spec.label}\u306E\u767B\u9332`),spec.columns),raw:body=>one(body,`${spec.label}\u306E\u767B\u9332`)},{name:"update",summary:`\u9867\u5BA2\u306E${spec.label}\u3092\u66F4\u65B0\u3059\u308B`,usage:`twp customer ${spec.name} update <${spec.label}ID> --customer <\u9867\u5BA2> [\u9805\u76EE\u2026]`,description:"\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002",
|
|
87
|
+
forbidden:childForbidden(spec.label,"edit"),flags:[...updateFlags(spec.fields),CUSTOMER_FLAG],async prepare(input,ctx){if(!hasAnyField(input,spec.fields))throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage("update"));fieldBody(input,spec.fields);childId(input,spec,usage("update"));return prepareCustomerFlag(input,ctx,usage("update"))},plan:input=>({method:"PUT",path:item(input,usage("update")),body:fieldBody(input,
|
|
88
|
+
spec.fields)}),summarize:body=>pick(one(body,`${spec.label}\u306E\u66F4\u65B0`),spec.columns),raw:body=>one(body,`${spec.label}\u306E\u66F4\u65B0`)},{name:"delete",summary:`\u9867\u5BA2\u306E${spec.label}\u3092\u524A\u9664\u3059\u308B\uFF08\u9867\u5BA2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u306E\u307F\u30FB--yes \u304C\u8981\u308B\uFF09`,usage:`twp customer ${spec.name} delete <${spec.label}ID> --customer <\u9867\u5BA2> --yes`,description:`${spec.label}1\u4EF6\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u9867\u5BA2\u3054\u3068\u307E\u3068\u3081\u3066\u6D88\u3059\u306A\u3089 twp customer delete \u3092\u4F7F\u3044\
|
|
89
|
+
\u307E\u3059\u3002`,destructive:true,forbidden:childForbidden(spec.label,"delete"),flags:[CUSTOMER_FLAG],async prepare(input,ctx){childId(input,spec,usage("delete"));return prepareCustomerFlag(input,ctx,usage("delete"))},plan:input=>({method:"DELETE",path:item(input,usage("delete"))}),summarize:body=>acknowledgement(body,`${spec.label}\u524A\u9664`),raw:body=>acknowledgement(body,`${spec.label}\u524A\u9664`)},...spec.extraOperations??[]]}}var contactResource=childResource({name:"contact",kind:"c\
|
|
90
|
+
ontacts",label:"\u62C5\u5F53\u8005",fields:CONTACT_FIELDS,required:["--name"],columns:CONTACT_COLUMNS,getColumns:CONTACT_GET_COLUMNS,createHelp:"--customer \u3068 --name \u304C\u5FC5\u9808\u3067\u3059\u3002\u4F5C\u6210\u3057\u305F\u62C5\u5F53\u8005\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002\u540D\u523A\u306E\u753B\u50CF\u306F twp customer business-card add \u3067\u8DB3\u3057\u307E\u3059\u3002"});var interactionResource=childResource({name:"interaction",kind:"interactions",label:"\u5BFE\u5FDC\u5C65\u6B74",
|
|
91
|
+
fields:INTERACTION_FIELDS,required:["--type","--date"],columns:INTERACTION_COLUMNS,getColumns:INTERACTION_GET_COLUMNS,extraOperations:[recentOperation()],createHelp:`--customer\u30FB--type\uFF08${INTERACTION_TYPES.join(" / ")}\uFF09\u30FB--date \u304C\u5FC5\u9808\u3067\u3059\u3002\u4F5C\u6210\u3057\u305F\u5BFE\u5FDC\u5C65\u6B74\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002`});function recentOperation(){const paging=envelopePaging({label:"\u6700\u8FD1\u306E\u5BFE\u5FDC\u5C65\u6B74"});return{name:"\
|
|
92
|
+
recent",summary:"\u6700\u8FD1\u306E\u5BFE\u5FDC\u5C65\u6B74\u3092\u9867\u5BA2\u30FB\u30A2\u30D7\u30ED\u30FC\u30C1\u5148\u3092\u307E\u305F\u3044\u3067\u65B0\u3057\u3044\u9806\u306B\u4E00\u89A7\u3059\u308B\uFF08--customer \u4E0D\u8981\uFF09",usage:"twp customer interaction recent [--all] [--limit <\u4EF6\u6570>]",description:`\u9867\u5BA2\u3092\u307E\u305F\u3044\u3067\u3001\u6700\u8FD1\u306E\u5BFE\u5FDC\u5C65\u6B74\u3092\u65B0\u3057\u3044\u9806\u306B\u4E00\u89A7\u3057\u307E\u3059\u3002\u30A2\u30D7\u30ED\u30FC\u30C1\u5148\uFF08\u898B\u8FBC\u5BA2\uFF09\u306E\u5BFE\u5FDC\u5C65\u6B74\u3082\u6DF7\u3056\u308A\u307E\u3059\u3002
|
|
93
|
+
\u3069\u308C\u306E\u5BFE\u5FDC\u304B\u306F target_type \u5217\u3067\u5206\u304B\u308A\u307E\u3059\uFF08company \u306A\u3089 company_id \u2192 twp customer get\u3001prospect \u306A\u3089 prospect_id \u2192 twp prospect get\uFF09\u3002
|
|
94
|
+
|
|
95
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
96
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${RECENT_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
|
|
97
|
+
|
|
98
|
+
${LIST_PAGING_HELP}`,flags:[...LIST_FLAGS],paging,forbidden:levelForbidden(CUSTOMER_LICENSE,"\u5BFE\u5FDC\u5C65\u6B74\u3092\u898B\u308B\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"),plan(input){if(input.args.length>0)throw new UsageError(`recent \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp customer\
|
|
99
|
+
interaction recent help");return{method:"GET",path:`${CUSTOMERS_PATH}/interactions/recent`,query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}},summarize:body=>paging.items(body).map(row=>pick(row,RECENT_COLUMNS)),raw:body=>paging.items(body)}}var CARD_SOURCE="customer_contact";var CARD_COLUMNS=["card_id","front_attachment_id","back_attachment_id","back_note","created_at"];var BACK_NOTE_MAX_CHARS=1e4;var CONTACT_FLAG={name:"--contact",summary:"\u540D\u523A\u3092\u6301\u3064\u62C5\u5F53\u8005\u306E\
|
|
100
|
+
ID\uFF08twp customer contact list \u306E id \u5217\uFF09",takesValue:true,placeholder:"<\u62C5\u5F53\u8005ID>"};var FRONT_FLAG={name:"--front",summary:"\u540D\u523A\u306E\u8868\u9762\u306E\u753B\u50CF\u30D5\u30A1\u30A4\u30EB",takesValue:true,placeholder:"<\u30D1\u30B9>"};var BACK_FLAG={name:"--back",summary:"\u540D\u523A\u306E\u88CF\u9762\u306E\u753B\u50CF\u30D5\u30A1\u30A4\u30EB",takesValue:true,placeholder:"<\u30D1\u30B9>"};var NOTE_FLAG={name:"--note",summary:"\u88CF\u9762\u30E1\u30E2\uFF0810,000 \u6587\u5B57\u307E\u3067\u3002\u88CF\u9762\u306E\u753B\u50CF\u304C\u3042\u308B\u540D\u523A\u306B\u3060\u3051\u4ED8\
|
|
101
|
+
\u3051\u3089\u308C\u307E\u3059\uFF09",takesValue:true,placeholder:"<\u30E1\u30E2>"};var CLEAR_NOTE_FLAG={name:"--clear",summary:"\u88CF\u9762\u30E1\u30E2\u3092\u6D88\u3059",takesValue:false};var CARD_REF_HELP="--customer\uFF08\u9867\u5BA2\uFF09\u3068 --contact\uFF08\u62C5\u5F53\u8005\u306E ID\uFF09\u304C\u5FC5\u9808\u3067\u3059\u3002\u540D\u523A\u306E ID \u306F twp customer business-card list \u306E card_id \u5217\u306E\u5024\u3067\u3059\u3002";function cardUsage(op){return`twp customer business\
|
|
102
|
+
-card ${op} help`}function contactIdOf(input,usage){const raw=nonEmpty(input.flags,CONTACT_FLAG.name);if(raw===void 0)throw new UsageError("--contact <\u62C5\u5F53\u8005ID> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);const id=raw.trim();if(!isSafePathSegment(id))throw new UsageError(`\u62C5\u5F53\u8005\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u6587\u5B57\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059: ${id}`,"twp customer contact list \u306E id \u5217\u306E\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
103
|
+
return id}function cardIdOf(input,usage){const[raw,...rest]=input.args;if(raw===void 0||raw.trim()==="")throw new UsageError("\u540D\u523A\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);if(rest.length>0)throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u540D\u523A\u306E ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,usage);const id=raw.trim();if(!isSafePathSegment(id))throw new UsageError(`\u540D\u523A\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u6587\u5B57\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059: ${id}`,
|
|
104
|
+
"twp customer business-card list \u306E card_id \u5217\u306E\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return id}function contactPathOf(input,usage){return`${childBase(requireResolved(input,"companyId"),"contacts")}/${encodeURIComponent(contactIdOf(input,usage))}`}function cardsOf(body,what){const cards=dataOf(body,what)["business_cards"];if(!Array.isArray(cards)||!cards.every(isRecord)){throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B business_cards \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
105
|
+
return cards}function prepareCardTarget(input,ctx,usage){contactIdOf(input,usage);return prepareCustomerFlag(input,ctx,usage)}var CARD_FORBIDDEN_EDIT=childForbidden("\u540D\u523A","edit");function cardSides(input){const sides=[];for(const[side,flag]of[["front",FRONT_FLAG.name],["back",BACK_FLAG.name]]){if(!input.flags.has(flag))continue;const{file,size}=inspectLocalFile(input.flags.get(flag),flag,cardUsage("add"));const name=path.basename(file);sides.push({side,file,name,size,contentType:contentTypeFor(
|
|
106
|
+
name)})}return sides}function backNoteOf(input){const note=input.flags.get(NOTE_FLAG.name);if(note===void 0)return void 0;if(Array.from(note).length>BACK_NOTE_MAX_CHARS){throw new UsageError(`\u88CF\u9762\u30E1\u30E2\u306F ${BACK_NOTE_MAX_CHARS.toLocaleString()} \u6587\u5B57\u307E\u3067\u3067\u3059\uFF08${Array.from(note).length.toLocaleString()} \u6587\u5B57\uFF09`)}return note}function cardUploadPlan(side){return{method:"POST",path:"/api/v2/attachments/upload-url",body:{file_name:side.name,content_type:side.
|
|
107
|
+
contentType,file_size:side.size,source:CARD_SOURCE}}}async function addCard(input,ctx){const blocked=input.resolved?.["cardAddBlocked"];if(blocked!==void 0&&blocked!=="")throw new ApiRejectedError(blocked);const sides=cardSides(input);const note=backNoteOf(input);const contactPath2=contactPathOf(input,cardUsage("add"));dataOf(await ctx.send({method:"GET",path:contactPath2}),"\u62C5\u5F53\u8005");await checkUploadQuota(ctx,sides.reduce((sum,side)=>sum+side.size,0));const issuedIds=[];let registerSent=false;
|
|
108
|
+
const leftover=()=>registerSent?"\u540D\u523A\u306E\u767B\u9332\u306F\u9001\u4FE1\u3057\u307E\u3057\u305F\u304C\u3001\u5FDC\u7B54\u3092\u78BA\u304B\u3081\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6253\u3061\u76F4\u3059\u524D\u306B twp customer business-card list \u3067\u767B\u9332\u3055\u308C\u305F\u304B\u3092\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002":issuedIds.length===0?"":`\u767A\u884C\u3057\u305F\u753B\u50CF\u306E\u6DFB\u4ED8\uFF08${issuedIds.map(u=>`${u.side==="fro\
|
|
109
|
+
nt"?"\u8868":"\u88CF"}: ${u.id}`).join(" / ")}\uFF09\u306F\u540D\u523A\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u672A\u78BA\u5B9A\u306E\u307E\u307E\u3067\u3059\u3002\u672A\u78BA\u5B9A\u306E\u6DFB\u4ED8\u306F\u4E00\u5B9A\u6642\u9593\uFF08\u7F72\u540DURL\u306E\u6709\u52B9\u671F\u9650\uFF0B1\u6642\u9593\uFF09\u5F8C\u306B\u8A18\u9332\u304C\u5931\u52B9\u3057\u3001\u53C2\u7167\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\uFF08\u30B9\u30C8\u30EC\u30FC\u30B8\u4E0A\u306E\u5B9F\u4F53\u304C\u3044\u3064\u6D88\u3048\u308B\u304B\u306F\u3053\u306E CLI \u304B\u3089\u306F\u78BA\u304B\u3081\u3089\u308C\u307E\u305B\u3093\uFF09\u3002\u539F\u56E0\u3092\u53D6\u308A\u9664\u3044\u3066\u3082\u3046\u4E00\u5EA6 twp customer business-card add \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`;
|
|
110
|
+
try{for(const side of sides){const{id,uploadUrl}=issued(await ctx.send(cardUploadPlan(side)));issuedIds.push({side:side.side,id});const bytes=new Uint8Array(fs.readFileSync(side.file));if(bytes.byteLength!==side.size){throw new UsageError(`\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u306E\u5927\u304D\u3055\u304C\u5909\u308F\u308A\u307E\u3057\u305F\uFF08${side.size} \u2192 ${bytes.byteLength} \u30D0\u30A4\u30C8\uFF09: ${side.file}`)}await ctx.putSigned(uploadUrl,bytes,
|
|
111
|
+
side.contentType)}const frontId=issuedIds.find(u=>u.side==="front")?.id??null;const backId=issuedIds.find(u=>u.side==="back")?.id??null;const registration=ctx.send({method:"POST",path:`${contactPath2}/business-cards`,body:{front_attachment_id:frontId,back_attachment_id:backId,...note===void 0?{}:{back_note:note}}});const body=await registration;registerSent=true;const card=cardsOf(body,"\u540D\u523A\u306E\u767B\u9332").find(row=>(row["front_attachment_id"]??null)===frontId&&(row["back_attachment\
|
|
112
|
+
_id"]??null)===backId);if(card===void 0){throw new ApiResponseError("\u540D\u523A\u306E\u767B\u9332\u306E\u5FDC\u7B54\u306B\u4ECA\u56DE\u306E\u540D\u523A\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{data:{...card,contact_id:contactIdOf(input,cardUsage("add")),company_id:requireResolved(input,"companyId")}}}catch(err){const text=leftover();if(text!=="")ctx.warn(`${text}
|
|
113
|
+
`);throw err}}function cardRow(body){const data=isRecord(body)?body["data"]:void 0;if(!isRecord(data))throw new ApiResponseError("\u540D\u523A\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002");return data}function cardAfter(body,cardId,what){return cardsOf(body,what).find(row=>row["card_id"]===cardId)}var businessCardResource={name:"business-card",summary:"\u62C5\u5F53\u8005\u306E\u540D\u523A\uFF08\u4E00\u89A7\u30FB\u753B\u50CF\u306E\u767B\u9332\u30FB\u88CF\u9762\u30E1\u30E2\u30FB\u524A\u9664\uFF09",
|
|
114
|
+
operations:[{name:"list",summary:"\u62C5\u5F53\u8005\u306E\u540D\u523A\u3092\u65B0\u3057\u3044\u9806\u306B\u4E00\u89A7\u3059\u308B",usage:"twp customer business-card list --customer <\u9867\u5BA2> --contact <\u62C5\u5F53\u8005ID>",description:`${CARD_REF_HELP}
|
|
115
|
+
\u753B\u50CF\u306F\u6DFB\u4ED8\u306E ID\uFF08front_attachment_id / back_attachment_id\uFF09\u3067\u51FA\u307E\u3059\u3002\u753B\u50CF\u305D\u306E\u3082\u306E\u306F twp task attachment download <\u6DFB\u4ED8ID> --out <\u30D1\u30B9> \u3067\u53D6\u308A\u51FA\u305B\u307E\u3059\u3002
|
|
116
|
+
|
|
117
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${CARD_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[CUSTOMER_FLAG,CONTACT_FLAG],forbidden:levelForbidden(CUSTOMER_LICENSE,"\u540D\u523A\u3092\u898B\u308B\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"),async prepare(input,ctx){if(input.args.length>0)throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093\
|
|
118
|
+
: ${input.args.join(" ")}`,cardUsage("list"));return prepareCardTarget(input,ctx,cardUsage("list"))},plan:input=>({method:"GET",path:contactPathOf(input,cardUsage("list"))}),summarize:body=>cardsOf(body,"\u62C5\u5F53\u8005").map(row=>pick(row,CARD_COLUMNS)),raw:body=>cardsOf(body,"\u62C5\u5F53\u8005")},{name:"add",summary:"\u540D\u523A\u306E\u753B\u50CF\uFF08\u8868\u30FB\u88CF\uFF09\u3092\u62C5\u5F53\u8005\u306B\u767B\u9332\u3059\u308B\uFF08\u5BB9\u91CF\u691C\u67FB\u30FB\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u30FB\u767B\u9332\u30921\u30B3\u30DE\u30F3\u30C9\u3067\uFF09",
|
|
119
|
+
usage:"twp customer business-card add --customer <\u9867\u5BA2> --contact <\u62C5\u5F53\u8005ID> [--front <\u30D1\u30B9>] [--back <\u30D1\u30B9>] [--note <\u88CF\u9762\u30E1\u30E2>]",description:"--front \u3068 --back \u306E\u5C11\u306A\u304F\u3068\u3082\u4E00\u65B9\u304C\u5FC5\u8981\u3067\u3059\u3002\u65E2\u5B58\u306E\u540D\u523A\u306F\u5DEE\u3057\u66FF\u3048\u305A\u3001\u8FFD\u52A0\u3057\u305F\u540D\u523A\u304C\u6700\u65B0\u306B\u306A\u308A\u307E\u3059\u3002\n--note\uFF08\u88CF\u9762\u30E1\u30E2\uFF09\u306F --back \u3068\u4E00\u7DD2\u306B\u3060\u3051\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306F\u88CF\u9762\u306E\u7121\u3044\u540D\u523A\u306E\u30E1\u30E2\u3092\u4FDD\u5B58\u3057\u307E\u305B\u3093\uFF09\u3002\n\n\u6B21\u306E\u9806\u306B\u9001\u308A\u307E\u3059\u3002\n 0. POST /api/v2/storage/check-upload\uFF08\u8868\u30FB\u88CF\u306E\u5408\u8A08\u3067\u30C6\u30CA\u30F3\u30C8\u306E\u5BB9\u91CF\u3092\u691C\u67FB\u3002\u8D85\u904E\u306A\u3089\u4F55\u3082\u9001\u3089\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\uFF09\n 1. POST /api/v2/attachments/upload-url \u2192 \u7F72\u540DURL\u3078 PUT\uFF08\u8868\u30FB\u88CF\u305D\u308C\u305E\u308C\u3002TWP \u306E\u8A8D\u8A3C\u60C5\u5831\u306F\u9001\u308A\u307E\u305B\u3093\uFF09\n 2. POST \u2026/contacts/{\u62C5\
|
|
120
|
+
\u5F53\u8005ID}/business-cards\uFF08\u3053\u3053\u3067\u753B\u50CF\u304C\u78BA\u5B9A\u3057\u307E\u3059\uFF09\n0 \u306E\u524D\u306B\u3001\u62C5\u5F53\u8005\u304C\u3053\u306E\u9867\u5BA2\u306B\u5B9F\u5728\u3059\u308B\u3053\u3068\u3092 GET \u3067\u78BA\u304B\u3081\u307E\u3059\uFF08\u7121\u3051\u308C\u3070\u753B\u50CF\u3092\u4E0A\u3052\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002\n2 \u304C\u5931\u6557\u3057\u305F\u5834\u5408\u306F\u3001\u767A\u884C\u3057\u305F\u753B\u50CF\u306E\u6DFB\u4ED8 ID \u3092 stderr \u306B\u51FA\u3057\u3066\u5931\u6557\u3057\u307E\u3059\uFF08\u672A\u78BA\u5B9A\u306E\u6DFB\u4ED8\u306F\u4E00\u5B9A\u6642\u9593\u5F8C\u306B\u8A18\u9332\u304C\u5931\u52B9\u3057\u307E\u3059\uFF09\u3002\n\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u95B2\u89A7\u8005\u300D\u4EE5\u4E0B\u3068\u5206\u304B\u3063\u3066\u3044\u308C\u3070\u3001\u753B\u50CF\u3092\u4E0A\u3052\u308B\u524D\u306B\u6B62\u3081\u307E\u3059\u3002\n--dry-run \u306F 1 \u306E\u6700\u521D\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u3060\u3051\u3092\u8868\u793A\u3057\u307E\u3059\uFF08\u4EE5\u964D\u306F\u5FDC\u7B54\u306B\u4F9D\u5B58\u3059\u308B\u305F\u3081\uFF09\u3002",
|
|
121
|
+
flags:[CUSTOMER_FLAG,CONTACT_FLAG,FRONT_FLAG,BACK_FLAG,NOTE_FLAG],forbidden:CARD_FORBIDDEN_EDIT,async prepare(input,ctx){if(input.args.length>0)throw new UsageError(`add \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,cardUsage("add"));const sides=cardSides(input);if(sides.length===0)throw new UsageError("--front \u304B --back \u306E\u5C11\u306A\u304F\u3068\u3082\u4E00\u65B9\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",cardUsage("add"));if(input.
|
|
122
|
+
flags.has(NOTE_FLAG.name)&&!input.flags.has(BACK_FLAG.name)){throw new UsageError("--note\uFF08\u88CF\u9762\u30E1\u30E2\uFF09\u306F --back\uFF08\u88CF\u9762\u306E\u753B\u50CF\uFF09\u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","\u30B5\u30FC\u30D0\u306F\u88CF\u9762\u306E\u753B\u50CF\u304C\u7121\u3044\u540D\u523A\u306E\u30E1\u30E2\u3092\u4FDD\u5B58\u3057\u307E\u305B\u3093\u3002")}backNoteOf(input);const prepared=await prepareCardTarget(input,ctx,cardUsage("add"));const{isAdmin,
|
|
123
|
+
level}=await ctx.resolver.featureLevel("customer");const blocked=!isAdmin&&(level==="viewer"||level==="none")?`\u540D\u523A\u306E\u767B\u9332\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\uFF08\u3042\u306A\u305F\u306E\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650: ${LEVEL_LABELS[level]??level}\uFF09\u3002\u753B\u50CF\u306F1\u679A\u3082\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u3044\u307E\u305B\u3093\u3002`:
|
|
124
|
+
"";return withResolved(prepared,{cardAddBlocked:blocked})},plan:input=>cardUploadPlan(cardSides(input)[0]),plannedNotes:input=>{const sides=cardSides(input);const blocked=input.resolved?.["cardAddBlocked"];if(blocked!==void 0&&blocked!=="")return[`\u5B9F\u884C\u3057\u3066\u3082\u9001\u308A\u307E\u305B\u3093: ${blocked}`];return[`\u5B9F\u884C\u6642\u306F\u3001\u3053\u306E\u524D\u306B\u5BB9\u91CF\u691C\u67FB\uFF08POST /api/v2/storage/check-upload\u30FB${sides.reduce((sum,side)=>sum+side.size,0)} \u30D0\
|
|
125
|
+
\u30A4\u30C8\uFF09\u3092\u9001\u308A\u3001${sides.map(side=>`${side.side==="front"?"\u8868":"\u88CF"}\uFF08${side.size} \u30D0\u30A4\u30C8\uFF09`).join("\u30FB")}\u3092\u7F72\u540DURL\u3078 PUT \u3057\u3066\u304B\u3089\u3001POST ${contactPathOf(input,cardUsage("add"))}/business-cards \u3067\u540D\u523A\u3092\u767B\u9332\u3057\u307E\u3059\u3002`]},execute:addCard,summarize:body=>pick(cardRow(body),["card_id","contact_id","company_id","front_attachment_id","back_attachment_id","back_note"]),raw:cardRow},
|
|
126
|
+
{name:"note",summary:"\u540D\u523A\u306E\u88CF\u9762\u30E1\u30E2\u3092\u66F8\u304D\u63DB\u3048\u308B\uFF08--clear \u3067\u6D88\u3059\uFF09",usage:"twp customer business-card note <\u540D\u523AID> --customer <\u9867\u5BA2> --contact <\u62C5\u5F53\u8005ID> (--note <\u30E1\u30E2> | --clear)",description:`${CARD_REF_HELP}
|
|
127
|
+
\u88CF\u9762\u306E\u753B\u50CF\u304C\u3042\u308B\u540D\u523A\u306B\u3060\u3051\u30E1\u30E2\u3092\u4ED8\u3051\u3089\u308C\u307E\u3059\uFF08\u7121\u3051\u308C\u3070\u30B5\u30FC\u30D0\u304C 422 \u3067\u65AD\u308A\u307E\u3059\uFF09\u3002`,flags:[CUSTOMER_FLAG,CONTACT_FLAG,NOTE_FLAG,CLEAR_NOTE_FLAG],forbidden:CARD_FORBIDDEN_EDIT,async prepare(input,ctx){cardIdOf(input,cardUsage("note"));const has=input.flags.has(NOTE_FLAG.name);const clear=input.flags.has(CLEAR_NOTE_FLAG.name);if(has===clear)throw new UsageError(
|
|
128
|
+
"--note <\u30E1\u30E2> \u304B --clear \u306E\u3069\u3061\u3089\u304B\u4E00\u65B9\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",cardUsage("note"));backNoteOf(input);return prepareCardTarget(input,ctx,cardUsage("note"))},plan:notePlan,execute:async(input,ctx)=>({data:noteResult(await ctx.send(notePlan(input)),cardIdOf(input,cardUsage("note")))}),summarize:body=>pick(cardRow(body),CARD_COLUMNS),raw:cardRow},{name:"delete",summary:"\u540D\u523A\u30921\u4EF6\u524A\u9664\u3059\u308B\uFF08\u753B\u50CF\u3082\u6D88\u3048\u307E\u3059\u30FB--yes \u304C\u8981\u308B\uFF09",
|
|
129
|
+
usage:"twp customer business-card delete <\u540D\u523AID> --customer <\u9867\u5BA2> --contact <\u62C5\u5F53\u8005ID> --yes",description:`${CARD_REF_HELP}
|
|
130
|
+
\u540D\u523A\u306E\u753B\u50CF\uFF08\u8868\u30FB\u88CF\u306E\u6DFB\u4ED8\uFF09\u3082\u30B5\u30FC\u30D0\u304C\u4F75\u305B\u3066\u524A\u9664\u3057\u307E\u3059\u3002\u62C5\u5F53\u8005\u305D\u306E\u3082\u306E\u306F\u6D88\u3048\u307E\u305B\u3093\u3002`,destructive:true,flags:[CUSTOMER_FLAG,CONTACT_FLAG],forbidden:CARD_FORBIDDEN_EDIT,async prepare(input,ctx){cardIdOf(input,cardUsage("delete"));return prepareCardTarget(input,ctx,cardUsage("delete"))},plan:deletePlan,execute:async(input,ctx)=>({data:deleteResult(
|
|
131
|
+
await ctx.send(deletePlan(input)),cardIdOf(input,cardUsage("delete")))}),summarize:cardRow,raw:cardRow}]};function notePlan(input){return{method:"PATCH",path:`${contactPathOf(input,cardUsage("note"))}/business-cards/${encodeURIComponent(cardIdOf(input,cardUsage("note")))}`,body:{back_note:input.flags.has(CLEAR_NOTE_FLAG.name)?null:backNoteOf(input)}}}function deletePlan(input){return{method:"DELETE",path:`${contactPathOf(input,cardUsage("delete"))}/business-cards/${encodeURIComponent(cardIdOf(input,
|
|
132
|
+
cardUsage("delete")))}`}}function noteResult(body,cardId){const card=cardAfter(body,cardId,"\u88CF\u9762\u30E1\u30E2\u306E\u66F4\u65B0");if(card===void 0)throw new ApiResponseError(`\u88CF\u9762\u30E1\u30E2\u306E\u66F4\u65B0\u306E\u5FDC\u7B54\u306B\u540D\u523A ${cardId} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return card}function deleteResult(body,cardId){const remaining=cardsOf(body,"\u540D\u523A\u306E\u524A\u9664");
|
|
133
|
+
if(remaining.some(row=>row["card_id"]===cardId)){throw new ApiResponseError(`\u540D\u523A\u306E\u524A\u9664\u306E\u5FDC\u7B54\u306B\u540D\u523A ${cardId} \u304C\u6B8B\u3063\u3066\u3044\u307E\u3059\u3002twp customer business-card list \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002`)}return{deleted:cardId,remaining:remaining.length}}var SIMILAR_COLUMNS=["id","name","address","contact_count"];function similarRows(body){const data=isRecord(body)?body["data"]:void 0;if(!isRecord(body)||
|
|
134
|
+
body["result"]!==true||!Array.isArray(data)){throw new ApiResponseError("\u985E\u4F3C\u4F01\u696D\u691C\u7D22\u306E\u5FDC\u7B54\u306B data \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return data}var searchSimilarOperation={name:"search-similar",summary:"\u767B\u9332\u306E\u524D\u306B\u3001\u540D\u524D\u304C\u4F3C\u305F\u65E2\u5B58\u306E\u53D6\u5F15\u5148\u3092\u63A2\u3059\uFF08\u91CD\u8907\u78BA\u8A8D\uFF09",
|
|
135
|
+
usage:"twp customer search-similar <\u4F01\u696D\u540D> [--limit <\u4EF6\u6570>]",description:`\u4F01\u696D\u540D\u306E\u90E8\u5206\u4E00\u81F4\uFF08\u300C\u682A\u5F0F\u4F1A\u793E\u300D\u306A\u3069\u3092\u9664\u3044\u305F\u540D\u524D\u3067\u3082\u7167\u5408\uFF09\u3067\u3001\u65E2\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u53D6\u5F15\u5148\u3092\u63A2\u3057\u307E\u3059\u3002
|
|
136
|
+
\u9867\u5BA2\u3060\u3051\u3067\u306A\u304F\u4ED5\u5165\u5148\u3060\u3051\u306E\u53D6\u5F15\u5148\u3082\u5F53\u305F\u308A\u307E\u3059\u3002\u62C5\u5F53\u8005\u6570\uFF08contact_count\uFF09\u3082\u51FA\u307E\u3059\u3002
|
|
137
|
+
--limit \u306E\u65E2\u5B9A\u306F\u30B5\u30FC\u30D0\u306E 10 \u4EF6\u3067\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\u306F 50 \u4EF6\uFF09\u3002
|
|
138
|
+
|
|
139
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${SIMILAR_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[{name:"--limit",summary:"\u6700\u5927\u4EF6\u6570\uFF08\u65E2\u5B9A 10\u30FB\u30B5\u30FC\u30D0\u306E\u4E0A\u9650 50\uFF09",takesValue:true,placeholder:"<\u4EF6\u6570>"}],forbidden:levelForbidden(CUSTOMER_LICENSE,"\u985E\u4F3C\u4F01\u696D\u306E\u691C\u7D22\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"),
|
|
140
|
+
plan(input){const[raw,...rest]=input.args;if(raw===void 0||raw.trim()==="")throw new UsageError("\u4F01\u696D\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp customer search-similar help");if(rest.length>0){throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u4F01\u696D\u540D\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,'\u7A7A\u767D\u3092\u542B\u3080\u540D\u524D\u306F\u5F15\u7528\u7B26\u3067\u56F2\u3093\u3067\u304F\u3060\u3055\u3044\uFF08\u4F8B: "\u682A\u5F0F\u4F1A\u793E \u30B5\u30F3\u30D7\u30EB"\uFF09\u3002')}
|
|
141
|
+
return{method:"GET",path:`${CUSTOMERS_PATH}/companies/search-similar`,query:{name:raw.trim(),limit:positiveInteger(input.flags,"--limit")}}},summarize:body=>similarRows(body).map(row=>pick(row,SIMILAR_COLUMNS)),raw:similarRows};var customerWriteOperations=[createOperation,updateOperation,deleteOperation,searchSimilarOperation];var customerSubresources=[contactResource,interactionResource,businessCardResource];export{levelForbidden,COMPANY_LICENSE,CUSTOMER_LICENSE,childForbidden,COMPANY_FIELDS,INTERACTION_TYPES,INTERACTION_FIELDS,dataOf,CUSTOMER_FLAG,prepareCustomerFlag,customerWriteOperations,customerSubresources};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{repeatedValues}from"./chunk-IOGVQVGD.js";import{isoDate}from"./chunk-UDPJ2IGK.js";import{SALES_ESTIMATES_PATH,SALES_INVOICES_PATH,isExactNumericId,resolveNamed}from"./chunk-
|
|
3
|
+
import{repeatedValues}from"./chunk-IOGVQVGD.js";import{isoDate}from"./chunk-UDPJ2IGK.js";import{SALES_ESTIMATES_PATH,SALES_INVOICES_PATH,isExactNumericId,resolveNamed}from"./chunk-DBIDYOKW.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-R53CMVWR.js";import{withResolved}from"./chunk-ZN5EFDH7.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";import{
|
|
4
4
|
ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var ESTIMATE_STATUSES={new:"\u4F5C\u6210\u4E2D",create_completed:"\u4F5C\u6210\u5B8C\u4E86",in_progress:"\u7533\u8ACB\u4E2D",approved:"\u627F\u8A8D\u6E08",submitted:"\u63D0\u793A\u6E08",rejected:"\u5DEE\u3057\u623B\u3057",deleted:"\u524A\u9664\u6E08"};var INVOICE_STATUSES={new:"\u4F5C\u6210\u4E2D",create_completed:"\u4F5C\u6210\u5B8C\u4E86",in_progress:"\u7533\u8ACB\u4E2D",approved:"\u627F\u8A8D\u6E08",rejected:"\u5DEE\u3057\u623B\u3057",submitted:"\u63D0\u793A\u6E08",manager_confirmation:"\u6848\u4EF6\u62C5\u5F53\u8005\
|
|
5
5
|
_\u6848\u4EF6\u5185\u5BB9\u30FB\u91D1\u984D\u78BA\u8A8D",invoice_issued:"\u8ACB\u6C42\u66F8\u767A\u884C\u6E08",sent_to_client:"\u5148\u65B9\u9001\u4ED8\u6E08",archived:"\u4FDD\u7BA1\u6E08",deleted:"\u524A\u9664\u6E08",cancelled:"\u53D6\u6D88\uFF08\u7121\u52B9\uFF09",lost:"\u5931\u6CE8"};var ALLOCATION_STATUSES={unallocated:"\u672A\u56DE\u53CE",allocated:"\u56DE\u53CE\u6E08"};function statusRefs(table){return Object.entries(table).map(([code,name])=>({id:code,name,code}))}function statusHelp(table){
|
|
6
6
|
return Object.entries(table).map(([code,name])=>`${code}\uFF08${name}\uFF09`).join(" / ")}function licenseForbidden(guidance){return body=>body?.error==="permission_denied"?guidance:void 0}function featureLicenseGuidance(feature){return`${feature}\u3092\u4F7F\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C${feature}\u3092\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E${feature}\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
3
|
+
import{isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{AuthSession,loadCredentials,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,effectiveRelayUrl,resolveConfiguredModel,resolveProfile}from"./chunk-4VZKNEVN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";var MAX_EVENT_BYTES=8*1024*1024;var SseBufferOverflowError=class extends Error{constructor(limit){super(`SSE \u306E\u30A4\u30D9\u30F3\u30C8\u5883\u754C\uFF08\u7A7A\u884C\uFF09\u304C ${limit} \u30D0\u30A4\u30C8\u4EE5\u5185\u306B\u73FE\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306E\u5FDC\u7B54\u304C\u58CA\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`)}};var SseParser=class{constructor(maxEventBytes=MAX_EVENT_BYTES){this.maxEventBytes=maxEventBytes}maxEventBytes;buffer="";pendingCr=false;push(chunk){
|
|
4
4
|
let pending=this.pendingCr?`\r${chunk}`:chunk;this.pendingCr=pending.endsWith("\r");if(this.pendingCr)pending=pending.slice(0,-1);this.buffer+=pending.replace(/\r\n/g,"\n").replace(/\r/g,"\n");if(this.buffer.length>this.maxEventBytes){this.buffer="";this.pendingCr=false;throw new SseBufferOverflowError(this.maxEventBytes)}const events=[];for(;;){const boundary=this.buffer.indexOf("\n\n");if(boundary===-1)break;const block=this.buffer.slice(0,boundary);this.buffer=this.buffer.slice(boundary+2);const parsed=parseBlock(
|
|
5
5
|
block);if(parsed)events.push(parsed)}return events}flush(){const rest=(this.pendingCr?`${this.buffer}
|
|
6
6
|
`:this.buffer).trim();this.buffer="";this.pendingCr=false;if(rest==="")return[];const parsed=parseBlock(rest);return parsed?[parsed]:[]}};function parseBlock(block){let event="message";const data=[];for(const line of block.split("\n")){if(line.startsWith(":"))continue;const colon=line.indexOf(":");const field=colon===-1?line:line.slice(0,colon);let value=colon===-1?"":line.slice(colon+1);if(value.startsWith(" "))value=value.slice(1);if(field==="event")event=value;else if(field==="data")data.push(
|