@tocca-systems/twp-cli 0.76.0 → 0.77.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 +4 -0
- package/README.md +29 -1
- package/dist/{agent-63DPLVPG.js → agent-76W4NFZE.js} +1 -1
- package/dist/{analysis-SDYGHILR.js → analysis-7PNFFLPQ.js} +2 -2
- package/dist/{announcement-4RI2COFS.js → announcement-HYMSN6ZR.js} +1 -1
- package/dist/{api-command-OKQHSCD4.js → api-command-L4HJRG3D.js} +2 -2
- package/dist/{app-OAJTDDSR.js → app-QBAP55F5.js} +2 -2
- package/dist/{attendance-correct-NJACXW3S.js → attendance-correct-7IKTSZ6I.js} +1 -1
- package/dist/{attendance-lists-AUEECNJL.js → attendance-lists-7SOG6G4N.js} +1 -1
- package/dist/{backlog-NQUZQSCY.js → backlog-IJTBHL3Z.js} +1 -1
- package/dist/{budget-ILEQGQOA.js → budget-ZWB346BP.js} +1 -1
- package/dist/{chunk-LWJI22LF.js → chunk-3WPHZXST.js} +1 -1
- package/dist/{chunk-YX6ONBPK.js → chunk-436IBRP4.js} +1 -1
- package/dist/{chunk-BATCC7M5.js → chunk-4OJD5FKD.js} +2 -2
- package/dist/{chunk-3GYJG6DA.js → chunk-4URNOAMG.js} +1 -1
- package/dist/{chunk-IMXXECCD.js → chunk-6TSP4IP5.js} +1 -1
- package/dist/{chunk-NNDUIAGN.js → chunk-AITUAHWK.js} +1 -1
- package/dist/{chunk-7FJFBIVB.js → chunk-AM7Y4QRF.js} +2 -2
- package/dist/{license-ME2GUNJQ.js → chunk-AVFQ2LM5.js} +19 -20
- package/dist/{chunk-5VZSHYKX.js → chunk-CFTAGW2J.js} +1 -1
- package/dist/{chunk-ICGIHXBA.js → chunk-DLDDMXZT.js} +1 -1
- package/dist/{chunk-7APLKLQL.js → chunk-GHE6X45G.js} +26 -23
- package/dist/{chunk-CZUXTKMR.js → chunk-GQEXST5N.js} +1 -1
- package/dist/{chunk-QO2QPN3M.js → chunk-H7MIIYRN.js} +1 -1
- package/dist/{chunk-NFTLHE4Z.js → chunk-HFZGBHTB.js} +1 -1
- package/dist/{chunk-URI3URUA.js → chunk-HZYP3BMS.js} +2 -2
- package/dist/{chunk-PCE6OI4L.js → chunk-L7T2CQ3M.js} +1 -1
- package/dist/{chunk-MNFO6G2H.js → chunk-MZVXEYOV.js} +1 -1
- package/dist/{chunk-CKZDTAMN.js → chunk-SAH5WS3K.js} +1 -1
- package/dist/chunk-SZWDH33O.js +11 -0
- package/dist/{chunk-UVU7JXCG.js → chunk-XG2JN66A.js} +1 -1
- package/dist/{chunk-CKYCRD2J.js → chunk-YM4U6A4Y.js} +1 -1
- package/dist/cli.js +9 -5
- package/dist/{company-QFIHJ4OY.js → company-WLPLQINW.js} +2 -2
- package/dist/{contract-IGH7GFOM.js → contract-MC6HSQER.js} +2 -2
- package/dist/{department-TIW5YISO.js → department-3YEKQJ6I.js} +1 -1
- package/dist/{deposit-2YPPFQVR.js → deposit-RFTXWS5D.js} +1 -1
- package/dist/{domain-knowledge-F3GKX2VI.js → domain-knowledge-EXMD2NMI.js} +1 -1
- package/dist/{estimate-JBQSEUJY.js → estimate-BPY7AFDK.js} +3 -3
- package/dist/{evaluation-4QE4L3OG.js → evaluation-ESIPIC3K.js} +1 -1
- package/dist/{expense-CFHOIO3I.js → expense-ISK4RPCY.js} +1 -1
- package/dist/{fiscal-year-N7POJ77K.js → fiscal-year-F2DVA2GB.js} +1 -1
- package/dist/{holiday-WRSUBPT3.js → holiday-5ZAH6U6Z.js} +1 -1
- package/dist/{inquiry-6ANZ6HKD.js → inquiry-3KEU4MAN.js} +1 -1
- package/dist/{invoice-INIF6BUD.js → invoice-BTVMPVKS.js} +2 -2
- package/dist/{job-title-KOFDOB65.js → job-title-NO5VRM5J.js} +1 -1
- package/dist/{knowledge-W3ONOGV2.js → knowledge-TXUSVHRG.js} +1 -1
- package/dist/{leave-LE3CIRPT.js → leave-VZCKDT73.js} +2 -2
- package/dist/license-JVYLYTSV.js +4 -0
- package/dist/{media-FDOAC5ZH.js → media-YILATBAI.js} +2 -2
- package/dist/{notification-N4FVLOPW.js → notification-TSLB2ZHF.js} +1 -1
- package/dist/{oneshot-ALYKVJW2.js → oneshot-GF6TO7AH.js} +1 -1
- package/dist/{position-4C37LALY.js → position-IREP6O4N.js} +1 -1
- package/dist/{project-DUHSOINK.js → project-XIBLUUAR.js} +1 -1
- package/dist/{prospect-QRTQA2R6.js → prospect-IXEACPLB.js} +2 -2
- package/dist/{purchase-LWRNGP3T.js → purchase-ADUT2XJU.js} +3 -3
- package/dist/{receivable-A4T74HZK.js → receivable-JNXWOLJN.js} +1 -1
- package/dist/{redmine-X2GTGXHG.js → redmine-WOVVB7SU.js} +1 -1
- package/dist/{registry-NQZQRUDI.js → registry-FOBQSQFB.js} +1 -1
- package/dist/{report-UNEQSKNU.js → report-52ZHE57K.js} +1 -1
- package/dist/{run-UYJP4Z5U.js → run-X6MY7CER.js} +1 -1
- package/dist/{sales-ai-review-IT6X4YQB.js → sales-ai-review-JBDTSY67.js} +1 -1
- package/dist/{sales-master-QYNSMAP4.js → sales-master-HQTY3C24.js} +2 -2
- package/dist/{sales-numbering-LZQCKDUM.js → sales-numbering-NZW2RNOS.js} +1 -1
- package/dist/{search-GZIEQYLJ.js → search-FOUZEY5X.js} +1 -1
- package/dist/{segment-NNWN5KJB.js → segment-3CMYFOFP.js} +1 -1
- package/dist/{skill-MWETUX56.js → skill-U6757V7A.js} +1 -1
- package/dist/{supplier-payment-4UKRQZHS.js → supplier-payment-NG3PYZAH.js} +2 -2
- package/dist/{support-JJ7ZCJFX.js → support-JS35JS7I.js} +1 -1
- package/dist/{task-HAVEGLQC.js → task-3OK44YBT.js} +2 -2
- package/dist/{user-VRMLWGQ2.js → user-4BL2ILYK.js} +101 -22
- package/dist/{user-contract-type-ZCUMSGVP.js → user-contract-type-XHCKC6T7.js} +1 -1
- package/dist/{worker-agent-VCJUJDBO.js → worker-agent-XTDV36WT.js} +1 -1
- package/dist/{workflow-I7L476KK.js → workflow-Q7XCMDRH.js} +1 -1
- package/package.json +1 -1
- package/dist/chunk-YIH36ZDI.js +0 -11
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{FISCAL_YEAR_FLAG,fiscalYear,skillNames}from"./chunk-
|
|
4
|
-
import{booleanText,boundedText,isoDate,isoDateValue}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import{DEPARTMENTS_PATH,ORG_MASTER_LIMIT,POSITIONS_PATH}from"./chunk-
|
|
5
|
-
import"./chunk-
|
|
3
|
+
import{FISCAL_YEAR_FLAG,fiscalYear,skillNames}from"./chunk-L7T2CQ3M.js";import{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems}from"./chunk-HZYP3BMS.js";import{LICENSE_FEATURE_NAMES,levelHoldsSeat,permissionMovesSeat,readLicenses}from"./chunk-AVFQ2LM5.js";import{CONCURRENCY,exportOperation,mapPool,pacedSender}from"./chunk-DYNNGNXR.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import"./chunk-3WPHZXST.js";import{USER_REF_FLAG,USER_REF_HELP,prepareUser,userPath}from"./chunk-XG2JN66A.js";
|
|
4
|
+
import"./chunk-EXT4AIDF.js";import{createFlags,fieldBody,hasAnyField,resolveRefFields,updateFlags}from"./chunk-AITUAHWK.js";import{booleanText,boundedText,isoDate,isoDateValue}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import{DEPARTMENTS_PATH,ORG_MASTER_LIMIT,POSITIONS_PATH}from"./chunk-GHE6X45G.js";
|
|
5
|
+
import{ResolveError,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";
|
|
6
|
+
import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";var ASSIGNMENT_COLUMNS=["id","department_name","position_name","start_date","end_date","is_primary","is_current","is_approval_route","effective_status"];function assignmentRows(body){const response=isRecord(body)&&"response"in body?body["response"]:body;const list=isRecord(response)?response["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u6240\u5C5E\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
6
7
|
return list}async function nameMap(ctx,path,label2){try{const body=await ctx.send({method:"GET",path,query:{limit:ORG_MASTER_LIMIT}});const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list))throw new Error(`${label2}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093`);const count=isRecord(body)?body["count"]:void 0;if(typeof count==="number"&&count>list.length){ctx.warn(`${label2}\u4E00\u89A7\u304C ${count} \u4EF6\u4E2D ${list.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\u3089\
|
|
7
8
|
\u308C\u305F\u305F\u3081\u3001\u4E00\u90E8\u306E${label2}\u540D\u306F\u7A7A\u6B04\u3067\u3059\u3002ID \u306F --output json \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`)}const map={};for(const row of list){if(isRecord(row)&&typeof row["id"]==="string"&&typeof row["name"]==="string"){map[row["id"]]=row["name"]}}return map}catch(err){ctx.warn(`${label2}\u540D\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u3001${label2}\u540D\u306E\u5217\u306F\u7A7A\u6B04\u3067\u3059\uFF08${err.
|
|
8
9
|
message}\uFF09\u3002ID \u306F --output json \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`);return{}}}function assignmentPlan(input){const suffix=input.flags.has("--current")?"/assignments/current":"/assignments";return{method:"GET",path:`/api/v2/organization/users/${userPath(input,suffix)}`}}var listOperation={name:"list",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\u306E\u5C65\u6B74\u3092\u4E00\u89A7\u3059\u308B",usage:"twp user assignment list <\u30E6\u30FC\u30B6\u30FC> [--current]",
|
|
@@ -152,7 +153,7 @@ USER_REF_HELP,forbidden:"\u7814\u4FEE\u5C65\u6B74\u3092\u53C2\u7167\u3059\u308B\
|
|
|
152
153
|
placeholder:"<YYYY-MM-DD>"}],async prepare(input,ctx){isoDate(input,"--from");isoDate(input,"--to");return prepareUser(input,ctx,"twp user trainings help")},plan:input=>({method:"GET",path:`/api/v2/hr/users/${userPath(input,"/training-history")}`,query:{date_from:isoDate(input,"--from"),date_to:isoDate(input,"--to")}}),summarize:body=>trainingRows(body).map(row=>pick(row,TRAINING_COLUMNS)),raw:body=>trainingRows(body),notes(body){const summary=isRecord(body)?body["summary"]:void 0;if(!isRecord(summary))
|
|
153
154
|
return[];const n=key=>String(summary[key]??0);return[`\u7814\u4FEE ${n("total")} \u4EF6\uFF08\u53D7\u8B1B\u6E08\u307F ${n("completed")} / \u4E88\u5B9A ${n("scheduled")} / \u6B20\u5E2D ${n("absent")} / \u53D6\u6D88 ${n("cancelled")}\uFF09`]}};var userHrOperations=[skillsOperation,qualificationsOperation,trainingsOperation,contractsOperation];var INVITATIONS_PATH="/api/v2/admin/invitations";var INVITE_ROLES=["user","admin","super_admin"];var BULK_MAX=50;var CSV_MAX_BYTES=256*1024;var EMAIL_RE=/^[^\s@,;]+@[^\s@,;]+$/;var LIST_COLUMNS=["email","user_name","role","status","created_at","expires_at"];var ROLE_HELP="\u6A29\u9650\u306F user\uFF08\u4E00\u822C\uFF09/ admin\uFF08\u7BA1\u7406\u8005\uFF09/ super_admin\uFF08\u5168\u4F53\u7BA1\u7406\u8005\uFF09\u3067\u3059\u3002";var FORBIDDEN2="\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306E\u62DB\u5F85\u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u6271\u3048\u307E\u3059";
|
|
154
155
|
var INVITE_REF_HELP="<\u62DB\u5F85> \u306F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u6307\u5B9A\u3057\u307E\u3059\uFF08\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u304C1\u4EF6\u306B\u7D5E\u308C\u305F\u3068\u304D\u3060\u3051\u53D7\u3051\u4ED8\u3051\u307E\u3059\uFF09\u3002\n\u5BFE\u8C61\u306F twp user invite list \u306B\u51FA\u308B\u62DB\u5F85\uFF08\u671F\u9650\u5185\u306E\u672A\u53D7\u8AFE\uFF09\u3060\u3051\u3067\u3059\u3002\n\u540C\u3058\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306B\u672A\u53D7\u8AFE\u306E\u62DB\u5F85\u304C\u8907\u6570\u3042\u308B\u3068\u304D\u306F\u3001twp user invite list --no-redact \u3067\n\u30C8\u30FC\u30AF\u30F3\u3092\u78BA\u8A8D\u3057\u3066\u3001\u30C8\u30FC\u30AF\u30F3\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
155
|
-
function roleValue(raw,
|
|
156
|
+
function roleValue(raw,where2){const value=raw.trim().toLowerCase();if(!INVITE_ROLES.includes(value)){throw new UsageError(`${where2}\u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,ROLE_HELP)}return value}function successAck(body,label2){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${label2}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
156
157
|
return{result:true,message:body["message"]??null}}function invitationRows(body){const rows=isRecord(body)?body["invitations"]:void 0;if(!Array.isArray(rows)){throw new ApiResponseError("\u62DB\u5F85\u4E00\u89A7\u306E\u5FDC\u7B54\u306B invitations \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return rows.filter(isRecord)}function cell(raw){const trimmed=raw.trim();return trimmed.length>=2&&trimmed.startsWith(
|
|
157
158
|
'"')&&trimmed.endsWith('"')?trimmed.slice(1,-1).trim():trimmed}function parseInviteCsv(text){const rows=[];const errors=[];const seen=new Map;const lines=text.replace(/^\uFEFF/,"").split(/\r?\n/);let headerChecked=false;lines.forEach((raw,index)=>{const line=index+1;if(raw.trim()===""||raw.trim().startsWith("#"))return;const cells=raw.split(",").map(cell);if(!headerChecked){headerChecked=true;const head=(cells[0]??"").toLowerCase();if(head==="email"||head==="\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9"||
|
|
158
159
|
head==="mail")return}if(cells.length!==2){errors.push(`${line} \u884C\u76EE: \u5217\u304C ${cells.length} \u500B\u3042\u308A\u307E\u3059\uFF08\u300C\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9, \u6A29\u9650\u300D\u306E2\u5217\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u6C0F\u540D\u306F\u53D7\u8AFE\u6642\u306B\u672C\u4EBA\u304C\u5165\u529B\u3057\u307E\u3059\uFF09`);return}const[email,role]=cells;if(!EMAIL_RE.test(email)){errors.push(`${line} \u884C\u76EE: \u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u5F62\u304C\u9055\u3044\u307E\u3059: ${email===
|
|
@@ -200,7 +201,85 @@ usage:"twp user invite resend <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9|\u30C8
|
|
|
200
201
|
body,"\u62DB\u5F85\u306E\u518D\u9001")},{name:"delete",summary:"\u62DB\u5F85\u3092\u53D6\u308A\u6D88\u3059\uFF08\u53D7\u8AFE\u7528\u306E\u30EA\u30F3\u30AF\u304C\u4F7F\u3048\u306A\u304F\u306A\u308B\uFF09",usage:"twp user invite delete <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9|\u30C8\u30FC\u30AF\u30F3> --yes",description:`${INVITE_REF_HELP}
|
|
201
202
|
|
|
202
203
|
\u53D6\u308A\u6D88\u3057\u305F\u62DB\u5F85\u306F\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u62DB\u5F85\u3059\u308B\u3068\u304D\u306F twp user invite create \u3092\u4F7F\u3044\u307E\u3059\u3002`,destructive:true,forbidden:FORBIDDEN2,flags:[INVITE_REF_FLAG],prepare:input=>prepareInvite(input,"twp user invite delete help"),plan:input=>refPlan(input,"DELETE"),plannedNotes:refNotes,async execute(input,ctx){return ctx.send({method:"DELETE",path:invitePath(await tokenFor(input,
|
|
203
|
-
ctx))})},summarize:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88"),raw:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88")}]};var
|
|
204
|
+
ctx))})},summarize:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88"),raw:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88")}]};var FORBIDDEN3="\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user permission \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059";var UPDATE_USAGE="twp user permission update <\u30E6\u30FC\u30B6\u30FC> --feature <\u6A5F\u80FD> --level <\u30EC\u30D9\u30EB> | twp user permission update <\u30E6\u30FC\u30B6\u30FC> --feature <\u6A5F\u80FD>=<\u30EC\u30D9\u30EB> [--feature \u2026] | twp user permission update --file <CSV>";var UPDATE_HELP="\
|
|
205
|
+
twp user permission update help";var LIST_USAGE="twp user permission list <\u30E6\u30FC\u30B6\u30FC>";var CSV_MAX_BYTES2=1024*1024;var CSV_HEADERS=new Set(["user","\u30E6\u30FC\u30B6\u30FC","email","\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9"]);var REFLECT_NOTE="\u672C\u4EBA\u306E\u753B\u9762\u30FBAPI \u306B\u52B9\u304F\u307E\u3067\u6700\u59275\u5206\u307B\u3069\u304B\u304B\u308A\u307E\u3059\uFF08\u30ED\u30B0\u30A4\u30F3\u4E2D\u306E\u30C8\u30FC\u30AF\u30F3\u306B\u8F09\u3063\u305F\u6A29\u9650\u306F\u4E00\u5B9A\u6642\u9593\u3054\u3068\u306B\u8AAD\u307F\u76F4\u3055\u308C\u307E\u3059\u3002\u30B5\u30FC\u30D0\u306E\u8A2D\u5B9A\u306B\u3088\u308A\u6700\u957730\u5206\uFF09\u3002";
|
|
206
|
+
var FEATURE_FLAG={name:"--feature",summary:"\u5909\u3048\u308B\u6A5F\u80FD\uFF08\u30B3\u30FC\u30C9\u304B\u8868\u793A\u540D\u3002<\u6A5F\u80FD>=<\u30EC\u30D9\u30EB> \u306E\u5F62\u306A\u3089\u7E70\u308A\u8FD4\u3057\u6307\u5B9A\u3067\u304D\u308B\uFF09",takesValue:true,placeholder:"<\u6A5F\u80FD[=\u30EC\u30D9\u30EB]>",repeatable:true};var LEVEL_FLAG={name:"--level",summary:"\u5909\u66F4\u5F8C\u306E\u30EC\u30D9\u30EB\uFF08none / member / admin \u7B49\u3002\u6A5F\u80FD\u3054\u3068\u306B\u9055\u3046\uFF09",
|
|
207
|
+
takesValue:true,placeholder:"<\u30EC\u30D9\u30EB>"};var FILE_FLAG2={name:"--file",summary:"\u4E00\u62EC\u3067\u5909\u3048\u308B CSV\uFF08\u30E6\u30FC\u30B6\u30FC, \u6A5F\u80FD, \u30EC\u30D9\u30EB\uFF09",takesValue:true,placeholder:"<CSV>"};async function featureDefs(ctx){try{return await ctx.resolver.featurePermissions()}catch(err){if(err instanceof ResolveError&&err.status===403)throw new ResolveError(`${FORBIDDEN3}\uFF08${err.message}\uFF09`,403);throw err}}function featureDef(value,defs){const trimmed=value.
|
|
208
|
+
trim();const byCode=defs.get(trimmed.toLowerCase());if(byCode!==void 0)return byCode;const byName=new Map;for(const def of defs.values())if(def.label===trimmed)byName.set(def.code,def);for(const[code,name]of Object.entries(LICENSE_FEATURE_NAMES)){const def=defs.get(code);if(name===trimmed&&def!==void 0)byName.set(code,def)}if(byName.size>1){throw new UsageError(`\u6A5F\u80FD\u300C${trimmed}\u300D\u306B\u5F53\u305F\u308B\u6A5F\u80FD\u304C\u8907\u6570\u3042\u308A\u307E\u3059: ${[...byName.keys()].
|
|
209
|
+
join(" / ")}`,"\u6A5F\u80FD\u30B3\u30FC\u30C9\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const named=[...byName.values()][0];if(named!==void 0)return named;throw new UsageError(`\u6A5F\u80FD\u300C${trimmed===""?"\uFF08\u7A7A\uFF09":trimmed}\u300D\u304C\u5206\u304B\u308A\u307E\u305B\u3093`,"\u6A5F\u80FD\u30B3\u30FC\u30C9\uFF08wiki_management \u7B49\uFF09\u304B\u753B\u9762\u306E\u8868\u793A\u540D\uFF08Wiki\u7BA1\u7406 \u7B49\uFF09\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4E00\u89A7\u306F twp user permission list <\u30E6\u30FC\u30B6\u30FC> \u3067\u898B\u3089\u308C\u307E\u3059\u3002")}
|
|
210
|
+
function levelOf(value,def){const level=value.trim().toLowerCase();if(!def.levels.includes(level)){throw new UsageError(`${def.label}\uFF08${def.code}\uFF09\u306B\u300C${value.trim()===""?"\uFF08\u7A7A\uFF09":value.trim()}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`${def.label} \u306B\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${def.levels.join(" / ")} \u3067\u3059\u3002`)}return level}function parsePermissionCsv(text){const rows=[];const errors=[];const seen=new Map;let headerChecked=false;
|
|
211
|
+
text.replace(/^\uFEFF/,"").split(/\r?\n/).forEach((raw,index)=>{const line=index+1;if(raw.trim()===""||raw.trim().startsWith("#"))return;const cells=splitCsvLine(raw);if(!headerChecked){headerChecked=true;if(CSV_HEADERS.has((cells[0]??"").toLowerCase()))return}if(cells.length!==3){errors.push(`${line} \u884C\u76EE: \u5217\u304C ${cells.length} \u500B\u3042\u308A\u307E\u3059\uFF08\u30E6\u30FC\u30B6\u30FC, \u6A5F\u80FD, \u30EC\u30D9\u30EB \u306E3\u5217\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF09`);
|
|
212
|
+
return}const[user,feature,level]=cells;const missing=[user===""?"\u30E6\u30FC\u30B6\u30FC":null,feature===""?"\u6A5F\u80FD":null,level===""?"\u30EC\u30D9\u30EB":null].filter(item=>item!==null);if(missing.length>0){errors.push(`${line} \u884C\u76EE: ${missing.join("\u30FB")}\u304C\u7A7A\u3067\u3059`);return}const key=`${user.toLowerCase()}\0${feature.toLowerCase()}`;const first=seen.get(key);if(first!==void 0){errors.push(`${line} \u884C\u76EE: ${user} \u306E ${feature} \u306F ${first} \u884C\u76EE\u3068\u91CD\u8907\u3057\u3066\u3044\u307E\u3059`);
|
|
213
|
+
return}seen.set(key,line);rows.push({line,user,feature,level})});return{rows,errors}}function flagRows(input,user){const features=repeatedValues(input,FEATURE_FLAG.name);const level=input.flags.get(LEVEL_FLAG.name);if(features.length===0)throw new UsageError("--feature \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",UPDATE_USAGE);if(level!==void 0){if(features.length>1||features[0].includes("=")){throw new UsageError("--level \u3068\u4E00\u7DD2\u306B\u4F7F\u3048\u308B\u306E\u306F --feature 1\u3064\uFF08= \u3092\u542B\u307E\u306A\u3044\u5F62\uFF09\u3060\u3051\u3067\u3059",
|
|
214
|
+
"\u8907\u6570\u306E\u6A5F\u80FD\u3092\u5909\u3048\u308B\u3068\u304D\u306F --feature <\u6A5F\u80FD>=<\u30EC\u30D9\u30EB> \u3092\u7E70\u308A\u8FD4\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--level \u306F\u4ED8\u3051\u307E\u305B\u3093\uFF09\u3002")}return[{line:null,user,feature:features[0],level}]}return features.map(value=>{const at=value.indexOf("=");if(at<0){throw new UsageError(`--feature ${value} \u306E\u30EC\u30D9\u30EB\u304C\u3042\u308A\u307E\u305B\u3093`,"--level <\u30EC\u30D9\u30EB> \u3092\u4ED8\u3051\u308B\u304B\u3001--feature <\u6A5F\u80FD>=\
|
|
215
|
+
<\u30EC\u30D9\u30EB> \u306E\u5F62\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{line:null,user,feature:value.slice(0,at),level:value.slice(at+1)}})}var REJECTED_BEFORE_WRITE=new Set([400,403,404,409,422]);function where(row){return row.line===null?"":`${row.line} \u884C\u76EE: `}async function prepareUpdate(input,ctx){const bulk=input.flags.has(FILE_FLAG2.name);let raw;const errors=[];if(bulk){if(input.args.length>0){throw new UsageError(`--file \u306E\u3068\u304D\u306F\u30E6\u30FC\u30B6\u30FC\u3092\u4F4D\u7F6E\u5F15\u6570\u3067\u53D7\u3051\u307E\u305B\u3093\uFF08CSV \u306E\u5217\u3067\
|
|
216
|
+
\u6307\u5B9A\u3057\u307E\u3059\uFF09: ${input.args.join(" ")}`,UPDATE_HELP)}const mixed=[USER_REF_FLAG.name,FEATURE_FLAG.name,LEVEL_FLAG.name].filter(flag=>input.flags.has(flag)||repeatedValues(input,flag).length>0);if(mixed.length>0){throw new UsageError(`--file \u3068 ${mixed.join(" / ")} \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u884C\u3054\u3068\u306E\u5024\u306F CSV \u306E\u5217\u3067\u6E21\u3057\u307E\u3059\uFF09`,UPDATE_HELP)}const file=input.flags.get(FILE_FLAG2.
|
|
217
|
+
name)??"";if(file.trim()==="")throw new UsageError("--file <CSV> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",UPDATE_HELP);const text=readCsvFileText(file,UPDATE_HELP,CSV_MAX_BYTES2,size=>new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${size} \u30D0\u30A4\u30C8\u30FB\u4E0A\u9650 ${CSV_MAX_BYTES2} \u30D0\u30A4\u30C8\uFF09: ${file}`,"CSV \u3092\u5206\u3051\u3066\u6253\u3063\u3066\u304F\u3060\u3055\u3044\u3002"));const parsed=parsePermissionCsv(
|
|
218
|
+
text);raw=parsed.rows;errors.push(...parsed.errors.map(message=>({line:Number(message.split(" ")[0]),text:message})));if(raw.length===0&&errors.length===0)throw new UsageError(`CSV \u306B\u5909\u3048\u308B\u884C\u304C\u3042\u308A\u307E\u305B\u3093: ${file}`,UPDATE_HELP)}else{const user=singleRef(input,{flag:USER_REF_FLAG.name,label:"\u30E6\u30FC\u30B6\u30FC",usage:UPDATE_USAGE});raw=flagRows(input,user)}const defs=await featureDefs(ctx);const rows=[];const seen=new Map;for(const row of raw){try{
|
|
219
|
+
const def=featureDef(row.feature,defs);const level=levelOf(row.level,def);const user=await ctx.resolver.user(row.user,"\u30E6\u30FC\u30B6\u30FC");const key=`${user.id}\0${def.code}`;const first=seen.get(key);if(first!==void 0){throw new UsageError(`${row.user} \u306E ${def.label} \u306F ${first}\u3068\u540C\u3058\u6307\u5B9A\u3067\u3059\uFF081\u4EBA\u30FB1\u6A5F\u80FD\u306B\u3064\u304D1\u4EF6\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF09`)}seen.set(key,row.line===null?`--feature ${row.feature}`:
|
|
220
|
+
`${row.line} \u884C\u76EE`);rows.push({line:row.line,user:row.user,userId:user.id,feature:def.code,featureLabel:def.label,level})}catch(err){if(!(err instanceof UsageError))throw err;if(!bulk)throw err;errors.push({line:row.line??0,text:`${row.line} \u884C\u76EE: ${err.message}`})}}if(errors.length>0){errors.sort((a,b)=>a.line-b.line);throw new UsageError(`CSV \u306B\u4E0D\u6B63\u306A\u884C\u304C ${errors.length} \u884C\u3042\u308B\u305F\u3081\u30011\u4EF6\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093:
|
|
221
|
+
${errors.map(e=>e.text).join("\n ")}`,`\u6B63\u3057\u3044\u884C\u306F ${rows.length} \u884C\u3067\u3059\u3002\u4E0D\u6B63\u306A\u884C\u3092\u76F4\u3059\u304B\u524A\u9664\u3057\u3066\u304B\u3089\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return withResolved(input,{rows:JSON.stringify(rows)})}function permissionRows(input){return JSON.parse(requireResolved(input,"rows"))}function userPathOf(userId){if(!isSafePathSegment(userId)){throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u30E6\u30FC\u30B6\u30FC ID \u3092\u30D1\u30B9\u306B\
|
|
222
|
+
\u4F7F\u3048\u307E\u305B\u3093: ${userId}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return`/api/v2/admin/users/${encodeURIComponent(userId)}`}function rowPlan2(row){const key=`${row.feature}_level`;return{method:"PUT",path:userPathOf(row.userId),body:{user_id:row.userId,update_fields:[key],[key]:row.level}}}var EFFECT_TEXT={unchanged:"\u5909\u66F4\u306A\u3057",assign:"\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u5272\u308A\u5F53\u3066\u308B\uFF08\u7A7A\u304D \u22121\uFF09",
|
|
223
|
+
release:"\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u89E3\u9664\u3059\u308B\uFF08\u7A7A\u304D +1\uFF09",update:"\u30E9\u30A4\u30BB\u30F3\u30B9\u306F\u305D\u306E\u307E\u307E\uFF08\u5272\u5F53\u306E\u30EC\u30D9\u30EB\u3092\u66F4\u65B0\uFF09",kept:"\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u306F\u6B8B\u308B",none:"\u30E9\u30A4\u30BB\u30F3\u30B9\u306F\u52D5\u304B\u306A\u3044"};function seatEffect(feature,from,to,licensed){if(from===to)return"unchanged";if(levelHoldsSeat(feature,to))return licensed?
|
|
224
|
+
"update":"assign";if(levelHoldsSeat(feature,from))return licensed?"release":"none";return licensed?"kept":"none"}var PLANNED=new WeakMap;function levelFromDetail(detail,feature){const value=isRecord(detail)?detail[`${feature}_level`]:void 0;if(typeof value!=="string"||!/^[a-z][a-z0-9_]*$/.test(value)){throw new ApiResponseError(`\u30E6\u30FC\u30B6\u30FC\u8A73\u7D30\u306E\u5FDC\u7B54\u306E ${feature}_level \u304C\u8AAD\u3081\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
225
|
+
return value}function licenseList(body){const list=isRecord(body)?body["licenses"]:void 0;if(!Array.isArray(list))throw new ApiResponseError("\u30E6\u30FC\u30B6\u30FC\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5FDC\u7B54\u306B licenses \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return list.filter(isRecord)}function seatShortages(items,available){const shortages=[];const features=[...new Set(items.filter(item=>item.
|
|
226
|
+
effect==="assign").map(item=>item.feature))];for(const feature of features){const start=available.get(feature);if(start===void 0||start===null)continue;let free=start;let lowest=start;let assigns=0;let releases=0;for(const item of items){if(item.feature!==feature)continue;if(item.effect==="assign"){free-=1;assigns+=1}else if(item.effect==="release"){free+=1;releases+=1}lowest=Math.min(lowest,free)}if(lowest>=0)continue;const label2=items.find(item=>item.feature===feature)?.featureLabel??feature;
|
|
227
|
+
const order=free>=0?"\uFF08\u89E3\u9664\u306E\u884C\u3092\u5272\u308A\u5F53\u3066\u306E\u884C\u3088\u308A\u524D\u306B\u4E26\u3079\u308C\u3070\u8DB3\u308A\u307E\u3059\uFF09":"";shortages.push(`${label2}\uFF08${feature}\uFF09: \u7A7A\u304D ${start}\u30FB\u5272\u308A\u5F53\u3066 ${assigns} \u4EF6\u30FB\u89E3\u9664 ${releases} \u4EF6 \u2192 ${-lowest} \u8DB3\u308A\u307E\u305B\u3093${order}`)}return shortages}async function planChanges(input,ctx){const cached=PLANNED.get(input);if(cached!==void 0)return cached;
|
|
228
|
+
const rows=permissionRows(input);const send=pacedSender(ctx);const userIds=[...new Set(rows.map(row=>row.userId))];const details=new Map;const licensed=new Map;await mapPool(userIds,CONCURRENCY,async userId=>{const[detail,licenses]=await Promise.all([send({method:"GET",path:userPathOf(userId)}),send({method:"GET",path:`/api/v2/licenses/users/${encodeURIComponent(userId)}`})]);details.set(userId,detail);licensed.set(userId,new Set(licenseList(licenses).map(row=>String(row["feature_code"]??""))))});
|
|
229
|
+
const usage=readLicenses(await send({method:"GET",path:"/api/v2/licenses"}));const items=rows.map(row=>{const detail=details.get(row.userId);const from=levelFromDetail(detail,row.feature);const name=isRecord(detail)&&typeof detail["user_name"]==="string"?detail["user_name"]:null;return{...row,userName:name,from,effect:seatEffect(row.feature,from,row.level,licensed.get(row.userId)?.has(row.feature)??false)}});const available=new Map(usage.map(([code,row])=>[code,row.available]));const shortages=seatShortages(
|
|
230
|
+
items,available);const unknownSeats=[...new Set(items.filter(item=>item.effect==="assign"&&(available.get(item.feature)??null)===null).map(item=>item.featureLabel))];if(shortages.length>0){throw new UsageError(`\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u304C\u8DB3\u308A\u306A\u3044\u305F\u3081\u30011\u4EF6\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093:
|
|
231
|
+
${shortages.join("\n ")}`,"\u30B7\u30FC\u30C8\u3092\u8FFD\u52A0\u3059\u308B\uFF08\u753B\u9762\u306E\u300C\u30E9\u30A4\u30BB\u30F3\u30B9\u7BA1\u7406\u300D\uFF09\u304B\u3001\u5272\u308A\u5F53\u3066\u308B\u4EBA\u6570\u3092\u6E1B\u3089\u3057\u3066\u304B\u3089\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const notes=[`${items.length} \u4EF6\u306E\u6A5F\u80FD\u6A29\u9650\u3092\u5909\u3048\u307E\u3059\uFF08\u5DE6\u304C\u4ECA\u306E\u5024\u3002\u30E9\u30A4\u30BB\u30F3\u30B9\u306F\u9001\u308B\u524D\u306E\u898B\u8FBC\u307F\u3067\u3001\u6700\u7D42\u7684\u306A\u5224\u5B9A\u306F\u30B5\u30FC\u30D0\u304C\u3057\u307E\u3059\uFF09:`];
|
|
232
|
+
for(const item of items){const who=item.userName!==null&&item.userName!==item.user?`${item.userName}\uFF08${item.user}\uFF09`:item.user;notes.push(` ${where(item)}${who} ${item.featureLabel}: ${item.from} \u2192 ${item.level}\uFF08${EFFECT_TEXT[item.effect]}\uFF09`)}const seatLicensed=new Set(usage.map(([code])=>code));for(const[feature,row]of usage){const mine=items.filter(item=>item.feature===feature);const delta=mine.filter(item=>item.effect==="release").length-mine.filter(item=>item.effect===
|
|
233
|
+
"assign").length;if(delta!==0&&row.available!==null){notes.push(`\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D: ${mine[0]?.featureLabel??feature} ${row.available} \u2192 ${row.available+delta}`)}}const unmoved=[...new Set(items.filter(item=>item.effect!=="unchanged"&&seatLicensed.has(item.feature)&&!permissionMovesSeat(item.feature)).map(item=>item.featureLabel))];if(unmoved.length>0){notes.push(`${unmoved.join("\u30FB")} \u306F\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5BFE\u8C61\u3067\u3059\u304C\u3001\u30B5\u30FC\u30D0\u306F\u6A29\u9650\u306E\u5909\u66F4\u3067\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u5272\u308A\u5F53\u3066\u3082\u89E3\u9664\u3082\u3057\u307E\u305B\u3093\uFF08\u753B\u9762\u304B\u3089\u5909\u3048\u305F\u5834\u5408\u3082\u540C\u3058\u3067\u3059\uFF09\u3002`)}
|
|
234
|
+
if(unknownSeats.length>0){notes.push(`${unknownSeats.join("\u30FB")} \u306F\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u3092\u8AAD\u3081\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u7A7A\u304D\u306E\u4E8B\u524D\u691C\u67FB\u3092\u3057\u3066\u3044\u307E\u305B\u3093\uFF08\u8DB3\u308A\u306A\u3051\u308C\u3070\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF09\u3002`)}if(items.some(item=>item.effect==="kept"&&item.level==="none")){notes.push("\u300C\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u306F\u6B8B\u308B\u300D\u306E\u884C\u306F\u3001\u6A29\u9650\u3092 none \u306B\u3057\u3066\u3082\u5272\u5F53\u304C\u5916\u308C\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u304C\u3053\u306E\u5909\u66F4\u3067\u30E9\u30A4\u30BB\u30F3\
|
|
235
|
+
\u30B9\u3092\u52D5\u304B\u3055\u306A\u3044\u305F\u3081\uFF09\u3002")}const planned={items,notes};PLANNED.set(input,planned);return planned}function isUpdateBody(body){return isRecord(body)&&body["permissionUpdate"]===true&&Array.isArray(body["done"])}function writeAck(body){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError("\u6A5F\u80FD\u6A29\u9650\u306E\u66F4\u65B0\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
236
|
+
const rest={...body};delete rest["result"];return rest}function revertCommand(userId,feature,level){return`twp user permission update ${shellQuote(userId)} --feature ${shellQuote(feature)} --level ${shellQuote(level)}`}function revertLines(done){return done.filter(item=>item.effect!=="unchanged").map(item=>` ${revertCommand(item.userId,item.feature,item.from)}${item.line===null?"":` # ${item.line} \u884C\u76EE`}`)}function reasonOf(err){if(err instanceof ApiError){const licenseErrors=err.body?.["\
|
|
237
|
+
license_errors"];if(Array.isArray(licenseErrors)&&licenseErrors.length>0)return licenseErrors.map(String).join(" ")}return err.message}async function runUpdate(input,ctx){const{items}=await planChanges(input,ctx);const send=pacedSender(ctx);const done=[];for(const[index,item]of items.entries()){let response;try{response=writeAck(await send(rowPlan2(item)))}catch(err){const unsent=items.slice(index+1);const rejected=err instanceof ApiError&&REJECTED_BEFORE_WRITE.has(err.status);const written=rejected?
|
|
238
|
+
"\u3053\u306E\u4EF6\u306F\u66F8\u304D\u8FBC\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002":`\u66F8\u304D\u8FBC\u307E\u308C\u305F\u304B\u3069\u3046\u304B\u5206\u304B\u308A\u307E\u305B\u3093\u3002twp user permission list ${shellQuote(item.userId)} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002`;if(items.length===1){if(!rejected)ctx.warn(`${item.featureLabel} \u306E\u5909\u66F4: ${written}`);throw err}const lines=[`\u6A5F\u80FD\u6A29\u9650\u306E\u5909\u66F4\u306F ${where(item)}${item.
|
|
239
|
+
user} ${item.featureLabel} \u3067\u6B62\u307E\u308A\u307E\u3057\u305F\uFF08${items.length} \u4EF6\u4E2D \u6210\u529F ${done.length} \u4EF6\u30FB\u5931\u6557 1 \u4EF6\u30FB\u672A\u9001\u4FE1 ${unsent.length} \u4EF6\uFF09\u3002`,` \u5931\u6557: ${where(item)}${item.user} ${item.featureLabel}\uFF08${reasonOf(err)}\uFF09${written}`,done.length===0?" \u6210\u529F: \u306A\u3057":` \u6210\u529F: ${done.map(d=>`${where(d)}${d.user} ${d.featureLabel}`).join(" / ")}`,unsent.length===0?" \u672A\u9001\u4FE1: \u306A\u3057":
|
|
240
|
+
` \u672A\u9001\u4FE1: ${unsent.map(u=>`${where(u)}${u.user} ${u.featureLabel}`).join(" / ")}`];const reverts=revertLines(done);if(reverts.length>0)lines.push("\u6210\u529F\u3057\u305F\u4EF6\u3092\u5143\u306B\u623B\u3059\u306B\u306F:",...reverts);lines.push(done.length===0?"\u3069\u306E\u4EF6\u3082\u5909\u3048\u3066\u3044\u307E\u305B\u3093\u3002\u539F\u56E0\u3092\u53D6\u308A\u9664\u3044\u3066\u304B\u3089\u540C\u3058\u6307\u5B9A\u3092\u3082\u3046\u4E00\u5EA6\u6D41\u305B\u307E\u3059\u3002":"\u7D9A\u304D\u3092\u6D41\u3059\u3068\
|
|
241
|
+
\u304D\u306F\u3001\u6210\u529F\u3057\u305F\u884C\u3092 CSV \u304B\u3089\u9664\u3044\u3066\u304B\u3089\u6253\u3061\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002");ctx.warn(lines.join("\n"));if(done.length===0||!rejected)throw err;throw new ApiRejectedError(`\u6A5F\u80FD\u6A29\u9650\u306E\u5909\u66F4\u306F\u5B8C\u4E86\u3057\u3066\u3044\u307E\u305B\u3093\uFF08\u6210\u529F ${done.length} \u4EF6\u30FB\u5931\u6557 1 \u4EF6\u30FB\u672A\u9001\u4FE1 ${unsent.length} \u4EF6\uFF09\u3002`)}done.push({line:item.
|
|
242
|
+
line,user:item.user,userId:item.userId,feature:item.feature,featureLabel:item.featureLabel,from:item.from,to:item.level,effect:item.effect,response})}return{permissionUpdate:true,done}}function updateDone(body){if(!isUpdateBody(body))throw new ApiResponseError("\u6A5F\u80FD\u6A29\u9650\u306E\u5909\u66F4\u306E\u7D50\u679C\u3092\u7D44\u307F\u7ACB\u3066\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002");return body.done}var updateOperation2={name:"upda\
|
|
243
|
+
te",summary:"\u6A5F\u80FD\u6A29\u9650\u3092\u5909\u3048\u308B\uFF081\u4EBA\u30FBCSV \u4E00\u62EC\u3002\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u30FB\u89E3\u9664\u306F\u30B5\u30FC\u30D0\u304C\u9023\u52D5\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:UPDATE_USAGE,description:`\u753B\u9762\u306E\u300C\u7D44\u7E54\u7BA1\u7406 > \u30E6\u30FC\u30B6\u30FC\u300D\u306E\u6A5F\u80FD\u6A29\u9650\u3068\u540C\u3058\u5909\u66F4\u3092\u3057\u307E\u3059\uFF08\u540C\u3058 API \u3092\u4F7F\u3044\u307E\u3059\uFF09\u3002
|
|
244
|
+
\u6A5F\u80FD\u306F\u30B3\u30FC\u30C9\uFF08wiki_management\uFF09\u304B\u753B\u9762\u306E\u8868\u793A\u540D\uFF08Wiki\u7BA1\u7406\uFF09\u3067\u3001\u30EC\u30D9\u30EB\u306F\u305D\u306E\u6A5F\u80FD\u304C\u53D6\u308C\u308B\u5024
|
|
245
|
+
\uFF08none / member / admin\u3001none / viewer / editor / admin \u7B49\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\u53D6\u308C\u306A\u3044\u7D44\u307F\u5408\u308F\u305B\u306F\u9001\u308B\u524D\u306B\u6B62\u3081\u307E\u3059\u3002
|
|
246
|
+
\u6A5F\u80FD\u3054\u3068\u306B\u53D6\u308C\u308B\u30EC\u30D9\u30EB\u306F twp user permission list <\u30E6\u30FC\u30B6\u30FC> \u306E levels \u5217\u3067\u898B\u3089\u308C\u307E\u3059\u3002
|
|
247
|
+
|
|
248
|
+
twp user permission update yamada@example.com --feature wiki_management --level editor
|
|
249
|
+
twp user permission update yamada@example.com --feature inquiry=member --feature workflow=none
|
|
250
|
+
|
|
251
|
+
\u4E00\u62EC\uFF08--file\uFF09: CSV \u306E1\u884C\u304C1\u4EBA\u306E1\u6A5F\u80FD\u3067\u3059\u3002\u5217\u306F\u300C\u30E6\u30FC\u30B6\u30FC, \u6A5F\u80FD, \u30EC\u30D9\u30EB\u300D\u306E3\u5217\u3067\u3001
|
|
252
|
+
1\u884C\u76EE\u306E\u30D8\u30C3\u30C0\uFF08user,feature,level\uFF09\u306F\u7701\u7565\u3067\u304D\u307E\u3059\u3002\u7A7A\u884C\u3068 # \u3067\u59CB\u307E\u308B\u884C\u306F\u8AAD\u307F\u98DB\u3070\u3057\u307E\u3059\u3002Shift_JIS \u306E CSV \u3082\u8AAD\u3081\u307E\u3059\u3002
|
|
253
|
+
|
|
254
|
+
user,feature,level
|
|
255
|
+
yamada@example.com,inquiry,member
|
|
256
|
+
E0012,Wiki\u7BA1\u7406,editor
|
|
257
|
+
|
|
258
|
+
\u9001\u308B\u524D\u306B\u5168\u4EF6\u3092\u691C\u67FB\u3057\uFF08\u30E6\u30FC\u30B6\u30FC\u306E\u89E3\u6C7A\u30FB\u6A5F\u80FD\u3068\u30EC\u30D9\u30EB\u306E\u7D44\u307F\u5408\u308F\u305B\u30FB\u540C\u3058\u30E6\u30FC\u30B6\u30FC\u3068\u6A5F\u80FD\u306E\u91CD\u8907\uFF09\u3001
|
|
259
|
+
\u4E0D\u6B63\u306A\u884C\u304C1\u3064\u3067\u3082\u3042\u308C\u3070**1\u4EF6\u3082\u9001\u3089\u305A**\u306B\u3001\u305D\u306E\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
|
|
260
|
+
\u7D9A\u3051\u3066\u4ECA\u306E\u6A29\u9650\u3068\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u3092\u8AAD\u307F\u3001\u300C\u8AB0\u306E\u30FB\u3069\u306E\u6A5F\u80FD\u304C\u30FB\u4F55\u304B\u3089\u4F55\u3078\u30FB\u30E9\u30A4\u30BB\u30F3\u30B9\u304C\u3069\u3046\u306A\u308B\u304B\u300D\u3092 stderr \u306B\u4E26\u3079\u307E\u3059
|
|
261
|
+
\uFF08--dry-run \u306F\u3053\u3053\u307E\u3067\u3067\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002\u5272\u308A\u5F53\u3066\u308B\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u304C\u8DB3\u308A\u306A\u3044\u6A5F\u80FD\u304C\u3042\u308C\u3070\u3001\u6A5F\u80FD\u540D\u3068\u4E0D\u8DB3\u6570\u3092\u51FA\u3057\u3066
|
|
262
|
+
1\u4EF6\u3082\u9001\u3089\u305A\u306B\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u7D42\u308F\u308A\u307E\u3059\u3002
|
|
263
|
+
|
|
264
|
+
\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u30FB\u89E3\u9664\u306F\u30B5\u30FC\u30D0\u304C\u6A29\u9650\u306E\u5909\u66F4\u306B\u5408\u308F\u305B\u3066\u884C\u3044\u307E\u3059\u3002\u3044\u307E\u30B5\u30FC\u30D0\u304C\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u52D5\u304B\u3059\u306E\u306F
|
|
265
|
+
\u554F\u3044\u5408\u308F\u305B\u7BA1\u7406\u30FB\u30B3\u30F3\u30C6\u30F3\u30C4\u7BA1\u7406\u30FB\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\uFF08admin\uFF09\u30FB\u30D2\u30A2\u30EA\u30F3\u30B0\uFF08admin\uFF09\u3060\u3051\u3067\u3001\u305D\u308C\u4EE5\u5916\u306E\u6A5F\u80FD\u306F
|
|
266
|
+
\u6A29\u9650\u3092\u5909\u3048\u3066\u3082\u30E9\u30A4\u30BB\u30F3\u30B9\u306F\u5272\u308A\u5F53\u3066\u3082\u89E3\u9664\u3082\u3055\u308C\u307E\u305B\u3093\uFF08\u753B\u9762\u304B\u3089\u5909\u3048\u305F\u5834\u5408\u3082\u540C\u3058\u3067\u3059\uFF09\u3002
|
|
267
|
+
|
|
268
|
+
\u9001\u4FE1\u306F1\u4EF6\uFF081\u4EBA\u306E1\u6A5F\u80FD\uFF09\u305A\u3064\u3067\u3001\u5931\u6557\u3057\u305F\u3089\u305D\u3053\u3067\u6B62\u3081\u3001\u6210\u529F\u30FB\u5931\u6557\u30FB\u672A\u9001\u4FE1\u306E\u4EF6\u3068\u3001\u6210\u529F\u3057\u305F\u4EF6\u3092\u5143\u306B\u623B\u3059\u30B3\u30DE\u30F3\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
269
|
+
${REFLECT_NOTE}
|
|
270
|
+
|
|
271
|
+
`+USER_REF_HELP,forbidden:FORBIDDEN3,flags:[USER_REF_FLAG,FEATURE_FLAG,LEVEL_FLAG,FILE_FLAG2],prepare:prepareUpdate,plan:input=>rowPlan2(permissionRows(input)[0]),plannedNotes(input){const rows=permissionRows(input);const lines=["\u3053\u306E\u524D\u306B\u3001\u4ECA\u306E\u6A29\u9650\u30FB\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u30FB\u7A7A\u304D\u3092 GET \u3057\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u3060\u3051\uFF09\u3002"];if(rows.length>1)lines.push(`${rows.length} \u4EF6\u30921\u4EF6\u305A\u3064 PUT \u3057\u307E\u3059\
|
|
272
|
+
\uFF08--dry-run \u306B\u51FA\u308B\u8981\u6C42\u306F1\u4EF6\u76EE\u306E\u5206\u3067\u3059\uFF09\u3002`);return lines},async preview(input,ctx){return{notes:(await planChanges(input,ctx)).notes,warnings:[]}},execute:runUpdate,summarize:body=>updateDone(body).map(item=>({line:item.line,user:item.user,feature_name:item.featureLabel,from:item.from,to:item.to,license:EFFECT_TEXT[item.effect]})),raw:body=>updateDone(body).map(item=>({line:item.line,user_id:item.userId,feature_code:item.feature,from_level:item.
|
|
273
|
+
from,to_level:item.to,license_change:item.effect,response:item.response})),notes(body){const done=updateDone(body);const notes=[`${done.length} \u4EF6\u306E\u6A5F\u80FD\u6A29\u9650\u3092\u5909\u3048\u307E\u3057\u305F\u3002${REFLECT_NOTE}`];const reverts=revertLines(done);if(reverts.length>0)notes.push(["\u5143\u306B\u623B\u3059\u306B\u306F:",...reverts].join("\n"));return notes},failures:body=>updateDone(body).flatMap(item=>{const texts=licenseWarnings(item.response);return texts.length===0?[]:[
|
|
274
|
+
{target:`${where(item)}${item.user} ${item.featureLabel}`,error:new ApiRejectedError(`\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u6CE8\u610F: ${texts.join(" / ")}`)}]})};function licenseWarnings(response){const warnings=response["license_warnings"];if(!Array.isArray(warnings))return[];return warnings.map(warning=>isRecord(warning)?String(warning["message"]??warning["feature_label"]??warning["feature"]??""):String(warning))}var LIST_COLUMNS2=["feature_name","feature_code","level","levels","tenant_enabl\
|
|
275
|
+
ed","license_assigned","license_level"];function listRows2(defs,detail,licenses){if(!isRecord(detail)||typeof detail["user_id"]!=="string"){throw new ApiResponseError("\u30E6\u30FC\u30B6\u30FC\u8A73\u7D30\u306E\u5FDC\u7B54\u306B user_id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const byFeature=new Map(licenses.map(row=>[String(row["feature_code"]??""),row]));const str=value=>typeof value==="string"&&value!==""?value:
|
|
276
|
+
null;const rows=defs.map(def=>{const license=byFeature.get(def.code);const enabled=detail[`tenant_${def.code}_enabled`];return{feature_code:def.code,feature_name:def.label,level:str(detail[`${def.code}_level`]),levels:def.levels.join("/"),tenant_enabled:typeof enabled==="boolean"?enabled:null,license_assigned:license!==void 0,license_level:str(license?.["permission_level"]),license_assigned_at:str(license?.["assigned_at"])}});for(const[code,license]of byFeature){if(code===""||defs.some(def=>def.
|
|
277
|
+
code===code))continue;rows.push({feature_code:code,feature_name:LICENSE_FEATURE_NAMES[code]??code,level:null,levels:null,tenant_enabled:null,license_assigned:true,license_level:str(license["permission_level"]),license_assigned_at:str(license["assigned_at"])})}return rows}function listBody(body){if(!isRecord(body)||body["permissionList"]!==true||!Array.isArray(body["rows"])){throw new ApiResponseError("\u6A5F\u80FD\u6A29\u9650\u306E\u4E00\u89A7\u3092\u7D44\u307F\u7ACB\u3066\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002")}
|
|
278
|
+
return body["rows"]}var listOperation2={name:"list",summary:"1\u4EBA\u306E\u6A5F\u80FD\u6A29\u9650\u3068\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u3092\u4E26\u3079\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:LIST_USAGE,description:"\u6A5F\u80FD\u3054\u3068\u306B\u3001\u3044\u307E\u306E\u30EC\u30D9\u30EB\uFF08level\uFF09\u30FB\u53D6\u308C\u308B\u30EC\u30D9\u30EB\uFF08levels\uFF09\u30FB\u30C6\u30CA\u30F3\u30C8\u3067\u6709\u52B9\u304B\uFF08tenant_enabled\uFF09\u30FB\n\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u306E\u6709\u7121\u3068\u305D\u306E\u30EC\u30D9\u30EB\uFF08license_assigned / license_level\uFF09\u30921\u884C\u305A\u3064\u51FA\u3057\u307E\u3059\u3002\n\u6A29\u9650\u304C none \u306A\u306E\u306B\u5272\u5F53\u304C\u6B8B\u3063\u3066\u3044\u308B\u6A5F\u80FD\u306F\u3001\u6A29\u9650\u3092\u5909\u3048\u3066\u3082\u5272\u5F53\u304C\u5916\u308C\u306A\u3044\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF08twp user permission update help\uFF09\u3002\n--output json \u3067\u306F\u5272\u5F53\u65E5\uFF08license_assigne\
|
|
279
|
+
d_at\uFF09\u3082\u51FA\u307E\u3059\u3002\n\n"+USER_REF_HELP,forbidden:FORBIDDEN3,flags:[USER_REF_FLAG],async prepare(input,ctx){const resolved=await prepareUser(input,ctx,LIST_USAGE);const defs=await featureDefs(ctx);return withResolved(resolved,{defs:JSON.stringify([...defs.values()])})},plan:input=>({method:"GET",path:userPathOf(requireResolved(input,"userId"))}),plannedNotes:()=>["\u3053\u306E\u3042\u3068\u3001\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u3092 GET \u3057\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u3060\u3051\uFF09\u3002"],
|
|
280
|
+
async execute(input,ctx){const userId=requireResolved(input,"userId");const detail=await ctx.send({method:"GET",path:userPathOf(userId)});const licenses=licenseList(await ctx.send({method:"GET",path:`/api/v2/licenses/users/${encodeURIComponent(userId)}`}));const defs=JSON.parse(requireResolved(input,"defs"));return{permissionList:true,rows:listRows2(defs,detail,licenses)}},summarize:body=>listBody(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>listBody(body),notes(body){const stale=listBody(body).
|
|
281
|
+
filter(row=>row.license_assigned&&(row.level===null||row.level==="none"));return stale.length===0?[]:[`\u6A29\u9650\u304C none\uFF08\u307E\u305F\u306F\u5B9A\u7FA9\u306B\u7121\u3044\uFF09\u306A\u306E\u306B\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u304C\u6B8B\u3063\u3066\u3044\u308B\u6A5F\u80FD: ${stale.map(row=>row.feature_name).join("\u30FB")}`]}};var userPermissionResource={name:"permission",summary:"\u6A5F\u80FD\u6A29\u9650\uFF081\u4EBA\u306E\u4E00\u89A7\u30FB\u5909\u66F4\uFF0FCSV \u4E00\u62EC\u3002\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u5F53\u30FB\u89E3\u9664\u306F\u30B5\u30FC\u30D0\u304C\u9023\u52D5\uFF09",
|
|
282
|
+
operations:[listOperation2,updateOperation2]};var LIST_COLUMNS3=["user_id","user_name","email","employee_code","department_name","position_name","role","display_flg"];var GET_COLUMNS=["user_id","user_name","user_name_kana","email","employee_code","role","auth_type","hire_date","is_locked","display_flg","memberlist_flg","org_chart_flg","dashboard_flg"];var EMPLOYMENT_TYPES=["employee","partner"];var listPaging=envelopePaging({label:"\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7"});function userObject(body){if(!isRecord(body)||typeof body["user_id"]!==
|
|
204
283
|
"string"){throw new ApiResponseError("\u30E6\u30FC\u30B6\u30FC\u8A73\u7D30\u306E\u5FDC\u7B54\u306B user_id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const rest={...body};delete rest["result"];return rest}var TEXT_FIELDS=[{flag:"--name",key:"user_name",label:"\u6C0F\u540D",maxChars:255,summary:"\u6C0F\u540D",placeholder:"<\u6C0F\u540D>"},{flag:"--kana",key:"user_name_kana",label:"\u30D5\u30EA\u30AC\u30CA",maxChars:255,
|
|
205
284
|
summary:"\u6C0F\u540D\u306E\u30D5\u30EA\u30AC\u30CA",placeholder:"<\u30D5\u30EA\u30AC\u30CA>"},{flag:"--email",key:"login_id",label:"\u30ED\u30B0\u30A4\u30F3ID",maxChars:255,summary:"\u30ED\u30B0\u30A4\u30F3ID\uFF08\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\uFF09",placeholder:"<\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>"},{flag:"--employee-code",key:"employee_code",label:"\u793E\u54E1\u756A\u53F7",maxChars:50,summary:"\u793E\u54E1\u756A\u53F7",placeholder:"<\u793E\u54E1\u756A\u53F7>"}];var DISPLAY_FIELDS=[
|
|
206
285
|
{flag:"--display",key:"display_flg",summary:"\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u30FB\u9078\u629E\u80A2\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--memberlist",key:"memberlist_flg",summary:"\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--org-chart",key:"org_chart_flg",summary:"\u7D44\u7E54\u56F3\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--dashboard",key:"dashboard_flg",summary:"\u30C0\u30C3\u30B7\
|
|
@@ -214,7 +293,7 @@ name);if(file===void 0)return void 0;let text;if(file==="-"){if(process.stdin.is
|
|
|
214
293
|
const chunks=[];let size=0;for await(const chunk of process.stdin){const buffer=Buffer.from(chunk);size+=buffer.length;if(size>PASSWORD_FILE_MAX_BYTES){throw new UsageError(`\u6A19\u6E96\u5165\u529B\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${PASSWORD_FILE_MAX_BYTES} \u30D0\u30A4\u30C8\u8D85\uFF09`,usage)}chunks.push(buffer)}text=Buffer.concat(chunks).toString("utf8")}else{try{const stat=fs.statSync(file);if(!stat.isFile())throw new UsageError(`--password\
|
|
215
294
|
-file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,usage);if(stat.size>PASSWORD_FILE_MAX_BYTES){throw new UsageError(`--password-file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${stat.size} \u30D0\u30A4\u30C8\uFF09: ${file}`,usage)}text=fs.readFileSync(file,"utf8")}catch(err){if(err instanceof UsageError)throw err;const reason=err.code??err.message;throw new UsageError(`--password-file \u306E\u30D5\
|
|
216
295
|
\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${reason}\uFF09`,usage)}}const password=text.replace(/^\uFEFF/,"").replace(/\r?\n$/,"");if([...password].length<PASSWORD_MIN_CHARS){throw new UsageError(`\u30D1\u30B9\u30EF\u30FC\u30C9\u306F ${PASSWORD_MIN_CHARS} \u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${[...password].length} \u6587\u5B57\uFF09`,usage)}return password}function userFields(input){const body={};for(const field of TEXT_FIELDS){const value=boundedText(
|
|
217
|
-
input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.key]=value}const type=roleType(input);if(type!==void 0)body["type"]=type;const hireDate=isoDate(input,HIRE_DATE_FLAG.name);if(hireDate!==void 0)body["hire_date"]=hireDate;for(const field of DISPLAY_FIELDS){const value=booleanFlag(input,field.flag);if(value!==void 0)body[field.key]=value}return body}function
|
|
296
|
+
input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.key]=value}const type=roleType(input);if(type!==void 0)body["type"]=type;const hireDate=isoDate(input,HIRE_DATE_FLAG.name);if(hireDate!==void 0)body["hire_date"]=hireDate;for(const field of DISPLAY_FIELDS){const value=booleanFlag(input,field.flag);if(value!==void 0)body[field.key]=value}return body}function writeAck2(body,label2){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${label2}\
|
|
218
297
|
\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const rest={...body};delete rest["result"];return rest}function licenseNotes(body){const warnings=isRecord(body)?body["license_warnings"]:void 0;if(!Array.isArray(warnings)||warnings.length===0)return[];const texts=warnings.map(warning=>isRecord(warning)?String(warning["message"]??warning["feature_label"]??warning["featur\
|
|
219
298
|
e"]??""):String(warning));return[`\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u304C\u8DB3\u308A\u306A\u3044\u305F\u3081\u3001\u4E00\u90E8\u306E\u6A5F\u80FD\u6A29\u9650\u306F\u4ED8\u4E0E\u3055\u308C\u3066\u3044\u307E\u305B\u3093: ${texts.join(" / ")}`]}var createOperation2={name:"create",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u4F5C\u6210\u3059\u308B\uFF08\u5165\u793E\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user create --name <\u6C0F\u540D> --email <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9> --password-file <\
|
|
220
299
|
\u30D1\u30B9|-> [--role admin|user] [--kana <\u30D5\u30EA\u30AC\u30CA>] [--hire-date <YYYY-MM-DD>] [--employee-code <\u793E\u54E1\u756A\u53F7>] [--display true|false] \u2026",description:`--name / --email / --password-file \u304C\u5FC5\u9808\u3067\u3059\u3002--role \u3092\u7701\u304F\u3068\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002
|
|
@@ -227,9 +306,9 @@ ${DISPLAY_HELP}
|
|
|
227
306
|
|
|
228
307
|
\u4F5C\u6210\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002\u7D9A\u3051\u3066 twp user get <ID> \u3067\u5185\u5BB9\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user create \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:FIELD_FLAGS,async prepare(input){if(input.args.length>0){throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.
|
|
229
308
|
args.join(" ")}`,"twp user create help")}const body=userFields(input);for(const[flag,key]of[["--name","user_name"],["--email","login_id"]]){if(body[key]===void 0)throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,"twp user create help")}if(!input.flags.has(PASSWORD_FILE_FLAG.name)){throw new UsageError("--password-file \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",PASSWORD_HINT)}const password=await readPassword(input,"twp user create help");return withResolved(
|
|
230
|
-
input,{password})},plan(input){const body=userFields(input);if(body["type"]===void 0)body["type"]=ROLE_TO_TYPE["user"];return{method:"POST",path:"/api/v2/admin/users",body:{...body,password:requireResolved(input,"password")}}},plannedNotes:input=>input.flags.has("--role")?[]:["--role \u672A\u6307\u5B9A\u306E\u305F\u3081\u3001\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002"],summarize:body=>pick(
|
|
231
|
-
"user_id","message"]),raw:body=>
|
|
232
|
-
chart true|false] [--dashboard true|false] [--name <\u6C0F\u540D>] \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
|
|
309
|
+
input,{password})},plan(input){const body=userFields(input);if(body["type"]===void 0)body["type"]=ROLE_TO_TYPE["user"];return{method:"POST",path:"/api/v2/admin/users",body:{...body,password:requireResolved(input,"password")}}},plannedNotes:input=>input.flags.has("--role")?[]:["--role \u672A\u6307\u5B9A\u306E\u305F\u3081\u3001\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002"],summarize:body=>pick(writeAck2(body,"\u30E6\u30FC\u30B6\u30FC\u4F5C\u6210"),
|
|
310
|
+
["user_id","message"]),raw:body=>writeAck2(body,"\u30E6\u30FC\u30B6\u30FC\u4F5C\u6210"),notes:body=>licenseNotes(body)};var UPDATE_FLAGS=[...FIELD_FLAGS,AUTH_TYPE_FLAG,USER_REF_FLAG];var updateOperation3={name:"update",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u66F4\u65B0\u3059\u308B\uFF08\u5931\u52B9\u3092\u542B\u3080\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user update <\u30E6\u30FC\u30B6\u30FC> [--auth-type all|password|oauth|disabled] [--display true|false] [--memberlist true|false] [--or\
|
|
311
|
+
g-chart true|false] [--dashboard true|false] [--name <\u6C0F\u540D>] \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
|
|
233
312
|
\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
234
313
|
|
|
235
314
|
\u9000\u793E\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306F\u3001\u8A8D\u8A3C\u30BF\u30A4\u30D7\u3092 disabled\uFF08\u753B\u9762\u306E\u300C\u7121\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u300D\uFF09\u306B\u3057\u3066\u5931\u52B9\u3055\u305B\u307E\u3059\u3002
|
|
@@ -249,16 +328,16 @@ ${PASSWORD_HELP}
|
|
|
249
328
|
${DISPLAY_HELP}`,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user update \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:UPDATE_FLAGS,async prepare(input,ctx){const changed=[...FIELD_FLAGS,AUTH_TYPE_FLAG].some(flag=>input.flags.has(flag.name));if(!changed){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`\u6307\u5B9A\u3067\u304D\u308B\u9805\u76EE: ${[
|
|
250
329
|
...FIELD_FLAGS,AUTH_TYPE_FLAG].map(flag=>flag.name).join("\u3001")}`)}userFields(input);authType(input);const password=await readPassword(input,"twp user update help");const resolved=await prepareUser(input,ctx,"twp user update help");return password===void 0?resolved:withResolved(resolved,{password})},plan(input){const userId=requireResolved(input,"userId");const body=userFields(input);const auth=authType(input);if(auth!==void 0)body["auth_type"]=auth;const password=input.resolved?.["password"];
|
|
251
330
|
if(password!==void 0)body["password"]=password;return{method:"PUT",path:`/api/v2/admin/users/${userPath(input)}`,body:{user_id:userId,update_fields:Object.keys(body),...body}}},plannedNotes:input=>{if(authType(input)!=="disabled")return[];const ref=(input.args[0]??input.flags.get("--user")??"").trim().toLowerCase();const notes=["\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u5931\u52B9\u3055\u305B\u307E\u3059\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\u3002\u767A\u884C\u6E08\u307F\u306E\u30C8\u30FC\u30AF\u30F3\u30FBAPI \u30AD\u30FC\u3082\u30B5\u30FC\u30D0\u304C\u5931\u52B9\u3055\u305B\u307E\u3059\uFF09\u3002"];
|
|
252
|
-
if(ref==="me")notes.push("\u5BFE\u8C61\u306F\u81EA\u5206\u81EA\u8EAB\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u3068\u3001\u3053\u306E\u3042\u3068 twp \u306E\u64CD\u4F5C\u3082\u30ED\u30B0\u30A4\u30F3\u3082\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002");return notes},summarize:body=>pick(
|
|
253
|
-
\u30C8\u306E\u30E6\u30FC\u30B6\u30FC\uFF08\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u5931\u52B9\u30FB\u62DB\u5F85\u30FB\u68DA\u5378\uFF09\u3068\u6240\u5C5E\uFF08\u53C2\u7167\u30FB\u4ED8\u3051\u66FF\u3048\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u7D42\u4E86\u30FB\u524A\u9664\uFF09\u30FB\u30B9\u30AD\u30EB\u8A55\u4FA1\u30FB\u8CC7\u683C\u30FB\u7814\u4FEE\u5C65\u6B74\u30FB\u96C7\u7528\u5951\u7D04\u306E\u53C2\u7167",operations:[{name:"list",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u4E00\u89A7\u3059\u308B\uFF08\u90E8\u7F72\u30FB\u5F79\
|
|
254
|
-
usage:"twp user list [--department <\u90E8\u7F72>] [--position <\u5F79\u8077>] [--employment employee|partner] [--keyword <\u8A9E>] [--include-hidden] [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:"--department / --position \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u4E3B\u6240\u5C5E\u3067\u7D5E\u308A\u8FBC\u307F\u307E\u3059\uFF09\u3002\n--employment \u306F employee\uFF08\u793E\u54E1\uFF09\u304B partner\uFF08\u30D1\u30FC\u30C8\u30CA\u30FC\uFF09\u3067\u3059\u3002\n--include-hidden \u306F\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u307E\u3059\uFF08\u7D44\u7E54\
|
|
255
|
-
--include-disabled\uFF09\u3002\n\n--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08user_id / user_name / email / employee_code / department_name / position_name / role / display_flg\uFF09\u3067\u3059\u3002\n\n"+
|
|
256
|
-
|
|
257
|
-
takesValue:true,placeholder:"<\u8A9E>"},{name:"--include-hidden",summary:"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u308B",takesValue:false}],paging:listPaging,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.
|
|
258
|
-
includes(employment)){throw new UsageError(`--employment \u306B\u300C${employment}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${EMPLOYMENT_TYPES.join(" / ")} \u3067\u3059`)}const resolved={};const department=nonEmpty(input.flags,"--department");if(department!==void 0)resolved["departmentId"]=(await ctx.resolver.
|
|
259
|
-
resolver.position(position)).id;return withResolved(input,resolved)},plan(input){return{method:"GET",path:"/api/v2/admin/users/list",query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),department_id:input.resolved?.["departmentId"],position_id:input.resolved?.["positionId"],employment_type:nonEmpty(
|
|
260
|
-
items(body).map(row=>pick(row,
|
|
261
|
-
forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user get \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:[USER_REF_FLAG],prepare:(input,ctx)=>prepareUser(input,ctx,"twp user get help"),plan:input=>({method:"
|
|
262
|
-
usage:"twp user projects <\u30E6\u30FC\u30B6\u30FC>",description:"GET /api/v2/admin/users/{id}/projects\u3002\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\
|
|
263
|
-
USER_REF_HELP,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user projects \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\uFF08\u81EA\u5206\u306E\u5206\u306F twp
|
|
264
|
-
row,ASSIGNED_PROJECT_COLUMNS)),raw:body=>assignedProjectItems(body)},createOperation2,
|
|
331
|
+
if(ref==="me")notes.push("\u5BFE\u8C61\u306F\u81EA\u5206\u81EA\u8EAB\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u3068\u3001\u3053\u306E\u3042\u3068 twp \u306E\u64CD\u4F5C\u3082\u30ED\u30B0\u30A4\u30F3\u3082\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002");return notes},summarize:body=>pick(writeAck2(body,"\u30E6\u30FC\u30B6\u30FC\u66F4\u65B0"),["message"]),raw:body=>writeAck2(body,"\u30E6\u30FC\u30B6\u30FC\u66F4\u65B0"),notes:body=>licenseNotes(body)};var userDomain={name:"user",summary:"\u30C6\
|
|
332
|
+
\u30CA\u30F3\u30C8\u306E\u30E6\u30FC\u30B6\u30FC\uFF08\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u5931\u52B9\u30FB\u62DB\u5F85\u30FB\u68DA\u5378\u30FB\u6A5F\u80FD\u6A29\u9650\uFF09\u3068\u6240\u5C5E\uFF08\u53C2\u7167\u30FB\u4ED8\u3051\u66FF\u3048\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u7D42\u4E86\u30FB\u524A\u9664\uFF09\u30FB\u30B9\u30AD\u30EB\u8A55\u4FA1\u30FB\u8CC7\u683C\u30FB\u7814\u4FEE\u5C65\u6B74\u30FB\u96C7\u7528\u5951\u7D04\u306E\u53C2\u7167",operations:[{name:"list",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u4E00\u89A7\u3059\u308B\uFF08\u90E8\u7F72\u30FB\u5F79\
|
|
333
|
+
\u8077\u30FB\u96C7\u7528\u533A\u5206\u30FB\u30AD\u30FC\u30EF\u30FC\u30C9\u3067\u7D5E\u308A\u8FBC\u3081\u308B\uFF09",usage:"twp user list [--department <\u90E8\u7F72>] [--position <\u5F79\u8077>] [--employment employee|partner] [--keyword <\u8A9E>] [--include-hidden] [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:"--department / --position \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u4E3B\u6240\u5C5E\u3067\u7D5E\u308A\u8FBC\u307F\u307E\u3059\uFF09\u3002\n--employment \u306F employee\uFF08\u793E\u54E1\uFF09\u304B partner\uFF08\u30D1\u30FC\u30C8\u30CA\u30FC\uFF09\u3067\u3059\u3002\n--include-hidden \u306F\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u307E\u3059\uFF08\u7D44\u7E54\
|
|
334
|
+
\u7BA1\u7406\u8005\u306E\u3068\u304D\u3060\u3051\u52B9\u304D\u307E\u3059\uFF09\u3002\n\u5931\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u4E00\u89A7\u306B\u542B\u307E\u308C\u307E\u3059\u3002\u5931\u52B9\u304B\u3069\u3046\u304B\u306F twp user get \u306E auth_type \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\n\uFF08\u5168\u54E1\u306E\u8A8D\u8A3C\u30BF\u30A4\u30D7\u3092\u4E00\u89A7\u3067\u898B\u308B\u306A\u3089 twp user export --include-disabled\uFF09\u3002\n\n--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08user_id / user_name / email / employee_code / department_name / position_name / role / display_flg\uFF09\u3067\u3059\u3002\n\n"+
|
|
335
|
+
LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--department",summary:"\u4E3B\u6240\u5C5E\u306E\u90E8\u7F72\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"},{name:"--position",summary:"\u4E3B\u6240\u5C5E\u306E\u5F79\u8077\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u5F79\u8077>"},{name:"--employment",summary:"\u96C7\u7528\u533A\u5206\u3067\u7D5E\u308A\u8FBC\u3080\uFF08employee / partner\uFF09",
|
|
336
|
+
takesValue:true,placeholder:"<\u533A\u5206>"},{name:"--keyword",summary:"\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--include-hidden",summary:"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u308B",takesValue:false}],paging:listPaging,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.
|
|
337
|
+
args.join(" ")}`,"twp user list help")}const employment=nonEmpty(input.flags,"--employment");if(employment!==void 0&&!EMPLOYMENT_TYPES.includes(employment)){throw new UsageError(`--employment \u306B\u300C${employment}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${EMPLOYMENT_TYPES.join(" / ")} \u3067\u3059`)}const resolved={};const department=nonEmpty(input.flags,"--department");if(department!==void 0)resolved["departmentId"]=(await ctx.resolver.
|
|
338
|
+
department(department)).id;const position=nonEmpty(input.flags,"--position");if(position!==void 0)resolved["positionId"]=(await ctx.resolver.position(position)).id;return withResolved(input,resolved)},plan(input){return{method:"GET",path:"/api/v2/admin/users/list",query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),department_id:input.resolved?.["departmentId"],position_id:input.resolved?.["positionId"],employment_type:nonEmpty(
|
|
339
|
+
input.flags,"--employment"),include_hidden:input.flags.has("--include-hidden")?"true":void 0}}},summarize:body=>listPaging.items(body).map(row=>pick(row,LIST_COLUMNS3)),raw:body=>listPaging.items(body)},{name:"get",summary:"\u30E6\u30FC\u30B6\u30FC1\u4EBA\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user get <\u30E6\u30FC\u30B6\u30FC>",description:USER_REF_HELP+"\n\nauth_type \u304C disabled \u306E\u30E6\u30FC\u30B6\u30FC\u306F\u5931\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u3057\u3066\u3044\u307E\u3059\u3002\n\u8981\u7D04\uFF08table / text / ts\
|
|
340
|
+
v\uFF09\u306B\u306F\u500B\u4EBA\u9023\u7D61\u5148\u3092\u51FA\u3057\u307E\u305B\u3093\u3002--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002",forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user get \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:[USER_REF_FLAG],prepare:(input,ctx)=>prepareUser(input,ctx,"twp user get help"),plan:input=>({method:"\
|
|
341
|
+
GET",path:`/api/v2/admin/users/${userPath(input)}`}),summarize:body=>pick(userObject(body),GET_COLUMNS),raw:body=>userObject(body)},{name:"projects",summary:"\u6307\u5B9A\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u304C\u53C2\u753B\u3057\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user projects <\u30E6\u30FC\u30B6\u30FC>",description:"GET /api/v2/admin/users/{id}/projects\u3002\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\
|
|
342
|
+
\u3059\u3002\nmember_start_date / member_end_date \u306F\u305D\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u53C2\u753B\u671F\u9593\u3067\u3059\uFF08start_date / end_date \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u671F\u9593\uFF09\u3002\n\u81EA\u5206\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3067\u306A\u304F\u3066\u3082 twp project mine \u3067\u8AAD\u3081\u307E\u3059\u3002\n\n"+USER_REF_HELP,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user projects \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\uFF08\u81EA\u5206\u306E\u5206\u306F twp pro\
|
|
343
|
+
ject mine\uFF09",flags:[USER_REF_FLAG],prepare:(input,ctx)=>prepareUser(input,ctx,"twp user projects help"),plan:input=>({method:"GET",path:`/api/v2/admin/users/${userPath(input,"/projects")}`}),summarize:body=>assignedProjectItems(body).map(row=>pick(row,ASSIGNED_PROJECT_COLUMNS)),raw:body=>assignedProjectItems(body)},createOperation2,updateOperation3,exportOperation,...userHrOperations],subresources:[userAssignmentResource,userInviteResource,userPermissionResource]};export{userDomain};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{booleanQuery,cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterItem,masterRows,referencedDeleteGuidance,targetId,updateFlags}from"./chunk-
|
|
3
|
+
import{booleanQuery,cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterItem,masterRows,referencedDeleteGuidance,targetId,updateFlags}from"./chunk-AITUAHWK.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import{USER_CONTRACT_TYPES_PATH}from"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{withResolved}from"./chunk-PS5QFKHB.js";import{
|
|
4
4
|
acknowledgement,pick}from"./chunk-3ZRMMBP5.js";import{UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var NAME="user-contract-type";var LABEL="\u5951\u7D04\u5F62\u614B";var ITEM_KEY="contract_type";var CALCULATION_TYPES=["salary_based","salary_executive","salary_manager","hourly_based","contract_based","other_exempt"];var FIELDS=[{kind:"text",flag:"--name",key:"name",label:`${LABEL}\u540D`,maxChars:255,summary:`${LABEL}\u540D`},{kind:"text",flag:"--code",key:"code",label:`${LABEL}\u30B3\u30FC\u30C9`,maxChars:50,summary:`${LABEL}\u30B3\u30FC\u30C9\uFF08\u4EFB\u610F\u30FB\u30C6\u30CA\u30F3\u30C8\u5185\u3067\u4E00\u610F\uFF09`},
|
|
5
5
|
{kind:"enum",flag:"--calculation-type",key:"calculation_type",values:CALCULATION_TYPES,summary:"\u8A08\u7B97\u533A\u5206\uFF08salary_based: \u4E00\u822C\u5F93\u696D\u54E1 / salary_executive: \u5F79\u54E1 / salary_manager: \u7BA1\u7406\u76E3\u7763\u8005 / hourly_based: \u6642\u7D66\u5236 / contract_based: \u696D\u52D9\u59D4\u8A17 / other_exempt: \u8A08\u7B97\u5BFE\u8C61\u5916\uFF09"},{kind:"integer",flag:"--monthly-hours",key:"default_monthly_hours",label:"\u6708\u9593\u6240\u5B9A\u6642\u9593",min:1,
|
|
6
6
|
max:744,summary:"\u6708\u9593\u6240\u5B9A\u6642\u9593\uFF081\u301C744\uFF09"},{kind:"number",flag:"--daily-hours",key:"default_daily_hours",label:"1\u65E5\u306E\u6240\u5B9A\u6642\u9593",min:1,max:24,summary:"1\u65E5\u306E\u6240\u5B9A\u6642\u9593\uFF081\u301C24\u30FB\u5C0F\u6570\u53EF\uFF09"},{kind:"number",flag:"--bonus-months",key:"bonus_months_default",label:"\u8CDE\u4E0E\u6708\u6570",min:0,max:24,summary:"\u8CDE\u4E0E\u6708\u6570\u306E\u65E2\u5B9A\uFF080\u301C24\u30FB\u5C0F\u6570\u53EF\uFF09"},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{SCHEDULE_HELP,parseSchedule,readRunStatus,workerAgentDomain}from"./chunk-
|
|
3
|
+
import{SCHEDULE_HELP,parseSchedule,readRunStatus,workerAgentDomain}from"./chunk-436IBRP4.js";import"./chunk-WVCEKC7V.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";
|
|
4
4
|
import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{SCHEDULE_HELP,parseSchedule,readRunStatus,workerAgentDomain};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{applyInstancePlan,createInstancePlan,formColumns,parseInstanceContent,workflowDomain,writtenInstance}from"./chunk-
|
|
3
|
+
import{applyInstancePlan,createInstancePlan,formColumns,parseInstanceContent,workflowDomain,writtenInstance}from"./chunk-MZVXEYOV.js";import"./chunk-H7MIIYRN.js";import"./chunk-GQEXST5N.js";import"./chunk-DLDDMXZT.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";
|
|
4
4
|
import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{applyInstancePlan,createInstancePlan,formColumns,parseInstanceContent,workflowDomain,writtenInstance};
|
package/package.json
CHANGED
package/dist/chunk-YIH36ZDI.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
-
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
var LOADERS={agent:async()=>(await import("./agent-63DPLVPG.js")).agentDomain,"agent-loop":async()=>(await import("./agent-loop-ZNQJSXQV.js")).agentLoopDomain,"ai-review-reason":async()=>(await import("./sales-ai-review-IT6X4YQB.js")).aiReviewReasonDomain,analysis:async()=>(await import("./analysis-SDYGHILR.js")).analysisDomain,announcement:async()=>(await import("./announcement-4RI2COFS.js")).announcementDomain,attendance:async()=>(await import("./attendance-correct-NJACXW3S.js")).attendanceDomainWithRecords,
|
|
4
|
-
backlog:async()=>(await import("./backlog-NQUZQSCY.js")).backlogDomain,budget:async()=>(await import("./budget-ILEQGQOA.js")).budgetDomain,"business-hours":async()=>(await import("./business-hours-I4X6YQS3.js")).businessHoursDomain,"business-place":async()=>(await import("./sales-master-QYNSMAP4.js")).businessPlaceDomain,company:async()=>(await import("./company-QFIHJ4OY.js")).companyDomain,contract:async()=>(await import("./contract-IGH7GFOM.js")).contractDomain,customer:async()=>(await import("./company-QFIHJ4OY.js")).
|
|
5
|
-
customerDomain,department:async()=>(await import("./department-TIW5YISO.js")).departmentDomain,deposit:async()=>(await import("./deposit-2YPPFQVR.js")).depositDomain,estimate:async()=>(await import("./estimate-JBQSEUJY.js")).estimateDomain,evaluation:async()=>(await import("./evaluation-4QE4L3OG.js")).evaluationDomain,expense:async()=>(await import("./expense-CFHOIO3I.js")).expenseDomain,"fiscal-year":async()=>(await import("./fiscal-year-N7POJ77K.js")).fiscalYearDomain,holiday:async()=>(await import("./holiday-WRSUBPT3.js")).
|
|
6
|
-
holidayDomain,"goal-sheet":async()=>(await import("./evaluation-4QE4L3OG.js")).goalSheetDomain,inquiry:async()=>(await import("./inquiry-6ANZ6HKD.js")).inquiryDomain,invoice:async()=>(await import("./invoice-INIF6BUD.js")).invoiceDomain,"job-title":async()=>(await import("./job-title-KOFDOB65.js")).jobTitleDomain,knowledge:async()=>(await import("./domain-knowledge-F3GKX2VI.js")).knowledgeDomain,leave:async()=>(await import("./leave-LE3CIRPT.js")).leaveDomain,license:async()=>(await import("./license-ME2GUNJQ.js")).
|
|
7
|
-
licenseDomain,media:async()=>(await import("./media-FDOAC5ZH.js")).mediaDomain,meeting:async()=>(await import("./knowledge-W3ONOGV2.js")).meetingDomain,note:async()=>(await import("./knowledge-W3ONOGV2.js")).noteDomain,notification:async()=>(await import("./notification-N4FVLOPW.js")).notificationDomain,onedrive:async()=>(await import("./onedrive-ZY3GTU26.js")).onedriveDomain,outlook:async()=>(await import("./outlook-YG7GFF44.js")).outlookDomain,payee:async()=>(await import("./sales-master-QYNSMAP4.js")).
|
|
8
|
-
payeeDomain,position:async()=>(await import("./position-4C37LALY.js")).positionDomain,project:async()=>(await import("./project-DUHSOINK.js")).projectDomain,prospect:async()=>(await import("./prospect-QRTQA2R6.js")).prospectDomain,purchase:async()=>(await import("./purchase-LWRNGP3T.js")).purchaseDomain,qualification:async()=>(await import("./skill-MWETUX56.js")).qualificationDomain,receivable:async()=>(await import("./receivable-A4T74HZK.js")).receivableDomain,redmine:async()=>(await import("./redmine-X2GTGXHG.js")).
|
|
9
|
-
redmineDomain,report:async()=>(await import("./report-UNEQSKNU.js")).reportDomain,"rounding-setting":async()=>(await import("./sales-numbering-LZQCKDUM.js")).roundingSettingDomain,"seal-impression":async()=>(await import("./sales-master-QYNSMAP4.js")).sealImpressionDomain,search:async()=>(await import("./search-GZIEQYLJ.js")).searchDomain,segment:async()=>(await import("./segment-NNWN5KJB.js")).segmentDomain,shift:async()=>(await import("./attendance-lists-AUEECNJL.js")).shiftDomain,skill:async()=>(await import("./skill-MWETUX56.js")).
|
|
10
|
-
skillDomain,storage:async()=>(await import("./storage-AQDCEBDJ.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-4UKRQZHS.js")).supplierPaymentDomain,support:async()=>(await import("./support-JJ7ZCJFX.js")).supportDomain,task:async()=>(await import("./task-HAVEGLQC.js")).taskDomain,teams:async()=>(await import("./teams-RLMFGND2.js")).teamsDomain,user:async()=>(await import("./user-VRMLWGQ2.js")).userDomain,"user-contract-type":async()=>(await import("./user-contract-type-ZCUMSGVP.js")).
|
|
11
|
-
userContractTypeDomain,wiki:async()=>(await import("./knowledge-W3ONOGV2.js")).wikiDomain,workchange:async()=>(await import("./attendance-lists-AUEECNJL.js")).workchangeDomain,"worker-agent":async()=>(await import("./worker-agent-VCJUJDBO.js")).workerAgentDomain,workflow:async()=>(await import("./workflow-I7L476KK.js")).workflowDomain};async function loadDomain(name){return LOADERS[name]()}export{loadDomain};
|