@orizm/cli 3.1.0 → 3.3.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -1
- package/dist/agent-Kf8iuW2I.mjs +14 -0
- package/dist/agent-Kf8iuW2I.mjs.map +1 -0
- package/dist/agent-UZZtdOZS.cjs +14 -0
- package/dist/agent-UZZtdOZS.cjs.map +1 -0
- package/dist/auth-BnXPHgBU.cjs +18 -0
- package/dist/{auth-CNbONZuf.cjs.map → auth-BnXPHgBU.cjs.map} +1 -1
- package/dist/{auth-BGW072BP.mjs → auth-DHVtM0sF.mjs} +4 -4
- package/dist/{auth-BGW072BP.mjs.map → auth-DHVtM0sF.mjs.map} +1 -1
- package/dist/{bucket-mg5QQORh.cjs → bucket-CFaYmimY.cjs} +3 -3
- package/dist/{bucket-mg5QQORh.cjs.map → bucket-CFaYmimY.cjs.map} +1 -1
- package/dist/{bucket-DqW-WEYb.mjs → bucket-D-lu1xgZ.mjs} +3 -3
- package/dist/{bucket-DqW-WEYb.mjs.map → bucket-D-lu1xgZ.mjs.map} +1 -1
- package/dist/cli/main.cjs +14 -12
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.mjs +14 -13
- package/dist/cli/main.mjs.map +1 -1
- package/dist/{cms-BJnovGYT.mjs → cms-8XZhxwsM.mjs} +8 -5
- package/dist/cms-8XZhxwsM.mjs.map +1 -0
- package/dist/{cms-Cnx-lDGu.cjs → cms-C4zEtppZ.cjs} +8 -5
- package/dist/cms-C4zEtppZ.cjs.map +1 -0
- package/dist/{codegen-BF5b-u46.cjs → codegen-Cypg4O3L.cjs} +3 -3
- package/dist/{codegen-BF5b-u46.cjs.map → codegen-Cypg4O3L.cjs.map} +1 -1
- package/dist/{codegen-DZOB4ttR.mjs → codegen-Dnjv7zfm.mjs} +3 -3
- package/dist/{codegen-DZOB4ttR.mjs.map → codegen-Dnjv7zfm.mjs.map} +1 -1
- package/dist/config/index.cjs +4 -2
- package/dist/config/index.cjs.map +1 -1
- package/dist/config/index.d.mts +8 -1
- package/dist/config/index.d.mts.map +1 -1
- package/dist/config/index.mjs +4 -2
- package/dist/config/index.mjs.map +1 -1
- package/dist/{config-loader-D8x32gEU.cjs → config-loader-CZfANHBf.cjs} +2 -2
- package/dist/config-loader-CZfANHBf.cjs.map +1 -0
- package/dist/{config-loader-BEgS869e.mjs → config-loader-CtbZOGjc.mjs} +3 -3
- package/dist/config-loader-CtbZOGjc.mjs.map +1 -0
- package/dist/{confirm-delete-B9o73U7B.cjs → confirm-delete-BX8bJrXZ.cjs} +3 -3
- package/dist/{confirm-delete-B9o73U7B.cjs.map → confirm-delete-BX8bJrXZ.cjs.map} +1 -1
- package/dist/{confirm-delete-CsWkW69-.mjs → confirm-delete-CcKLYuCB.mjs} +2 -2
- package/dist/{confirm-delete-CsWkW69-.mjs.map → confirm-delete-CcKLYuCB.mjs.map} +1 -1
- package/dist/{consumer-C4WiGHWG.mjs → consumer-BAM3E_68.mjs} +4 -4
- package/dist/{consumer-C4WiGHWG.mjs.map → consumer-BAM3E_68.mjs.map} +1 -1
- package/dist/{consumer-OF6Z_eTP.cjs → consumer-BSgriLn0.cjs} +4 -4
- package/dist/consumer-BSgriLn0.cjs.map +1 -0
- package/dist/consumer-D-Y6KJ8a.cjs +18 -0
- package/dist/{consumer-l-8wUK8E.cjs.map → consumer-D-Y6KJ8a.cjs.map} +1 -1
- package/dist/{consumer-pU2HyiyA.mjs → consumer-s8LnLw4e.mjs} +4 -4
- package/dist/consumer-s8LnLw4e.mjs.map +1 -0
- package/dist/content-ClRuLcGq.cjs +20 -0
- package/dist/{content-DMjSwor1.cjs.map → content-ClRuLcGq.cjs.map} +1 -1
- package/dist/content-DWnYo6ad.mjs +20 -0
- package/dist/{content-BOb6NC8M.mjs.map → content-DWnYo6ad.mjs.map} +1 -1
- package/dist/{create-DJY71sp9.cjs → create-B3d4CDel.cjs} +2 -2
- package/dist/{create-DJY71sp9.cjs.map → create-B3d4CDel.cjs.map} +1 -1
- package/dist/{create-CC814ixh.mjs → create-BD6iS4n6.mjs} +2 -2
- package/dist/{create-CC814ixh.mjs.map → create-BD6iS4n6.mjs.map} +1 -1
- package/dist/{create-B-PAOor6.mjs → create-BGV3F44O.mjs} +3 -3
- package/dist/{create-B-PAOor6.mjs.map → create-BGV3F44O.mjs.map} +1 -1
- package/dist/{create-Z-z3LXNW.cjs → create-BYDbsUvw.cjs} +3 -3
- package/dist/{create-Z-z3LXNW.cjs.map → create-BYDbsUvw.cjs.map} +1 -1
- package/dist/{create-Belwettw.mjs → create-BtuS23L3.mjs} +2 -2
- package/dist/{create-Belwettw.mjs.map → create-BtuS23L3.mjs.map} +1 -1
- package/dist/{create-CCsn7yp5.cjs → create-CNDCTpi0.cjs} +3 -3
- package/dist/{create-CCsn7yp5.cjs.map → create-CNDCTpi0.cjs.map} +1 -1
- package/dist/{create-BNYWcyuQ.cjs → create-DzRMGpm_.cjs} +2 -2
- package/dist/{create-BNYWcyuQ.cjs.map → create-DzRMGpm_.cjs.map} +1 -1
- package/dist/{create-B1ZBOqcV.mjs → create-fweRd0UB.mjs} +2 -2
- package/dist/{create-B1ZBOqcV.mjs.map → create-fweRd0UB.mjs.map} +1 -1
- package/dist/{create-D5suBd3J.mjs → create-m5fNBqQE.mjs} +3 -3
- package/dist/{create-D5suBd3J.mjs.map → create-m5fNBqQE.mjs.map} +1 -1
- package/dist/{create-CmOriwGo.cjs → create-tWGEtI3t.cjs} +2 -2
- package/dist/{create-CmOriwGo.cjs.map → create-tWGEtI3t.cjs.map} +1 -1
- package/dist/{delete-DhSU-Lx2.mjs → delete-B8VlzzCj.mjs} +3 -3
- package/dist/{delete-DhSU-Lx2.mjs.map → delete-B8VlzzCj.mjs.map} +1 -1
- package/dist/{delete-DVrafka1.cjs → delete-B9j8c8ln.cjs} +3 -3
- package/dist/{delete-DVrafka1.cjs.map → delete-B9j8c8ln.cjs.map} +1 -1
- package/dist/{delete-ZIifaG0i.mjs → delete-BhJK-8vE.mjs} +3 -3
- package/dist/{delete-ZIifaG0i.mjs.map → delete-BhJK-8vE.mjs.map} +1 -1
- package/dist/{delete-YYh_0khQ.mjs → delete-Bi6UhAhS.mjs} +3 -3
- package/dist/{delete-YYh_0khQ.mjs.map → delete-Bi6UhAhS.mjs.map} +1 -1
- package/dist/{delete-CCTiCYIL.cjs → delete-C_oxZa_p.cjs} +3 -3
- package/dist/{delete-CCTiCYIL.cjs.map → delete-C_oxZa_p.cjs.map} +1 -1
- package/dist/{delete-CSs5Czlo.mjs → delete-Ci7cq3mU.mjs} +3 -3
- package/dist/{delete-CSs5Czlo.mjs.map → delete-Ci7cq3mU.mjs.map} +1 -1
- package/dist/{delete-XWJRhBFs.mjs → delete-CiWkGnog.mjs} +3 -3
- package/dist/{delete-XWJRhBFs.mjs.map → delete-CiWkGnog.mjs.map} +1 -1
- package/dist/{delete-DozSxZQ7.cjs → delete-Cmk80aqF.cjs} +3 -3
- package/dist/{delete-DozSxZQ7.cjs.map → delete-Cmk80aqF.cjs.map} +1 -1
- package/dist/{delete-8yZ3j0vX.cjs → delete-CvtvB2Cr.cjs} +3 -3
- package/dist/{delete-8yZ3j0vX.cjs.map → delete-CvtvB2Cr.cjs.map} +1 -1
- package/dist/{delete-CIYY59v_.cjs → delete-DG825UwK.cjs} +4 -3
- package/dist/{delete-CIYY59v_.cjs.map → delete-DG825UwK.cjs.map} +1 -1
- package/dist/{delete-WpMIIvjj.cjs → delete-DGrSMqOt.cjs} +3 -3
- package/dist/{delete-WpMIIvjj.cjs.map → delete-DGrSMqOt.cjs.map} +1 -1
- package/dist/{delete-BOUObrDw.mjs → delete-Datr3Kqq.mjs} +3 -2
- package/dist/{delete-BOUObrDw.mjs.map → delete-Datr3Kqq.mjs.map} +1 -1
- package/dist/{delete-D4r1ve4v.cjs → delete-TTF4pIKw.cjs} +3 -3
- package/dist/{delete-D4r1ve4v.cjs.map → delete-TTF4pIKw.cjs.map} +1 -1
- package/dist/{delete-BSLIXrAh.mjs → delete-X8iVsETw.mjs} +3 -3
- package/dist/{delete-BSLIXrAh.mjs.map → delete-X8iVsETw.mjs.map} +1 -1
- package/dist/docs/features/cli/authentication.md +93 -0
- package/dist/docs/features/cli/commands/agent.md +49 -0
- package/dist/docs/features/cli/commands/auth.md +36 -0
- package/dist/docs/features/cli/commands/bucket.md +120 -0
- package/dist/docs/features/cli/commands/codegen.md +51 -0
- package/dist/docs/features/cli/commands/content.md +117 -0
- package/dist/docs/features/cli/commands/key.md +155 -0
- package/dist/docs/features/cli/commands/link.md +21 -0
- package/dist/docs/features/cli/commands/org.md +18 -0
- package/dist/docs/features/cli/commands/project-user.md +108 -0
- package/dist/docs/features/cli/commands/project.md +106 -0
- package/dist/docs/features/cli/commands/schema.md +108 -0
- package/dist/docs/features/cli/commands/webhook.md +110 -0
- package/dist/docs/features/cli/commands.md +110 -0
- package/dist/docs/features/cli/configuration.md +70 -0
- package/dist/docs/features/cli/output.md +53 -0
- package/dist/docs/features/cli/project-linking.md +58 -0
- package/dist/docs/features/cli/quickstart.md +83 -0
- package/dist/docs/features/cli.md +56 -0
- package/dist/docs/features/cms-sdk/account.md +122 -0
- package/dist/docs/features/cms-sdk/auth.md +122 -0
- package/dist/docs/features/cms-sdk/bucket.md +113 -0
- package/dist/docs/features/cms-sdk/cli.md +104 -0
- package/dist/docs/features/cms-sdk/fetch-contents.md +608 -0
- package/dist/docs/features/cms-sdk/install.md +98 -0
- package/dist/docs/features/cms-sdk/management-user.md +244 -0
- package/dist/docs/features/cms-sdk/migrate-to-v2.md +152 -0
- package/dist/docs/features/cms-sdk/mutation-contents.md +190 -0
- package/dist/docs/features/console/audit-logs.md +55 -0
- package/dist/docs/features/console/bucket.md +70 -0
- package/dist/docs/features/console/create-project.md +103 -0
- package/dist/docs/features/console/generate-api-key.md +103 -0
- package/dist/docs/features/console/invite-project-users.md +70 -0
- package/dist/docs/features/console/management-tables.md +131 -0
- package/dist/docs/features/console/organization-member-management.md +78 -0
- package/dist/docs/features/console/schema-history.md +29 -0
- package/dist/docs/features/console.md +15 -0
- package/dist/docs/features/consumer-sdk/cli.md +60 -0
- package/dist/docs/features/consumer-sdk/fetch-contents.md +603 -0
- package/dist/docs/features/consumer-sdk/install.md +90 -0
- package/dist/docs/features/consumer-sdk/migrate-to-v2.md +43 -0
- package/dist/docs/features/design-editor/about.md +36 -0
- package/dist/docs/features/design-editor/getting-started.md +244 -0
- package/dist/docs/features/design-editor/install.md +17 -0
- package/dist/docs/features/design-editor/prop-editor.md +83 -0
- package/dist/docs/features/design-editor/schema.md +279 -0
- package/dist/docs/features/dictionary.md +265 -0
- package/dist/docs/features/draft.md +241 -0
- package/dist/docs/features/form/about.md +83 -0
- package/dist/docs/features/form/editor.md +410 -0
- package/dist/docs/features/form/submission.md +94 -0
- package/dist/docs/features/full-text-search.md +114 -0
- package/dist/docs/features/history.md +152 -0
- package/dist/docs/features/schema/about.md +215 -0
- package/dist/docs/features/schema/authority.md +456 -0
- package/dist/docs/features/schema/bucket.md +142 -0
- package/dist/docs/features/schema/database.md +419 -0
- package/dist/docs/features/schema/table-module.md +140 -0
- package/dist/docs/features/webhook/revalidate-nextjs.md +185 -0
- package/dist/docs/features/webhook.md +295 -0
- package/dist/docs/get-started/add-model-starter.md +124 -0
- package/dist/docs/get-started/get-started-with-starter.md +218 -0
- package/dist/docs/index.md +89 -0
- package/dist/docs/introduction.md +140 -0
- package/dist/docs/manifest.json +6 -0
- package/dist/docs/resources/cli-migration-guide.md +82 -0
- package/dist/docs/resources/cli-v2-to-v3-migration-guide.md +138 -0
- package/dist/docs/resources/deploy-to-vercel.md +62 -0
- package/dist/docs/resources/limits.md +24 -0
- package/dist/docs/resources/private-registry.md +23 -0
- package/dist/docs/resources/status.md +22 -0
- package/dist/docs/resources/user-model.md +38 -0
- package/dist/{download-ogGbb3FU.cjs → download-BkzmfQXD.cjs} +2 -2
- package/dist/{download-ogGbb3FU.cjs.map → download-BkzmfQXD.cjs.map} +1 -1
- package/dist/{download-oFGzg30E.mjs → download-Dx1oyrMg.mjs} +2 -2
- package/dist/{download-oFGzg30E.mjs.map → download-Dx1oyrMg.mjs.map} +1 -1
- package/dist/{erd-zDoF6I_y.mjs → erd-BihhEfZ_.mjs} +3 -3
- package/dist/{erd-zDoF6I_y.mjs.map → erd-BihhEfZ_.mjs.map} +1 -1
- package/dist/{erd-lKC5NB2l.cjs → erd-DmnB1v2c.cjs} +3 -3
- package/dist/{erd-lKC5NB2l.cjs.map → erd-DmnB1v2c.cjs.map} +1 -1
- package/dist/{get-CgEgETQa.mjs → get-1TtxSEoT.mjs} +2 -2
- package/dist/{get-CgEgETQa.mjs.map → get-1TtxSEoT.mjs.map} +1 -1
- package/dist/{get-DjRyK0hJ.cjs → get-B5S1GfjR.cjs} +2 -2
- package/dist/{get-DjRyK0hJ.cjs.map → get-B5S1GfjR.cjs.map} +1 -1
- package/dist/{get-DDB89cOs.mjs → get-BLDHE_Zl.mjs} +2 -2
- package/dist/{get-DDB89cOs.mjs.map → get-BLDHE_Zl.mjs.map} +1 -1
- package/dist/{get-KdWfYINc.cjs → get-C5OH05Ka.cjs} +2 -2
- package/dist/{get-KdWfYINc.cjs.map → get-C5OH05Ka.cjs.map} +1 -1
- package/dist/{get-DwtzBjGV.cjs → get-CKZPn669.cjs} +2 -2
- package/dist/{get-DwtzBjGV.cjs.map → get-CKZPn669.cjs.map} +1 -1
- package/dist/{get-IOU__2RP.cjs → get-CdDZkUXV.cjs} +2 -2
- package/dist/{get-IOU__2RP.cjs.map → get-CdDZkUXV.cjs.map} +1 -1
- package/dist/{get-DB80UNSR.mjs → get-Cw4Dw5NG.mjs} +2 -2
- package/dist/{get-DB80UNSR.mjs.map → get-Cw4Dw5NG.mjs.map} +1 -1
- package/dist/{get-C7dKoSIc.mjs → get-Dy3AD4il.mjs} +2 -2
- package/dist/{get-C7dKoSIc.mjs.map → get-Dy3AD4il.mjs.map} +1 -1
- package/dist/{get-BBOKSXkh.cjs → get-PVsUGHBR.cjs} +2 -2
- package/dist/{get-BBOKSXkh.cjs.map → get-PVsUGHBR.cjs.map} +1 -1
- package/dist/{get-B6vBaq_D.mjs → get-Vo3yr12d.mjs} +2 -2
- package/dist/{get-B6vBaq_D.mjs.map → get-Vo3yr12d.mjs.map} +1 -1
- package/dist/{get-jwXRlIBJ.cjs → get-jaN2o0XY.cjs} +2 -2
- package/dist/{get-jwXRlIBJ.cjs.map → get-jaN2o0XY.cjs.map} +1 -1
- package/dist/{get-DBxhbN1G.mjs → get-qOKYAc46.mjs} +2 -2
- package/dist/{get-DBxhbN1G.mjs.map → get-qOKYAc46.mjs.map} +1 -1
- package/dist/init-BpKpTQ0z.mjs +425 -0
- package/dist/init-BpKpTQ0z.mjs.map +1 -0
- package/dist/init-BrZCChEG.cjs +427 -0
- package/dist/init-BrZCChEG.cjs.map +1 -0
- package/dist/{invite-DPygtCoO.cjs → invite-Tw3SMV0Q.cjs} +2 -2
- package/dist/{invite-DPygtCoO.cjs.map → invite-Tw3SMV0Q.cjs.map} +1 -1
- package/dist/{invite-D66DSMvq.mjs → invite-vzajkU2u.mjs} +2 -2
- package/dist/{invite-D66DSMvq.mjs.map → invite-vzajkU2u.mjs.map} +1 -1
- package/dist/{key-C71Ffll9.mjs → key-CyVxu3Uk.mjs} +3 -3
- package/dist/{key-C71Ffll9.mjs.map → key-CyVxu3Uk.mjs.map} +1 -1
- package/dist/{key-DQr7qRL2.cjs → key-tRYRqYNo.cjs} +3 -3
- package/dist/{key-DQr7qRL2.cjs.map → key-tRYRqYNo.cjs.map} +1 -1
- package/dist/{link-BluFyxEL.mjs → link-Bd55x5Zf.mjs} +2 -2
- package/dist/{link-BluFyxEL.mjs.map → link-Bd55x5Zf.mjs.map} +1 -1
- package/dist/{link-DYu1Vjlw.cjs → link-Cz7MX02S.cjs} +2 -2
- package/dist/{link-DYu1Vjlw.cjs.map → link-Cz7MX02S.cjs.map} +1 -1
- package/dist/{list-D5PSDMWw.mjs → list-2otVufvs.mjs} +3 -3
- package/dist/{list-D5PSDMWw.mjs.map → list-2otVufvs.mjs.map} +1 -1
- package/dist/{list-sQk00GV5.mjs → list-BMnBuZMr.mjs} +2 -2
- package/dist/{list-sQk00GV5.mjs.map → list-BMnBuZMr.mjs.map} +1 -1
- package/dist/{list-BwfpuhmJ.cjs → list-Bo8IMFd0.cjs} +2 -2
- package/dist/{list-BwfpuhmJ.cjs.map → list-Bo8IMFd0.cjs.map} +1 -1
- package/dist/{list-B0N4-Q-5.mjs → list-BtgAAUKm.mjs} +2 -2
- package/dist/{list-B0N4-Q-5.mjs.map → list-BtgAAUKm.mjs.map} +1 -1
- package/dist/{list-vbMaOiza.mjs → list-C0lq-gBZ.mjs} +2 -2
- package/dist/{list-vbMaOiza.mjs.map → list-C0lq-gBZ.mjs.map} +1 -1
- package/dist/{list-BsYYq9wT.mjs → list-CGZ3iT6J.mjs} +2 -2
- package/dist/{list-BsYYq9wT.mjs.map → list-CGZ3iT6J.mjs.map} +1 -1
- package/dist/{list-CFwW0G9f.cjs → list-CMWXO4nB.cjs} +2 -2
- package/dist/{list-CFwW0G9f.cjs.map → list-CMWXO4nB.cjs.map} +1 -1
- package/dist/{list-rAn3uOA7.mjs → list-Ccaec0cs.mjs} +2 -2
- package/dist/{list-rAn3uOA7.mjs.map → list-Ccaec0cs.mjs.map} +1 -1
- package/dist/{list-CU42ERNY.cjs → list-Cp_mHwbN.cjs} +2 -2
- package/dist/{list-CU42ERNY.cjs.map → list-Cp_mHwbN.cjs.map} +1 -1
- package/dist/{list-D0-QrWmn.cjs → list-Cs7kbAAi.cjs} +3 -3
- package/dist/{list-D0-QrWmn.cjs.map → list-Cs7kbAAi.cjs.map} +1 -1
- package/dist/{list-DlJssPwy.cjs → list-D5IaYurn.cjs} +2 -2
- package/dist/{list-DlJssPwy.cjs.map → list-D5IaYurn.cjs.map} +1 -1
- package/dist/{list-CbvEh7eA.mjs → list-DcIBInNA.mjs} +2 -2
- package/dist/{list-CbvEh7eA.mjs.map → list-DcIBInNA.mjs.map} +1 -1
- package/dist/{list-BzLraBnA.cjs → list-Dd3veD9Z.cjs} +2 -2
- package/dist/{list-BzLraBnA.cjs.map → list-Dd3veD9Z.cjs.map} +1 -1
- package/dist/{list-DexBclfb.cjs → list-DdVKKaDN.cjs} +2 -2
- package/dist/{list-DexBclfb.cjs.map → list-DdVKKaDN.cjs.map} +1 -1
- package/dist/{list-Br6Cmi9S.cjs → list-E1sjTZLe.cjs} +2 -2
- package/dist/{list-Br6Cmi9S.cjs.map → list-E1sjTZLe.cjs.map} +1 -1
- package/dist/{list-BRh59EqI.cjs → list-KI-7REC_.cjs} +2 -2
- package/dist/{list-BRh59EqI.cjs.map → list-KI-7REC_.cjs.map} +1 -1
- package/dist/{list-ocfd7631.mjs → list-MWD4huKP.mjs} +2 -2
- package/dist/{list-ocfd7631.mjs.map → list-MWD4huKP.mjs.map} +1 -1
- package/dist/{list-57TUfNFd.mjs → list-Pf5aAoaN.mjs} +2 -2
- package/dist/{list-57TUfNFd.mjs.map → list-Pf5aAoaN.mjs.map} +1 -1
- package/dist/{list-BHvURTWd.cjs → list-fG4zo8zz.cjs} +2 -2
- package/dist/{list-BHvURTWd.cjs.map → list-fG4zo8zz.cjs.map} +1 -1
- package/dist/{list-DrZYlidZ.mjs → list-r2UPz1zW.mjs} +2 -2
- package/dist/{list-DrZYlidZ.mjs.map → list-r2UPz1zW.mjs.map} +1 -1
- package/dist/{login-FE_dbWMo.mjs → login-Dq2L3bI7.mjs} +2 -2
- package/dist/{login-FE_dbWMo.mjs.map → login-Dq2L3bI7.mjs.map} +1 -1
- package/dist/{login-2XcHd4wn.cjs → login-M1IF2MdC.cjs} +2 -2
- package/dist/{login-2XcHd4wn.cjs.map → login-M1IF2MdC.cjs.map} +1 -1
- package/dist/{logout-DC5TMJ5_.cjs → logout-BCSfFgPz.cjs} +2 -2
- package/dist/{logout-DC5TMJ5_.cjs.map → logout-BCSfFgPz.cjs.map} +1 -1
- package/dist/{logout-BDbWrGBm.mjs → logout-DFzQCQKe.mjs} +2 -2
- package/dist/{logout-BDbWrGBm.mjs.map → logout-DFzQCQKe.mjs.map} +1 -1
- package/dist/management-C1p-Hm2Z.cjs +19 -0
- package/dist/{management-BGYcZB4c.cjs.map → management-C1p-Hm2Z.cjs.map} +1 -1
- package/dist/{management-DDACMgbU.mjs → management-h4yE09a6.mjs} +5 -5
- package/dist/{management-DDACMgbU.mjs.map → management-h4yE09a6.mjs.map} +1 -1
- package/dist/object-CZDLoc9L.cjs +20 -0
- package/dist/{object-DVqidsEc.cjs.map → object-CZDLoc9L.cjs.map} +1 -1
- package/dist/object-CqMsEkh9.mjs +20 -0
- package/dist/{object-qdBdEghr.mjs.map → object-CqMsEkh9.mjs.map} +1 -1
- package/dist/{org-CPhTRTks.mjs → org-Co-rjfr-.mjs} +2 -2
- package/dist/{org-CPhTRTks.mjs.map → org-Co-rjfr-.mjs.map} +1 -1
- package/dist/{org-C4cVovOM.cjs → org-Drj3VqIm.cjs} +2 -2
- package/dist/{org-C4cVovOM.cjs.map → org-Drj3VqIm.cjs.map} +1 -1
- package/dist/{org-context-Bewx2NEW.cjs → org-context-DKFnPH_o.cjs} +2 -2
- package/dist/{org-context-Bewx2NEW.cjs.map → org-context-DKFnPH_o.cjs.map} +1 -1
- package/dist/{org-context-D0dwWC2M.mjs → org-context-Df5McOiK.mjs} +2 -2
- package/dist/{org-context-D0dwWC2M.mjs.map → org-context-Df5McOiK.mjs.map} +1 -1
- package/dist/project-C7qWFjMV.mjs +20 -0
- package/dist/{project-CaXD3QBs.mjs.map → project-C7qWFjMV.mjs.map} +1 -1
- package/dist/project-Dm7nr5NV.cjs +20 -0
- package/dist/{project-BX7zvWB1.cjs.map → project-Dm7nr5NV.cjs.map} +1 -1
- package/dist/project-user-D9h_QBc0.mjs +20 -0
- package/dist/{project-user-Cp7i6orv.mjs.map → project-user-D9h_QBc0.mjs.map} +1 -1
- package/dist/project-user-wLFnHFwB.cjs +20 -0
- package/dist/{project-user-Dm0qR-sh.cjs.map → project-user-wLFnHFwB.cjs.map} +1 -1
- package/dist/prompt-C-XNDSNE.cjs +42 -0
- package/dist/prompt-C-XNDSNE.cjs.map +1 -0
- package/dist/prompt-Dr2Rkxun.mjs +25 -0
- package/dist/prompt-Dr2Rkxun.mjs.map +1 -0
- package/dist/{push-0u6PDz4E.cjs → push-BggkrD0g.cjs} +31 -12
- package/dist/push-BggkrD0g.cjs.map +1 -0
- package/dist/{push-D7co0keA.mjs → push-xWnD9oov.mjs} +30 -11
- package/dist/push-xWnD9oov.mjs.map +1 -0
- package/dist/{run-codegen-Ceeosw5x.cjs → run-codegen-B-90rvjk.cjs} +4 -4
- package/dist/run-codegen-B-90rvjk.cjs.map +1 -0
- package/dist/{run-codegen-DgaFaIQ1.mjs → run-codegen-CrO08jJT.mjs} +4 -4
- package/dist/run-codegen-CrO08jJT.mjs.map +1 -0
- package/dist/{run-with-context-CVhmzAFZ.mjs → run-with-context-B4DyI8Wo.mjs} +6 -26
- package/dist/run-with-context-B4DyI8Wo.mjs.map +1 -0
- package/dist/{run-with-context-DJNnEigg.cjs → run-with-context-D8pSrqD_.cjs} +7 -39
- package/dist/run-with-context-D8pSrqD_.cjs.map +1 -0
- package/dist/schema-CUVTXrHk.cjs +20 -0
- package/dist/{schema-B3iRqvYK.cjs.map → schema-CUVTXrHk.cjs.map} +1 -1
- package/dist/schema-DlUWHV_t.mjs +20 -0
- package/dist/{schema-exG250MU.mjs.map → schema-DlUWHV_t.mjs.map} +1 -1
- package/dist/{status-Dq_NJE71.cjs → status-CqPJTxeK.cjs} +2 -2
- package/dist/{status-Dq_NJE71.cjs.map → status-CqPJTxeK.cjs.map} +1 -1
- package/dist/{status-fWqXzV0P.mjs → status-D7nOW3R3.mjs} +2 -2
- package/dist/{status-fWqXzV0P.mjs.map → status-D7nOW3R3.mjs.map} +1 -1
- package/dist/{token-store--9GYVL7N.cjs → token-store-BgWGhqq0.cjs} +3 -3
- package/dist/{token-store--9GYVL7N.cjs.map → token-store-BgWGhqq0.cjs.map} +1 -1
- package/dist/{token-store-reCGF86F.mjs → token-store-C2r7cFA-.mjs} +2 -2
- package/dist/{token-store-reCGF86F.mjs.map → token-store-C2r7cFA-.mjs.map} +1 -1
- package/dist/{update-B4lv4dAz.mjs → update-8-sHFvNB.mjs} +2 -2
- package/dist/{update-B4lv4dAz.mjs.map → update-8-sHFvNB.mjs.map} +1 -1
- package/dist/{update-Dyo4vuZs.mjs → update-B5hKKw0K.mjs} +3 -3
- package/dist/{update-Dyo4vuZs.mjs.map → update-B5hKKw0K.mjs.map} +1 -1
- package/dist/{update-Do9HHWzs.cjs → update-BVaqURWE.cjs} +2 -2
- package/dist/{update-Do9HHWzs.cjs.map → update-BVaqURWE.cjs.map} +1 -1
- package/dist/{update-DRnN1kiu.cjs → update-BlUwNhLA.cjs} +2 -2
- package/dist/{update-DRnN1kiu.cjs.map → update-BlUwNhLA.cjs.map} +1 -1
- package/dist/{update-Cx_2GkQj.cjs → update-BqhLwuP7.cjs} +2 -2
- package/dist/{update-Cx_2GkQj.cjs.map → update-BqhLwuP7.cjs.map} +1 -1
- package/dist/{update-mEmULIau.mjs → update-DaYjh5VN.mjs} +2 -2
- package/dist/{update-mEmULIau.mjs.map → update-DaYjh5VN.mjs.map} +1 -1
- package/dist/{update-CJgEmSWJ.cjs → update-DcTzR54Z.cjs} +3 -3
- package/dist/{update-CJgEmSWJ.cjs.map → update-DcTzR54Z.cjs.map} +1 -1
- package/dist/{update-CIH6sSVk.cjs → update-Dne7g_0s.cjs} +2 -2
- package/dist/{update-CIH6sSVk.cjs.map → update-Dne7g_0s.cjs.map} +1 -1
- package/dist/{update-CQ4n4Xuf.mjs → update-Dy1BOnTB.mjs} +2 -2
- package/dist/{update-CQ4n4Xuf.mjs.map → update-Dy1BOnTB.mjs.map} +1 -1
- package/dist/{update-rzij1b_o.mjs → update-slz_X0mG.mjs} +2 -2
- package/dist/{update-rzij1b_o.mjs.map → update-slz_X0mG.mjs.map} +1 -1
- package/dist/{upload-DGgJ1TQk.mjs → upload-CDtzV9Wx.mjs} +3 -3
- package/dist/{upload-DGgJ1TQk.mjs.map → upload-CDtzV9Wx.mjs.map} +1 -1
- package/dist/{upload-C43ZXxyb.cjs → upload-DIln1QDA.cjs} +3 -3
- package/dist/{upload-C43ZXxyb.cjs.map → upload-DIln1QDA.cjs.map} +1 -1
- package/dist/{validate-BpxZ8LTl.cjs → validate-BH8jqdqq.cjs} +2 -2
- package/dist/{validate-BpxZ8LTl.cjs.map → validate-BH8jqdqq.cjs.map} +1 -1
- package/dist/{validate-Ca0CRo16.mjs → validate-COS4bfr0.mjs} +2 -2
- package/dist/{validate-Ca0CRo16.mjs.map → validate-COS4bfr0.mjs.map} +1 -1
- package/dist/webhook-BT3cHrq5.mjs +20 -0
- package/dist/{webhook-CpZ1-Ho5.mjs.map → webhook-BT3cHrq5.mjs.map} +1 -1
- package/dist/webhook-CQeuAqec.cjs +20 -0
- package/dist/{webhook-CbL4QaR5.cjs.map → webhook-CQeuAqec.cjs.map} +1 -1
- package/package.json +10 -9
- package/dist/auth-CNbONZuf.cjs +0 -18
- package/dist/cms-BJnovGYT.mjs.map +0 -1
- package/dist/cms-Cnx-lDGu.cjs.map +0 -1
- package/dist/config-loader-BEgS869e.mjs.map +0 -1
- package/dist/config-loader-D8x32gEU.cjs.map +0 -1
- package/dist/consumer-OF6Z_eTP.cjs.map +0 -1
- package/dist/consumer-l-8wUK8E.cjs +0 -18
- package/dist/consumer-pU2HyiyA.mjs.map +0 -1
- package/dist/content-BOb6NC8M.mjs +0 -20
- package/dist/content-DMjSwor1.cjs +0 -20
- package/dist/management-BGYcZB4c.cjs +0 -19
- package/dist/object-DVqidsEc.cjs +0 -20
- package/dist/object-qdBdEghr.mjs +0 -20
- package/dist/project-BX7zvWB1.cjs +0 -20
- package/dist/project-CaXD3QBs.mjs +0 -20
- package/dist/project-user-Cp7i6orv.mjs +0 -20
- package/dist/project-user-Dm0qR-sh.cjs +0 -20
- package/dist/push-0u6PDz4E.cjs.map +0 -1
- package/dist/push-D7co0keA.mjs.map +0 -1
- package/dist/run-codegen-Ceeosw5x.cjs.map +0 -1
- package/dist/run-codegen-DgaFaIQ1.mjs.map +0 -1
- package/dist/run-with-context-CVhmzAFZ.mjs.map +0 -1
- package/dist/run-with-context-DJNnEigg.cjs.map +0 -1
- package/dist/schema-B3iRqvYK.cjs +0 -20
- package/dist/schema-exG250MU.mjs +0 -20
- package/dist/webhook-CbL4QaR5.cjs +0 -20
- package/dist/webhook-CpZ1-Ho5.mjs +0 -20
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_cli_main = require('./cli/main.cjs');
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
|
-
const require_run_with_context = require('./run-with-context-
|
|
3
|
+
const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
|
|
4
4
|
const require_table = require('./table-C74eOSh8.cjs');
|
|
5
5
|
const require_parse = require('./parse-C8oHgQXx.cjs');
|
|
6
6
|
let _praha_byethrow = require("@praha/byethrow");
|
|
@@ -79,4 +79,4 @@ var list_default = require_cli_main.defineCommand({
|
|
|
79
79
|
|
|
80
80
|
//#endregion
|
|
81
81
|
exports.default = list_default;
|
|
82
|
-
//# sourceMappingURL=list-
|
|
82
|
+
//# sourceMappingURL=list-Dd3veD9Z.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-Dd3veD9Z.cjs","names":["toResult","Result","apiErrorFailure","renderTable","getOutputState","contextArgs","defineCommand","parseIntegerChoice","runWithContext"],"sources":["../src/cli/commands/bucket/object/list.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { getOutputState } from \"../../../ui/output.js\";\nimport { renderTable } from \"../../../ui/table.js\";\nimport { parseIntegerChoice } from \"../../parse.js\";\n\nexport async function bucketObjectListHandler(\n ctx: CommandContext,\n options: { bucket: string; limit: number; cursor?: string },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const objects = toResult(\n await ctx.client.GET(\n \"/projects/{projectName}/buckets/{bucketName}/objects\",\n {\n params: {\n path: { projectName: ctx.projectName, bucketName: options.bucket },\n query: {\n limit: options.limit,\n ...(options.cursor !== undefined ? { cursor: options.cursor } : {}),\n },\n },\n },\n ),\n );\n if (Result.isFailure(objects)) return apiErrorFailure(objects.error);\n\n const value = objects.value;\n return Result.succeed({\n json: value,\n text: () => {\n const table = renderTable(\n [\"KEY\", \"ORIGINAL FILENAME\", \"SIZE\", \"TYPE\", \"CREATED AT\"],\n value.objects.map((object) => ({\n cells: [\n object.key,\n object.originalFilename,\n String(object.size),\n object.type,\n object.createdAt,\n ],\n })),\n getOutputState().color,\n );\n return value.pagination.nextCursor === null\n ? table\n : `${table}\\nNext cursor: ${value.pagination.nextCursor}`;\n },\n });\n}\n\nconst listArgs = {\n ...contextArgs,\n bucket: {\n type: \"positional\",\n required: true,\n description: \"Bucket name\",\n },\n limit: {\n type: \"string\",\n description: \"Max number of objects to return (50, 100, or 200)\",\n default: \"100\",\n },\n cursor: {\n type: \"string\",\n description: \"Cursor returned by the previous page\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List objects in a bucket\",\n },\n args: listArgs,\n run: async ({ args }) => {\n const limit = parseIntegerChoice(\"limit\", args.limit, [50, 100, 200]);\n if (Result.isFailure(limit)) return limit;\n\n return runWithContext(args, (ctx) =>\n bucketObjectListHandler(ctx, {\n bucket: args.bucket,\n limit: limit.value,\n cursor: typeof args.cursor === \"string\" ? args.cursor : undefined,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;AAeA,eAAsB,wBACpB,KACA,SACmE;CACnE,MAAM,UAAUA,kCACd,MAAM,IAAI,OAAO,IACf,wDACA,EACE,QAAQ;EACN,MAAM;GAAE,aAAa,IAAI;GAAa,YAAY,QAAQ;EAAO;EACjE,OAAO;GACL,OAAO,QAAQ;GACf,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;EACnE;CACF,EACF,CACF,CACF;CACA,IAAIC,uBAAO,UAAU,OAAO,GAAG,OAAOC,yCAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAOD,uBAAO,QAAQ;EACpB,MAAM;EACN,YAAY;GACV,MAAM,QAAQE,0BACZ;IAAC;IAAO;IAAqB;IAAQ;IAAQ;GAAY,GACzD,MAAM,QAAQ,KAAK,YAAY,EAC7B,OAAO;IACL,OAAO;IACP,OAAO;IACP,OAAO,OAAO,IAAI;IAClB,OAAO;IACP,OAAO;GACT,EACF,EAAE,GACFC,gCAAe,CAAC,CAAC,KACnB;GACA,OAAO,MAAM,WAAW,eAAe,OACnC,QACA,GAAG,MAAM,iBAAiB,MAAM,WAAW;EACjD;CACF,CAAC;AACH;AAEA,MAAM,WAAW;CACf,GAAGC;CACH,QAAQ;EACN,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,OAAO;EACL,MAAM;EACN,aAAa;EACb,SAAS;CACX;CACA,QAAQ;EACN,MAAM;EACN,aAAa;CACf;AACF;AAEA,mBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,WAAW;EACvB,MAAM,QAAQC,iCAAmB,SAAS,KAAK,OAAO;GAAC;GAAI;GAAK;EAAG,CAAC;EACpE,IAAIN,uBAAO,UAAU,KAAK,GAAG,OAAO;EAEpC,OAAOO,wCAAe,OAAO,QAC3B,wBAAwB,KAAK;GAC3B,QAAQ,KAAK;GACb,OAAO,MAAM;GACb,QAAQ,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;EAC1D,CAAC,CACH;CACF;AACF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_cli_main = require('./cli/main.cjs');
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
|
-
const require_run_with_context = require('./run-with-context-
|
|
3
|
+
const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
|
|
4
4
|
const require_table = require('./table-C74eOSh8.cjs');
|
|
5
5
|
const require_parse = require('./parse-C8oHgQXx.cjs');
|
|
6
6
|
const require_group_roles = require('./group-roles-B_iAZog-.cjs');
|
|
@@ -69,4 +69,4 @@ var list_default = require_cli_main.defineCommand({
|
|
|
69
69
|
|
|
70
70
|
//#endregion
|
|
71
71
|
exports.default = list_default;
|
|
72
|
-
//# sourceMappingURL=list-
|
|
72
|
+
//# sourceMappingURL=list-DdVKKaDN.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-DdVKKaDN.cjs","names":["toResult","Result","apiErrorFailure","renderTable","formatGroupRoles","getOutputState","contextArgs","defineCommand","parseIntegerChoice","parseNonNegativeInteger","runWithContext"],"sources":["../src/cli/commands/project-user/list.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { getOutputState } from \"../../ui/output.js\";\nimport { renderTable } from \"../../ui/table.js\";\nimport { parseIntegerChoice, parseNonNegativeInteger } from \"../parse.js\";\nimport { formatGroupRoles } from \"../group-roles.js\";\n\nexport async function projectUserListHandler(\n ctx: CommandContext,\n options: { limit: number; offset: number },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const users = toResult(\n await ctx.client.GET(\"/projects/{projectName}/users\", {\n params: {\n path: { projectName: ctx.projectName },\n query: { limit: options.limit, offset: options.offset },\n },\n }),\n );\n if (Result.isFailure(users)) return apiErrorFailure(users.error);\n\n const value = users.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderTable(\n [\"ID\", \"NAME\", \"EMAIL\", \"GROUP ROLES\"],\n value.projectUsers.map((user) => ({\n cells: [\n user.id,\n user.name,\n user.email,\n formatGroupRoles(user.groupRoles),\n ],\n })),\n getOutputState().color,\n ),\n });\n}\n\nconst listArgs = {\n ...contextArgs,\n limit: {\n type: \"string\",\n description: \"Max number of users to return (50, 100, or 200)\",\n default: \"50\",\n },\n offset: {\n type: \"string\",\n description: \"Pagination offset\",\n default: \"0\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List project users\",\n },\n args: listArgs,\n run: async ({ args }) => {\n const limit = parseIntegerChoice(\"limit\", args.limit, [50, 100, 200]);\n if (Result.isFailure(limit)) return limit;\n const offset = parseNonNegativeInteger(\"offset\", args.offset);\n if (Result.isFailure(offset)) return offset;\n\n return runWithContext(args, (ctx) =>\n projectUserListHandler(ctx, {\n limit: limit.value,\n offset: offset.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;AAgBA,eAAsB,uBACpB,KACA,SACmE;CACnE,MAAM,QAAQA,kCACZ,MAAM,IAAI,OAAO,IAAI,iCAAiC,EACpD,QAAQ;EACN,MAAM,EAAE,aAAa,IAAI,YAAY;EACrC,OAAO;GAAE,OAAO,QAAQ;GAAO,QAAQ,QAAQ;EAAO;CACxD,EACF,CAAC,CACH;CACA,IAAIC,uBAAO,UAAU,KAAK,GAAG,OAAOC,yCAAgB,MAAM,KAAK;CAE/D,MAAM,QAAQ,MAAM;CACpB,OAAOD,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEE,0BACE;GAAC;GAAM;GAAQ;GAAS;EAAa,GACrC,MAAM,aAAa,KAAK,UAAU,EAChC,OAAO;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACLC,qCAAiB,KAAK,UAAU;EAClC,EACF,EAAE,GACFC,gCAAe,CAAC,CAAC,KACnB;CACJ,CAAC;AACH;AAEA,MAAM,WAAW;CACf,GAAGC;CACH,OAAO;EACL,MAAM;EACN,aAAa;EACb,SAAS;CACX;CACA,QAAQ;EACN,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,mBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,WAAW;EACvB,MAAM,QAAQC,iCAAmB,SAAS,KAAK,OAAO;GAAC;GAAI;GAAK;EAAG,CAAC;EACpE,IAAIP,uBAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,SAASQ,sCAAwB,UAAU,KAAK,MAAM;EAC5D,IAAIR,uBAAO,UAAU,MAAM,GAAG,OAAO;EAErC,OAAOS,wCAAe,OAAO,QAC3B,uBAAuB,KAAK;GAC1B,OAAO,MAAM;GACb,QAAQ,OAAO;EACjB,CAAC,CACH;CACF;AACF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_cli_main = require('./cli/main.cjs');
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
|
-
const require_run_with_context = require('./run-with-context-
|
|
3
|
+
const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
|
|
4
4
|
const require_table = require('./table-C74eOSh8.cjs');
|
|
5
5
|
const require_parse = require('./parse-C8oHgQXx.cjs');
|
|
6
6
|
let _praha_byethrow = require("@praha/byethrow");
|
|
@@ -92,4 +92,4 @@ var list_default = require_cli_main.defineCommand({
|
|
|
92
92
|
|
|
93
93
|
//#endregion
|
|
94
94
|
exports.default = list_default;
|
|
95
|
-
//# sourceMappingURL=list-
|
|
95
|
+
//# sourceMappingURL=list-E1sjTZLe.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-E1sjTZLe.cjs","names":["toResult","Result","apiErrorFailure","renderTable","getOutputState","contextArgs","defineCommand","collectRepeatableFlag","parseIntegerChoice","parseNonNegativeInteger","runWithContext"],"sources":["../src/cli/commands/schema/list.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport {\n collectRepeatableFlag,\n parseIntegerChoice,\n parseNonNegativeInteger,\n} from \"../parse.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { getOutputState } from \"../../ui/output.js\";\nimport { renderTable } from \"../../ui/table.js\";\n\ntype DefinitionStatus = \"pending\" | \"failed\" | \"success\";\n\nexport async function schemaListHandler(\n ctx: CommandContext,\n options: { status?: DefinitionStatus[]; limit: number; offset: number },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const definitions = toResult(\n await ctx.client.GET(\"/projects/{projectName}/definitions\", {\n params: {\n path: { projectName: ctx.projectName },\n query: {\n limit: options.limit,\n offset: options.offset,\n ...(options.status !== undefined ? { status: options.status } : {}),\n },\n },\n }),\n );\n if (Result.isFailure(definitions)) return apiErrorFailure(definitions.error);\n\n const value = definitions.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderTable(\n [\"ID\", \"STATUS\", \"VERSION\", \"CREATED AT\"],\n value.definitions.map((definition) => ({\n cells: [\n String(definition.id),\n definition.status,\n String(definition.definitionVersion),\n definition.createdAt,\n ],\n })),\n getOutputState().color,\n ),\n });\n}\n\nconst VALID_STATUSES: DefinitionStatus[] = [\"pending\", \"failed\", \"success\"];\n\n// 不正値を黙って読み替えるとフィルタなしの全件取得など別の意味のクエリになるため、\n// normalize ではなく validate してエラーで弾く。\nexport function parseStatusFilter(\n value: unknown,\n): Result.Result<DefinitionStatus[] | undefined, CommandFailure> {\n if (value === undefined) return Result.succeed(undefined);\n\n const raw = Array.isArray(value) ? value : [value];\n const statuses: DefinitionStatus[] = [];\n for (const item of raw) {\n const matched = VALID_STATUSES.find((status) => status === item);\n if (matched === undefined) {\n return Result.fail({\n message: `Invalid --status value: ${String(item)}. Valid values: ${VALID_STATUSES.join(\", \")}.`,\n });\n }\n statuses.push(matched);\n }\n return Result.succeed(statuses);\n}\n\nconst listArgs = {\n ...contextArgs,\n status: {\n type: \"string\",\n description: \"Filter by status (pending, failed, success); repeatable\",\n },\n limit: {\n type: \"string\",\n description: \"Max number of definitions to return (50, 100, or 200)\",\n default: \"50\",\n },\n offset: {\n type: \"string\",\n description: \"Pagination offset\",\n default: \"0\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List schema definition versions\",\n },\n args: listArgs,\n run: async ({ args, rawArgs }) => {\n const status = parseStatusFilter(collectRepeatableFlag(rawArgs, \"status\"));\n if (Result.isFailure(status)) return status;\n const limit = parseIntegerChoice(\"limit\", args.limit, [50, 100, 200]);\n if (Result.isFailure(limit)) return limit;\n const offset = parseNonNegativeInteger(\"offset\", args.offset);\n if (Result.isFailure(offset)) return offset;\n\n return runWithContext(args, (ctx) =>\n schemaListHandler(ctx, {\n status: status.value,\n limit: limit.value,\n offset: offset.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;AAqBA,eAAsB,kBACpB,KACA,SACmE;CACnE,MAAM,cAAcA,kCAClB,MAAM,IAAI,OAAO,IAAI,uCAAuC,EAC1D,QAAQ;EACN,MAAM,EAAE,aAAa,IAAI,YAAY;EACrC,OAAO;GACL,OAAO,QAAQ;GACf,QAAQ,QAAQ;GAChB,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;EACnE;CACF,EACF,CAAC,CACH;CACA,IAAIC,uBAAO,UAAU,WAAW,GAAG,OAAOC,yCAAgB,YAAY,KAAK;CAE3E,MAAM,QAAQ,YAAY;CAC1B,OAAOD,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEE,0BACE;GAAC;GAAM;GAAU;GAAW;EAAY,GACxC,MAAM,YAAY,KAAK,gBAAgB,EACrC,OAAO;GACL,OAAO,WAAW,EAAE;GACpB,WAAW;GACX,OAAO,WAAW,iBAAiB;GACnC,WAAW;EACb,EACF,EAAE,GACFC,gCAAe,CAAC,CAAC,KACnB;CACJ,CAAC;AACH;AAEA,MAAM,iBAAqC;CAAC;CAAW;CAAU;AAAS;AAI1E,SAAgB,kBACd,OAC+D;CAC/D,IAAI,UAAU,QAAW,OAAOH,uBAAO,QAAQ,MAAS;CAExD,MAAM,MAAM,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;CACjD,MAAM,WAA+B,CAAC;CACtC,KAAK,MAAM,QAAQ,KAAK;EACtB,MAAM,UAAU,eAAe,MAAM,WAAW,WAAW,IAAI;EAC/D,IAAI,YAAY,QACd,OAAOA,uBAAO,KAAK,EACjB,SAAS,2BAA2B,OAAO,IAAI,EAAE,kBAAkB,eAAe,KAAK,IAAI,EAAE,GAC/F,CAAC;EAEH,SAAS,KAAK,OAAO;CACvB;CACA,OAAOA,uBAAO,QAAQ,QAAQ;AAChC;AAEA,MAAM,WAAW;CACf,GAAGI;CACH,QAAQ;EACN,MAAM;EACN,aAAa;CACf;CACA,OAAO;EACL,MAAM;EACN,aAAa;EACb,SAAS;CACX;CACA,QAAQ;EACN,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,mBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,SAAS,kBAAkBC,oCAAsB,SAAS,QAAQ,CAAC;EACzE,IAAIN,uBAAO,UAAU,MAAM,GAAG,OAAO;EACrC,MAAM,QAAQO,iCAAmB,SAAS,KAAK,OAAO;GAAC;GAAI;GAAK;EAAG,CAAC;EACpE,IAAIP,uBAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,SAASQ,sCAAwB,UAAU,KAAK,MAAM;EAC5D,IAAIR,uBAAO,UAAU,MAAM,GAAG,OAAO;EAErC,OAAOS,wCAAe,OAAO,QAC3B,kBAAkB,KAAK;GACrB,QAAQ,OAAO;GACf,OAAO,MAAM;GACb,QAAQ,OAAO;EACjB,CAAC,CACH;CACF;AACF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_cli_main = require('./cli/main.cjs');
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
|
-
const require_run_with_context = require('./run-with-context-
|
|
3
|
+
const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
|
|
4
4
|
const require_table = require('./table-C74eOSh8.cjs');
|
|
5
5
|
let _praha_byethrow = require("@praha/byethrow");
|
|
6
6
|
|
|
@@ -32,4 +32,4 @@ var list_default = require_cli_main.defineCommand({
|
|
|
32
32
|
|
|
33
33
|
//#endregion
|
|
34
34
|
exports.default = list_default;
|
|
35
|
-
//# sourceMappingURL=list-
|
|
35
|
+
//# sourceMappingURL=list-KI-7REC_.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-KI-7REC_.cjs","names":["fetchOrganizations","Result","apiErrorFailure","renderTable","getOutputState","defineCommand","globalArgs","runWithAuth"],"sources":["../src/cli/commands/org/list.ts"],"sourcesContent":["import { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { globalArgs } from \"../shared.js\";\nimport { runWithAuth, type AuthContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { fetchOrganizations } from \"../../api/organizations.js\";\nimport { getOutputState } from \"../../ui/output.js\";\nimport { renderTable } from \"../../ui/table.js\";\n\nexport async function orgListHandler(\n ctx: AuthContext,\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const organizations = await fetchOrganizations(ctx.client);\n if (Result.isFailure(organizations))\n return apiErrorFailure(organizations.error);\n\n return Result.succeed({\n json: organizations.value,\n text: () =>\n renderTable(\n [\"NAME\", \"DISPLAY NAME\", \"ID\"],\n organizations.value.map((org) => ({\n cells: [org.name, org.displayName, String(org.id)],\n })),\n getOutputState().color,\n ),\n });\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List organizations you belong to\",\n },\n args: { ...globalArgs },\n run: () => runWithAuth(orgListHandler),\n});\n"],"mappings":";;;;;;;AAaA,eAAsB,eACpB,KACmE;CACnE,MAAM,gBAAgB,MAAMA,4CAAmB,IAAI,MAAM;CACzD,IAAIC,uBAAO,UAAU,aAAa,GAChC,OAAOC,yCAAgB,cAAc,KAAK;CAE5C,OAAOD,uBAAO,QAAQ;EACpB,MAAM,cAAc;EACpB,YACEE,0BACE;GAAC;GAAQ;GAAgB;EAAI,GAC7B,cAAc,MAAM,KAAK,SAAS,EAChC,OAAO;GAAC,IAAI;GAAM,IAAI;GAAa,OAAO,IAAI,EAAE;EAAC,EACnD,EAAE,GACFC,gCAAe,CAAC,CAAC,KACnB;CACJ,CAAC;AACH;AAEA,mBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM,EAAE,GAAGC,0BAAW;CACtB,WAAWC,qCAAY,cAAc;AACvC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as getOutputState, t as defineCommand } from "./cli/main.mjs";
|
|
2
2
|
import { r as contextArgs } from "./shared-CZZimGxc.mjs";
|
|
3
|
-
import { a as apiErrorFailure,
|
|
3
|
+
import { a as apiErrorFailure, c as toResult, n as runWithContext } from "./run-with-context-B4DyI8Wo.mjs";
|
|
4
4
|
import { t as renderTable } from "./table-MHEfbnWO.mjs";
|
|
5
5
|
import { n as maskManagementKey, r as showKeyArg } from "./mask-B1qD73jb.mjs";
|
|
6
6
|
import { n as formatGroupRoles } from "./group-roles-BIH7q8tf.mjs";
|
|
@@ -46,4 +46,4 @@ var list_default = defineCommand({
|
|
|
46
46
|
|
|
47
47
|
//#endregion
|
|
48
48
|
export { list_default as default };
|
|
49
|
-
//# sourceMappingURL=list-
|
|
49
|
+
//# sourceMappingURL=list-MWD4huKP.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-MWD4huKP.mjs","names":[],"sources":["../src/cli/commands/key/management/list.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { getOutputState } from \"../../../ui/output.js\";\nimport { renderTable } from \"../../../ui/table.js\";\nimport { formatGroupRoles } from \"../../group-roles.js\";\nimport { maskManagementKey, showKeyArg } from \"../mask.js\";\n\nexport async function keyManagementListHandler(\n ctx: CommandContext,\n options: { showKey: boolean },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const keys = toResult(\n await ctx.client.GET(\"/projects/{projectName}/management-keys\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(keys)) return apiErrorFailure(keys.error);\n\n // --json でもマスクを効かせるため、表示用データ自体を書き換える\n const value = keys.value.map((item) =>\n options.showKey ? item : { ...item, key: maskManagementKey(item.key) },\n );\n return Result.succeed({\n json: value,\n text: () =>\n renderTable(\n [\"ID\", \"KEY\", \"DESCRIPTION\", \"GROUP ROLES\", \"CREATED AT\"],\n value.map((item) => ({\n cells: [\n String(item.id),\n item.key,\n item.description,\n formatGroupRoles(item.groupRoles),\n item.createdAt,\n ],\n })),\n getOutputState().color,\n ),\n });\n}\n\nconst listArgs = {\n ...contextArgs,\n ...showKeyArg,\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List management keys\",\n },\n args: listArgs,\n run: ({ args }) =>\n runWithContext(args, (ctx) =>\n keyManagementListHandler(ctx, { showKey: args[\"show-key\"] === true }),\n ),\n});\n"],"mappings":";;;;;;;;;AAgBA,eAAsB,yBACpB,KACA,SACmE;CACnE,MAAM,OAAO,SACX,MAAM,IAAI,OAAO,IAAI,2CAA2C,EAC9D,QAAQ,EAAE,MAAM,EAAE,aAAa,IAAI,YAAY,EAAE,EACnD,CAAC,CACH;CACA,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO,gBAAgB,KAAK,KAAK;CAG7D,MAAM,QAAQ,KAAK,MAAM,KAAK,SAC5B,QAAQ,UAAU,OAAO;EAAE,GAAG;EAAM,KAAK,kBAAkB,KAAK,GAAG;CAAE,CACvE;CACA,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YACE,YACE;GAAC;GAAM;GAAO;GAAe;GAAe;EAAY,GACxD,MAAM,KAAK,UAAU,EACnB,OAAO;GACL,OAAO,KAAK,EAAE;GACd,KAAK;GACL,KAAK;GACL,iBAAiB,KAAK,UAAU;GAChC,KAAK;EACP,EACF,EAAE,GACF,eAAe,CAAC,CAAC,KACnB;CACJ,CAAC;AACH;AAEA,MAAM,WAAW;CACf,GAAG;CACH,GAAG;AACL;AAEA,mBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACN,eAAe,OAAO,QACpB,yBAAyB,KAAK,EAAE,SAAS,KAAK,gBAAgB,KAAK,CAAC,CACtE;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as getOutputState, t as defineCommand } from "./cli/main.mjs";
|
|
2
2
|
import { r as contextArgs } from "./shared-CZZimGxc.mjs";
|
|
3
|
-
import { a as apiErrorFailure,
|
|
3
|
+
import { a as apiErrorFailure, c as toResult, n as runWithContext } from "./run-with-context-B4DyI8Wo.mjs";
|
|
4
4
|
import { t as renderTable } from "./table-MHEfbnWO.mjs";
|
|
5
5
|
import { r as showKeyArg, t as maskConsumerKey } from "./mask-B1qD73jb.mjs";
|
|
6
6
|
import { Result } from "@praha/byethrow";
|
|
@@ -45,4 +45,4 @@ var list_default = defineCommand({
|
|
|
45
45
|
|
|
46
46
|
//#endregion
|
|
47
47
|
export { list_default as default };
|
|
48
|
-
//# sourceMappingURL=list-
|
|
48
|
+
//# sourceMappingURL=list-Pf5aAoaN.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-Pf5aAoaN.mjs","names":[],"sources":["../src/cli/commands/key/consumer/list.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { getOutputState } from \"../../../ui/output.js\";\nimport { renderTable } from \"../../../ui/table.js\";\nimport { maskConsumerKey, showKeyArg } from \"../mask.js\";\n\nexport async function keyConsumerListHandler(\n ctx: CommandContext,\n options: { showKey: boolean },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const keys = toResult(\n await ctx.client.GET(\"/projects/{projectName}/consumer-keys\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(keys)) return apiErrorFailure(keys.error);\n\n // --json でもマスクを効かせるため、表示用データ自体を書き換える\n const value = keys.value.map((item) =>\n options.showKey ? item : { ...item, key: maskConsumerKey(item.key) },\n );\n return Result.succeed({\n json: value,\n text: () =>\n renderTable(\n [\"ID\", \"KEY\", \"DESCRIPTION\", \"CAN READ DRAFTS\", \"CREATED AT\"],\n value.map((item) => ({\n cells: [\n String(item.id),\n item.key,\n item.description,\n String(item.canReadDrafts),\n item.createdAt,\n ],\n })),\n getOutputState().color,\n ),\n });\n}\n\nconst listArgs = {\n ...contextArgs,\n ...showKeyArg,\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List consumer keys\",\n },\n args: listArgs,\n run: ({ args }) =>\n runWithContext(args, (ctx) =>\n keyConsumerListHandler(ctx, { showKey: args[\"show-key\"] === true }),\n ),\n});\n"],"mappings":";;;;;;;;AAeA,eAAsB,uBACpB,KACA,SACmE;CACnE,MAAM,OAAO,SACX,MAAM,IAAI,OAAO,IAAI,yCAAyC,EAC5D,QAAQ,EAAE,MAAM,EAAE,aAAa,IAAI,YAAY,EAAE,EACnD,CAAC,CACH;CACA,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO,gBAAgB,KAAK,KAAK;CAG7D,MAAM,QAAQ,KAAK,MAAM,KAAK,SAC5B,QAAQ,UAAU,OAAO;EAAE,GAAG;EAAM,KAAK,gBAAgB,KAAK,GAAG;CAAE,CACrE;CACA,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YACE,YACE;GAAC;GAAM;GAAO;GAAe;GAAmB;EAAY,GAC5D,MAAM,KAAK,UAAU,EACnB,OAAO;GACL,OAAO,KAAK,EAAE;GACd,KAAK;GACL,KAAK;GACL,OAAO,KAAK,aAAa;GACzB,KAAK;EACP,EACF,EAAE,GACF,eAAe,CAAC,CAAC,KACnB;CACJ,CAAC;AACH;AAEA,MAAM,WAAW;CACf,GAAG;CACH,GAAG;AACL;AAEA,mBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACN,eAAe,OAAO,QACpB,uBAAuB,KAAK,EAAE,SAAS,KAAK,gBAAgB,KAAK,CAAC,CACpE;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_cli_main = require('./cli/main.cjs');
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
|
-
const require_run_with_context = require('./run-with-context-
|
|
3
|
+
const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
|
|
4
4
|
const require_table = require('./table-C74eOSh8.cjs');
|
|
5
5
|
const require_table_event = require('./table-event-DXkCK29f.cjs');
|
|
6
6
|
let _praha_byethrow = require("@praha/byethrow");
|
|
@@ -37,4 +37,4 @@ var list_default = require_cli_main.defineCommand({
|
|
|
37
37
|
|
|
38
38
|
//#endregion
|
|
39
39
|
exports.default = list_default;
|
|
40
|
-
//# sourceMappingURL=list-
|
|
40
|
+
//# sourceMappingURL=list-fG4zo8zz.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-fG4zo8zz.cjs","names":["toResult","Result","apiErrorFailure","renderTable","formatTableEvents","getOutputState","contextArgs","defineCommand","runWithContext"],"sources":["../src/cli/commands/webhook/list.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { getOutputState } from \"../../ui/output.js\";\nimport { renderTable } from \"../../ui/table.js\";\nimport { formatTableEvents } from \"./table-event.js\";\n\nexport async function webhookListHandler(\n ctx: CommandContext,\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const webhooks = toResult(\n await ctx.client.GET(\"/projects/{projectName}/webhooks\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(webhooks)) return apiErrorFailure(webhooks.error);\n\n const value = webhooks.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderTable(\n [\"ID\", \"NAME\", \"URL\", \"TABLE EVENTS\"],\n value.map((webhook) => ({\n cells: [\n String(webhook.id),\n webhook.name,\n webhook.url,\n formatTableEvents(webhook.tableEvents),\n ],\n })),\n getOutputState().color,\n ),\n });\n}\n\nconst listArgs = {\n ...contextArgs,\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List webhooks\",\n },\n args: listArgs,\n run: ({ args }) => runWithContext(args, (ctx) => webhookListHandler(ctx)),\n});\n"],"mappings":";;;;;;;;AAeA,eAAsB,mBACpB,KACmE;CACnE,MAAM,WAAWA,kCACf,MAAM,IAAI,OAAO,IAAI,oCAAoC,EACvD,QAAQ,EAAE,MAAM,EAAE,aAAa,IAAI,YAAY,EAAE,EACnD,CAAC,CACH;CACA,IAAIC,uBAAO,UAAU,QAAQ,GAAG,OAAOC,yCAAgB,SAAS,KAAK;CAErE,MAAM,QAAQ,SAAS;CACvB,OAAOD,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEE,0BACE;GAAC;GAAM;GAAQ;GAAO;EAAc,GACpC,MAAM,KAAK,aAAa,EACtB,OAAO;GACL,OAAO,QAAQ,EAAE;GACjB,QAAQ;GACR,QAAQ;GACRC,sCAAkB,QAAQ,WAAW;EACvC,EACF,EAAE,GACFC,gCAAe,CAAC,CAAC,KACnB;CACJ,CAAC;AACH;AAEA,MAAM,WAAW,EACf,GAAGC,2BACL;AAEA,mBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WAAWC,wCAAe,OAAO,QAAQ,mBAAmB,GAAG,CAAC;AAC1E,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as getOutputState, t as defineCommand } from "./cli/main.mjs";
|
|
2
2
|
import { r as contextArgs } from "./shared-CZZimGxc.mjs";
|
|
3
|
-
import { a as apiErrorFailure,
|
|
3
|
+
import { a as apiErrorFailure, c as toResult, n as runWithContext } from "./run-with-context-B4DyI8Wo.mjs";
|
|
4
4
|
import { t as renderTable } from "./table-MHEfbnWO.mjs";
|
|
5
5
|
import { l as parseNonNegativeInteger, o as parseIntegerChoice } from "./parse-DA0k5AHa.mjs";
|
|
6
6
|
import { n as formatGroupRoles } from "./group-roles-BIH7q8tf.mjs";
|
|
@@ -69,4 +69,4 @@ var list_default = defineCommand({
|
|
|
69
69
|
|
|
70
70
|
//#endregion
|
|
71
71
|
export { list_default as default };
|
|
72
|
-
//# sourceMappingURL=list-
|
|
72
|
+
//# sourceMappingURL=list-r2UPz1zW.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-r2UPz1zW.mjs","names":[],"sources":["../src/cli/commands/project-user/list.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { getOutputState } from \"../../ui/output.js\";\nimport { renderTable } from \"../../ui/table.js\";\nimport { parseIntegerChoice, parseNonNegativeInteger } from \"../parse.js\";\nimport { formatGroupRoles } from \"../group-roles.js\";\n\nexport async function projectUserListHandler(\n ctx: CommandContext,\n options: { limit: number; offset: number },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const users = toResult(\n await ctx.client.GET(\"/projects/{projectName}/users\", {\n params: {\n path: { projectName: ctx.projectName },\n query: { limit: options.limit, offset: options.offset },\n },\n }),\n );\n if (Result.isFailure(users)) return apiErrorFailure(users.error);\n\n const value = users.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderTable(\n [\"ID\", \"NAME\", \"EMAIL\", \"GROUP ROLES\"],\n value.projectUsers.map((user) => ({\n cells: [\n user.id,\n user.name,\n user.email,\n formatGroupRoles(user.groupRoles),\n ],\n })),\n getOutputState().color,\n ),\n });\n}\n\nconst listArgs = {\n ...contextArgs,\n limit: {\n type: \"string\",\n description: \"Max number of users to return (50, 100, or 200)\",\n default: \"50\",\n },\n offset: {\n type: \"string\",\n description: \"Pagination offset\",\n default: \"0\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List project users\",\n },\n args: listArgs,\n run: async ({ args }) => {\n const limit = parseIntegerChoice(\"limit\", args.limit, [50, 100, 200]);\n if (Result.isFailure(limit)) return limit;\n const offset = parseNonNegativeInteger(\"offset\", args.offset);\n if (Result.isFailure(offset)) return offset;\n\n return runWithContext(args, (ctx) =>\n projectUserListHandler(ctx, {\n limit: limit.value,\n offset: offset.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;AAgBA,eAAsB,uBACpB,KACA,SACmE;CACnE,MAAM,QAAQ,SACZ,MAAM,IAAI,OAAO,IAAI,iCAAiC,EACpD,QAAQ;EACN,MAAM,EAAE,aAAa,IAAI,YAAY;EACrC,OAAO;GAAE,OAAO,QAAQ;GAAO,QAAQ,QAAQ;EAAO;CACxD,EACF,CAAC,CACH;CACA,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO,gBAAgB,MAAM,KAAK;CAE/D,MAAM,QAAQ,MAAM;CACpB,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YACE,YACE;GAAC;GAAM;GAAQ;GAAS;EAAa,GACrC,MAAM,aAAa,KAAK,UAAU,EAChC,OAAO;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,iBAAiB,KAAK,UAAU;EAClC,EACF,EAAE,GACF,eAAe,CAAC,CAAC,KACnB;CACJ,CAAC;AACH;AAEA,MAAM,WAAW;CACf,GAAG;CACH,OAAO;EACL,MAAM;EACN,aAAa;EACb,SAAS;CACX;CACA,QAAQ;EACN,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,mBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,WAAW;EACvB,MAAM,QAAQ,mBAAmB,SAAS,KAAK,OAAO;GAAC;GAAI;GAAK;EAAG,CAAC;EACpE,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,SAAS,wBAAwB,UAAU,KAAK,MAAM;EAC5D,IAAI,OAAO,UAAU,MAAM,GAAG,OAAO;EAErC,OAAO,eAAe,OAAO,QAC3B,uBAAuB,KAAK;GAC1B,OAAO,MAAM;GACb,QAAQ,OAAO;EACjB,CAAC,CACH;CACF;AACF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as notice, t as defineCommand } from "./cli/main.mjs";
|
|
2
2
|
import { i as globalArgs } from "./shared-CZZimGxc.mjs";
|
|
3
|
-
import { n as resolveEnv, t as FileTokenStore } from "./token-store-
|
|
3
|
+
import { n as resolveEnv, t as FileTokenStore } from "./token-store-C2r7cFA-.mjs";
|
|
4
4
|
import { a as verifyIdToken, n as exchangeCode, t as buildAuthorizationUrl } from "./oauth-client-QHuDa4fW.mjs";
|
|
5
5
|
import { Result } from "@praha/byethrow";
|
|
6
6
|
import { serve } from "@hono/node-server";
|
|
@@ -208,4 +208,4 @@ function authorizeFailure(error) {
|
|
|
208
208
|
|
|
209
209
|
//#endregion
|
|
210
210
|
export { login_default as default };
|
|
211
|
-
//# sourceMappingURL=login-
|
|
211
|
+
//# sourceMappingURL=login-Dq2L3bI7.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-FE_dbWMo.mjs","names":[],"sources":["../src/cli/util/base64url.ts","../src/cli/util/random.ts","../src/cli/util/sha256.ts","../src/cli/auth/pkce.ts","../src/cli/auth/state.ts","../src/cli/auth/authorize.ts","../src/cli/commands/auth/login.ts"],"sourcesContent":["// Node 固有の Buffer ではなく Web 標準の btoa/atob を使う。特定ランタイムの API に\n// 縛られず、ブラウザ / Deno / Edge でもそのまま動く形にしておくため。\nexport function encodeBase64Url(bytes: Uint8Array): string {\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return globalThis\n .btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport function decodeBase64Url(text: string): Uint8Array {\n const base64 = text.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const binary = globalThis.atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","export function randomBytes(length: number): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n","export async function sha256(data: Uint8Array): Promise<Uint8Array> {\n // 新しい TS lib は Uint8Array を ArrayBufferLike でジェネリックにし digest が ArrayBuffer 裏付けを要求するため、\n // ArrayBuffer 裏付けの view にコピーしてから渡す。\n const view = new Uint8Array(data);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", view);\n return new Uint8Array(digest);\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\nimport { sha256 } from \"../util/sha256.js\";\n\nexport type Pkce = {\n codeVerifier: string;\n codeChallenge: string;\n codeChallengeMethod: \"S256\";\n};\n\nexport async function createPkce(): Promise<Pkce> {\n const codeVerifier = encodeBase64Url(randomBytes(32));\n const digest = await sha256(new TextEncoder().encode(codeVerifier));\n return {\n codeVerifier,\n codeChallenge: encodeBase64Url(digest),\n codeChallengeMethod: \"S256\",\n };\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\n\nexport function createState(): string {\n return encodeBase64Url(randomBytes(32));\n}\n\nexport function verifyState(\n expected: string,\n received: string | null,\n): boolean {\n return received !== null && received === expected;\n}\n","import { serve, type ServerType } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\nimport openBrowser from \"open\";\nimport { Result } from \"@praha/byethrow\";\nimport { createPkce } from \"./pkce.js\";\nimport { createState, verifyState } from \"./state.js\";\nimport {\n buildAuthorizationUrl,\n exchangeCode,\n verifyIdToken,\n type IdTokenClaims,\n type TokenExchangeError,\n type TokenSet,\n} from \"./oauth-client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;\n\nexport type AuthorizeError =\n | { type: \"callback_server_failed\" }\n | { type: \"callback_timeout\" }\n | { type: \"state_mismatch\" }\n | { type: \"user_denied\"; description?: string }\n | TokenExchangeError;\n\nexport type AuthorizeSuccess = {\n issuerUrl: string;\n tokenSet: TokenSet;\n claims: IdTokenClaims;\n};\n\ntype CallbackQuery = {\n code?: string;\n state?: string;\n error?: string;\n errorDescription?: string;\n};\n\nexport type AuthorizeParams = {\n issuerUrl: string;\n // ブラウザ起動を差し替え可能にして統合テストで「ブラウザ役」の fetch を流せるようにする。\n openBrowser?: (url: string) => Promise<void>;\n // ブラウザ起動に失敗したときに authorization URL を利用者へ手動提示するための通知口。\n onAuthorizationUrl?: (url: string) => void;\n timeoutMs?: number;\n};\n\nexport async function authorize(\n params: AuthorizeParams,\n): Promise<Result.Result<AuthorizeSuccess, AuthorizeError>> {\n const { issuerUrl } = params;\n const pkce = await createPkce();\n const state = createState();\n\n let resolveCallback: (query: CallbackQuery) => void = () => {};\n const callbackReceived = new Promise<CallbackQuery>((resolve) => {\n resolveCallback = resolve;\n });\n\n const app = new Hono();\n app.get(\"/callback\", (c) => {\n const query = c.req.query();\n resolveCallback({\n code: query.code,\n state: query.state,\n error: query.error,\n errorDescription: query.error_description,\n });\n return c.html(renderCallbackHtml(query.error == null));\n });\n\n let listened: { server: ServerType; port: number };\n try {\n listened = await listen(app);\n } catch {\n // loopback に bind できない環境ではログインを完遂できないため、待たずに失敗を返す。\n return Result.fail({ type: \"callback_server_failed\" });\n }\n const { server, port } = listened;\n\n try {\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n const authorizationUrl = buildAuthorizationUrl({\n issuerUrl,\n redirectUri,\n codeChallenge: pkce.codeChallenge,\n codeChallengeMethod: pkce.codeChallengeMethod,\n state,\n });\n\n const openImpl = params.openBrowser ?? openBrowser;\n await openImpl(authorizationUrl).catch(() => {\n params.onAuthorizationUrl?.(authorizationUrl);\n });\n\n const query = await waitForCallback(\n callbackReceived,\n params.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n if (query == null) {\n return Result.fail({ type: \"callback_timeout\" });\n }\n\n // 成功・失敗どちらの応答も Authorization Server は state を返すため、分岐する前に検証する。\n // 無関係なローカルリクエスト(?error=... 等)で進行中のログインを中断させないため。\n if (!verifyState(state, query.state ?? null)) {\n return Result.fail({ type: \"state_mismatch\" });\n }\n\n if (query.error != null) {\n if (query.error === \"access_denied\") {\n return Result.fail({\n type: \"user_denied\",\n description: query.errorDescription,\n });\n }\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: [query.error, query.errorDescription]\n .filter((part) => part != null)\n .join(\": \"),\n });\n }\n\n if (query.code == null) {\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: \"Authorization response did not include a code\",\n });\n }\n\n const exchanged = await exchangeCode({\n issuerUrl,\n code: query.code,\n redirectUri,\n codeVerifier: pkce.codeVerifier,\n });\n if (Result.isFailure(exchanged)) return exchanged;\n\n const claims = await verifyIdToken(issuerUrl, exchanged.value.idToken);\n\n return Result.succeed({ issuerUrl, tokenSet: exchanged.value, claims });\n } finally {\n await closeServer(server);\n }\n}\n\nasync function listen(\n app: Hono,\n): Promise<{ server: ServerType; port: number }> {\n return new Promise((resolve, reject) => {\n const server = serve(\n { fetch: app.fetch, hostname: \"127.0.0.1\", port: 0 },\n (info) => resolve({ server, port: info.port }),\n );\n server.on(\"error\", (error) => reject(error));\n });\n}\n\nasync function waitForCallback(\n callbackReceived: Promise<CallbackQuery>,\n timeoutMs: number,\n): Promise<CallbackQuery | undefined> {\n let timer: NodeJS.Timeout | undefined;\n const timedOut = new Promise<undefined>((resolve) => {\n timer = setTimeout(() => resolve(undefined), timeoutMs);\n });\n try {\n return await Promise.race([callbackReceived, timedOut]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\nasync function closeServer(server: ServerType): Promise<void> {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n}\n\nfunction renderCallbackHtml(success: boolean): string {\n const message = success\n ? \"Login successful. You can close this tab and return to the terminal.\"\n : \"Login failed. You can close this tab and return to the terminal.\";\n return `<!doctype html><html><head><meta charset=\"utf-8\"><title>Orizm CLI</title></head><body><p>${message}</p></body></html>`;\n}\n","import { Result } from \"@praha/byethrow\";\nimport { defineCommand } from \"../define-command.js\";\nimport { globalArgs } from \"../shared.js\";\nimport { CommandFailure } from \"../define-command.js\";\nimport { resolveEnv } from \"../../env.js\";\nimport { authorize, type AuthorizeError } from \"../../auth/authorize.js\";\nimport { FileTokenStore } from \"../../auth/token-store.js\";\nimport { notice } from \"../../ui/output.js\";\n\nexport default defineCommand({\n meta: {\n name: \"login\",\n description: \"Sign in to Orizm\",\n },\n args: { ...globalArgs },\n run: async () => {\n const env = resolveEnv();\n if (Result.isFailure(env)) {\n return Result.fail({\n message: \"Invalid Orizm environment configuration.\",\n });\n }\n const { issuerUrl } = env.value;\n\n notice(\n \"Opening your browser to complete sign-in. Finish within 5 minutes...\",\n );\n\n const result = await authorize({\n issuerUrl,\n onAuthorizationUrl: (url) =>\n notice(\n `Could not open a browser automatically. Open this URL:\\n${url}`,\n ),\n });\n if (Result.isFailure(result)) {\n return authorizeFailure(result.error);\n }\n\n const { tokenSet, claims } = result.value;\n await new FileTokenStore().set(issuerUrl, {\n accessToken: tokenSet.accessToken,\n refreshToken: tokenSet.refreshToken,\n idToken: tokenSet.idToken,\n expiresAt: tokenSet.expiresAt,\n scope: tokenSet.scope,\n subject: claims.subject,\n profile: { name: claims.name, email: claims.email },\n });\n\n const who = claims.email ?? claims.name ?? claims.subject;\n return Result.succeed({\n json: { issuer: issuerUrl, subject: claims.subject, email: claims.email },\n text: () => `Logged in as ${who}.`,\n });\n },\n});\n\nfunction authorizeFailure(\n error: AuthorizeError,\n): Result.Result<never, CommandFailure> {\n switch (error.type) {\n case \"callback_server_failed\":\n return Result.fail({\n message:\n \"Could not start the local sign-in listener. Check that your environment allows local connections, then try again.\",\n });\n case \"callback_timeout\":\n return Result.fail({\n message:\n \"Timed out before the browser sign-in completed. Run `orizm auth login` again.\",\n });\n case \"state_mismatch\":\n return Result.fail({\n message: \"Sign-in failed due to a security check. Please try again.\",\n });\n case \"user_denied\":\n return Result.fail({ message: \"Sign-in was denied.\" });\n case \"token_exchange_failed\":\n return Result.fail({\n message: `Sign-in failed: ${error.reason}. Please try again.`,\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"login-Dq2L3bI7.mjs","names":[],"sources":["../src/cli/util/base64url.ts","../src/cli/util/random.ts","../src/cli/util/sha256.ts","../src/cli/auth/pkce.ts","../src/cli/auth/state.ts","../src/cli/auth/authorize.ts","../src/cli/commands/auth/login.ts"],"sourcesContent":["// Node 固有の Buffer ではなく Web 標準の btoa/atob を使う。特定ランタイムの API に\n// 縛られず、ブラウザ / Deno / Edge でもそのまま動く形にしておくため。\nexport function encodeBase64Url(bytes: Uint8Array): string {\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return globalThis\n .btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport function decodeBase64Url(text: string): Uint8Array {\n const base64 = text.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const binary = globalThis.atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","export function randomBytes(length: number): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n","export async function sha256(data: Uint8Array): Promise<Uint8Array> {\n // 新しい TS lib は Uint8Array を ArrayBufferLike でジェネリックにし digest が ArrayBuffer 裏付けを要求するため、\n // ArrayBuffer 裏付けの view にコピーしてから渡す。\n const view = new Uint8Array(data);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", view);\n return new Uint8Array(digest);\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\nimport { sha256 } from \"../util/sha256.js\";\n\nexport type Pkce = {\n codeVerifier: string;\n codeChallenge: string;\n codeChallengeMethod: \"S256\";\n};\n\nexport async function createPkce(): Promise<Pkce> {\n const codeVerifier = encodeBase64Url(randomBytes(32));\n const digest = await sha256(new TextEncoder().encode(codeVerifier));\n return {\n codeVerifier,\n codeChallenge: encodeBase64Url(digest),\n codeChallengeMethod: \"S256\",\n };\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\n\nexport function createState(): string {\n return encodeBase64Url(randomBytes(32));\n}\n\nexport function verifyState(\n expected: string,\n received: string | null,\n): boolean {\n return received !== null && received === expected;\n}\n","import { serve, type ServerType } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\nimport openBrowser from \"open\";\nimport { Result } from \"@praha/byethrow\";\nimport { createPkce } from \"./pkce.js\";\nimport { createState, verifyState } from \"./state.js\";\nimport {\n buildAuthorizationUrl,\n exchangeCode,\n verifyIdToken,\n type IdTokenClaims,\n type TokenExchangeError,\n type TokenSet,\n} from \"./oauth-client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;\n\nexport type AuthorizeError =\n | { type: \"callback_server_failed\" }\n | { type: \"callback_timeout\" }\n | { type: \"state_mismatch\" }\n | { type: \"user_denied\"; description?: string }\n | TokenExchangeError;\n\nexport type AuthorizeSuccess = {\n issuerUrl: string;\n tokenSet: TokenSet;\n claims: IdTokenClaims;\n};\n\ntype CallbackQuery = {\n code?: string;\n state?: string;\n error?: string;\n errorDescription?: string;\n};\n\nexport type AuthorizeParams = {\n issuerUrl: string;\n // ブラウザ起動を差し替え可能にして統合テストで「ブラウザ役」の fetch を流せるようにする。\n openBrowser?: (url: string) => Promise<void>;\n // ブラウザ起動に失敗したときに authorization URL を利用者へ手動提示するための通知口。\n onAuthorizationUrl?: (url: string) => void;\n timeoutMs?: number;\n};\n\nexport async function authorize(\n params: AuthorizeParams,\n): Promise<Result.Result<AuthorizeSuccess, AuthorizeError>> {\n const { issuerUrl } = params;\n const pkce = await createPkce();\n const state = createState();\n\n let resolveCallback: (query: CallbackQuery) => void = () => {};\n const callbackReceived = new Promise<CallbackQuery>((resolve) => {\n resolveCallback = resolve;\n });\n\n const app = new Hono();\n app.get(\"/callback\", (c) => {\n const query = c.req.query();\n resolveCallback({\n code: query.code,\n state: query.state,\n error: query.error,\n errorDescription: query.error_description,\n });\n return c.html(renderCallbackHtml(query.error == null));\n });\n\n let listened: { server: ServerType; port: number };\n try {\n listened = await listen(app);\n } catch {\n // loopback に bind できない環境ではログインを完遂できないため、待たずに失敗を返す。\n return Result.fail({ type: \"callback_server_failed\" });\n }\n const { server, port } = listened;\n\n try {\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n const authorizationUrl = buildAuthorizationUrl({\n issuerUrl,\n redirectUri,\n codeChallenge: pkce.codeChallenge,\n codeChallengeMethod: pkce.codeChallengeMethod,\n state,\n });\n\n const openImpl = params.openBrowser ?? openBrowser;\n await openImpl(authorizationUrl).catch(() => {\n params.onAuthorizationUrl?.(authorizationUrl);\n });\n\n const query = await waitForCallback(\n callbackReceived,\n params.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n if (query == null) {\n return Result.fail({ type: \"callback_timeout\" });\n }\n\n // 成功・失敗どちらの応答も Authorization Server は state を返すため、分岐する前に検証する。\n // 無関係なローカルリクエスト(?error=... 等)で進行中のログインを中断させないため。\n if (!verifyState(state, query.state ?? null)) {\n return Result.fail({ type: \"state_mismatch\" });\n }\n\n if (query.error != null) {\n if (query.error === \"access_denied\") {\n return Result.fail({\n type: \"user_denied\",\n description: query.errorDescription,\n });\n }\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: [query.error, query.errorDescription]\n .filter((part) => part != null)\n .join(\": \"),\n });\n }\n\n if (query.code == null) {\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: \"Authorization response did not include a code\",\n });\n }\n\n const exchanged = await exchangeCode({\n issuerUrl,\n code: query.code,\n redirectUri,\n codeVerifier: pkce.codeVerifier,\n });\n if (Result.isFailure(exchanged)) return exchanged;\n\n const claims = await verifyIdToken(issuerUrl, exchanged.value.idToken);\n\n return Result.succeed({ issuerUrl, tokenSet: exchanged.value, claims });\n } finally {\n await closeServer(server);\n }\n}\n\nasync function listen(\n app: Hono,\n): Promise<{ server: ServerType; port: number }> {\n return new Promise((resolve, reject) => {\n const server = serve(\n { fetch: app.fetch, hostname: \"127.0.0.1\", port: 0 },\n (info) => resolve({ server, port: info.port }),\n );\n server.on(\"error\", (error) => reject(error));\n });\n}\n\nasync function waitForCallback(\n callbackReceived: Promise<CallbackQuery>,\n timeoutMs: number,\n): Promise<CallbackQuery | undefined> {\n let timer: NodeJS.Timeout | undefined;\n const timedOut = new Promise<undefined>((resolve) => {\n timer = setTimeout(() => resolve(undefined), timeoutMs);\n });\n try {\n return await Promise.race([callbackReceived, timedOut]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\nasync function closeServer(server: ServerType): Promise<void> {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n}\n\nfunction renderCallbackHtml(success: boolean): string {\n const message = success\n ? \"Login successful. You can close this tab and return to the terminal.\"\n : \"Login failed. You can close this tab and return to the terminal.\";\n return `<!doctype html><html><head><meta charset=\"utf-8\"><title>Orizm CLI</title></head><body><p>${message}</p></body></html>`;\n}\n","import { Result } from \"@praha/byethrow\";\nimport { defineCommand } from \"../define-command.js\";\nimport { globalArgs } from \"../shared.js\";\nimport { CommandFailure } from \"../define-command.js\";\nimport { resolveEnv } from \"../../env.js\";\nimport { authorize, type AuthorizeError } from \"../../auth/authorize.js\";\nimport { FileTokenStore } from \"../../auth/token-store.js\";\nimport { notice } from \"../../ui/output.js\";\n\nexport default defineCommand({\n meta: {\n name: \"login\",\n description: \"Sign in to Orizm\",\n },\n args: { ...globalArgs },\n run: async () => {\n const env = resolveEnv();\n if (Result.isFailure(env)) {\n return Result.fail({\n message: \"Invalid Orizm environment configuration.\",\n });\n }\n const { issuerUrl } = env.value;\n\n notice(\n \"Opening your browser to complete sign-in. Finish within 5 minutes...\",\n );\n\n const result = await authorize({\n issuerUrl,\n onAuthorizationUrl: (url) =>\n notice(\n `Could not open a browser automatically. Open this URL:\\n${url}`,\n ),\n });\n if (Result.isFailure(result)) {\n return authorizeFailure(result.error);\n }\n\n const { tokenSet, claims } = result.value;\n await new FileTokenStore().set(issuerUrl, {\n accessToken: tokenSet.accessToken,\n refreshToken: tokenSet.refreshToken,\n idToken: tokenSet.idToken,\n expiresAt: tokenSet.expiresAt,\n scope: tokenSet.scope,\n subject: claims.subject,\n profile: { name: claims.name, email: claims.email },\n });\n\n const who = claims.email ?? claims.name ?? claims.subject;\n return Result.succeed({\n json: { issuer: issuerUrl, subject: claims.subject, email: claims.email },\n text: () => `Logged in as ${who}.`,\n });\n },\n});\n\nfunction authorizeFailure(\n error: AuthorizeError,\n): Result.Result<never, CommandFailure> {\n switch (error.type) {\n case \"callback_server_failed\":\n return Result.fail({\n message:\n \"Could not start the local sign-in listener. Check that your environment allows local connections, then try again.\",\n });\n case \"callback_timeout\":\n return Result.fail({\n message:\n \"Timed out before the browser sign-in completed. Run `orizm auth login` again.\",\n });\n case \"state_mismatch\":\n return Result.fail({\n message: \"Sign-in failed due to a security check. Please try again.\",\n });\n case \"user_denied\":\n return Result.fail({ message: \"Sign-in was denied.\" });\n case \"token_exchange_failed\":\n return Result.fail({\n message: `Sign-in failed: ${error.reason}. Please try again.`,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_cli_main = require('./cli/main.cjs');
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
|
-
const require_token_store = require('./token-store
|
|
3
|
+
const require_token_store = require('./token-store-BgWGhqq0.cjs');
|
|
4
4
|
const require_oauth_client = require('./oauth-client-CdD0evAV.cjs');
|
|
5
5
|
let _praha_byethrow = require("@praha/byethrow");
|
|
6
6
|
let _hono_node_server = require("@hono/node-server");
|
|
@@ -209,4 +209,4 @@ function authorizeFailure(error) {
|
|
|
209
209
|
|
|
210
210
|
//#endregion
|
|
211
211
|
exports.default = login_default;
|
|
212
|
-
//# sourceMappingURL=login-
|
|
212
|
+
//# sourceMappingURL=login-M1IF2MdC.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-2XcHd4wn.cjs","names":["Hono","Result","buildAuthorizationUrl","openBrowser","exchangeCode","verifyIdToken","defineCommand","globalArgs","resolveEnv","Result","notice","FileTokenStore"],"sources":["../src/cli/util/base64url.ts","../src/cli/util/random.ts","../src/cli/util/sha256.ts","../src/cli/auth/pkce.ts","../src/cli/auth/state.ts","../src/cli/auth/authorize.ts","../src/cli/commands/auth/login.ts"],"sourcesContent":["// Node 固有の Buffer ではなく Web 標準の btoa/atob を使う。特定ランタイムの API に\n// 縛られず、ブラウザ / Deno / Edge でもそのまま動く形にしておくため。\nexport function encodeBase64Url(bytes: Uint8Array): string {\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return globalThis\n .btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport function decodeBase64Url(text: string): Uint8Array {\n const base64 = text.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const binary = globalThis.atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","export function randomBytes(length: number): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n","export async function sha256(data: Uint8Array): Promise<Uint8Array> {\n // 新しい TS lib は Uint8Array を ArrayBufferLike でジェネリックにし digest が ArrayBuffer 裏付けを要求するため、\n // ArrayBuffer 裏付けの view にコピーしてから渡す。\n const view = new Uint8Array(data);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", view);\n return new Uint8Array(digest);\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\nimport { sha256 } from \"../util/sha256.js\";\n\nexport type Pkce = {\n codeVerifier: string;\n codeChallenge: string;\n codeChallengeMethod: \"S256\";\n};\n\nexport async function createPkce(): Promise<Pkce> {\n const codeVerifier = encodeBase64Url(randomBytes(32));\n const digest = await sha256(new TextEncoder().encode(codeVerifier));\n return {\n codeVerifier,\n codeChallenge: encodeBase64Url(digest),\n codeChallengeMethod: \"S256\",\n };\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\n\nexport function createState(): string {\n return encodeBase64Url(randomBytes(32));\n}\n\nexport function verifyState(\n expected: string,\n received: string | null,\n): boolean {\n return received !== null && received === expected;\n}\n","import { serve, type ServerType } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\nimport openBrowser from \"open\";\nimport { Result } from \"@praha/byethrow\";\nimport { createPkce } from \"./pkce.js\";\nimport { createState, verifyState } from \"./state.js\";\nimport {\n buildAuthorizationUrl,\n exchangeCode,\n verifyIdToken,\n type IdTokenClaims,\n type TokenExchangeError,\n type TokenSet,\n} from \"./oauth-client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;\n\nexport type AuthorizeError =\n | { type: \"callback_server_failed\" }\n | { type: \"callback_timeout\" }\n | { type: \"state_mismatch\" }\n | { type: \"user_denied\"; description?: string }\n | TokenExchangeError;\n\nexport type AuthorizeSuccess = {\n issuerUrl: string;\n tokenSet: TokenSet;\n claims: IdTokenClaims;\n};\n\ntype CallbackQuery = {\n code?: string;\n state?: string;\n error?: string;\n errorDescription?: string;\n};\n\nexport type AuthorizeParams = {\n issuerUrl: string;\n // ブラウザ起動を差し替え可能にして統合テストで「ブラウザ役」の fetch を流せるようにする。\n openBrowser?: (url: string) => Promise<void>;\n // ブラウザ起動に失敗したときに authorization URL を利用者へ手動提示するための通知口。\n onAuthorizationUrl?: (url: string) => void;\n timeoutMs?: number;\n};\n\nexport async function authorize(\n params: AuthorizeParams,\n): Promise<Result.Result<AuthorizeSuccess, AuthorizeError>> {\n const { issuerUrl } = params;\n const pkce = await createPkce();\n const state = createState();\n\n let resolveCallback: (query: CallbackQuery) => void = () => {};\n const callbackReceived = new Promise<CallbackQuery>((resolve) => {\n resolveCallback = resolve;\n });\n\n const app = new Hono();\n app.get(\"/callback\", (c) => {\n const query = c.req.query();\n resolveCallback({\n code: query.code,\n state: query.state,\n error: query.error,\n errorDescription: query.error_description,\n });\n return c.html(renderCallbackHtml(query.error == null));\n });\n\n let listened: { server: ServerType; port: number };\n try {\n listened = await listen(app);\n } catch {\n // loopback に bind できない環境ではログインを完遂できないため、待たずに失敗を返す。\n return Result.fail({ type: \"callback_server_failed\" });\n }\n const { server, port } = listened;\n\n try {\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n const authorizationUrl = buildAuthorizationUrl({\n issuerUrl,\n redirectUri,\n codeChallenge: pkce.codeChallenge,\n codeChallengeMethod: pkce.codeChallengeMethod,\n state,\n });\n\n const openImpl = params.openBrowser ?? openBrowser;\n await openImpl(authorizationUrl).catch(() => {\n params.onAuthorizationUrl?.(authorizationUrl);\n });\n\n const query = await waitForCallback(\n callbackReceived,\n params.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n if (query == null) {\n return Result.fail({ type: \"callback_timeout\" });\n }\n\n // 成功・失敗どちらの応答も Authorization Server は state を返すため、分岐する前に検証する。\n // 無関係なローカルリクエスト(?error=... 等)で進行中のログインを中断させないため。\n if (!verifyState(state, query.state ?? null)) {\n return Result.fail({ type: \"state_mismatch\" });\n }\n\n if (query.error != null) {\n if (query.error === \"access_denied\") {\n return Result.fail({\n type: \"user_denied\",\n description: query.errorDescription,\n });\n }\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: [query.error, query.errorDescription]\n .filter((part) => part != null)\n .join(\": \"),\n });\n }\n\n if (query.code == null) {\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: \"Authorization response did not include a code\",\n });\n }\n\n const exchanged = await exchangeCode({\n issuerUrl,\n code: query.code,\n redirectUri,\n codeVerifier: pkce.codeVerifier,\n });\n if (Result.isFailure(exchanged)) return exchanged;\n\n const claims = await verifyIdToken(issuerUrl, exchanged.value.idToken);\n\n return Result.succeed({ issuerUrl, tokenSet: exchanged.value, claims });\n } finally {\n await closeServer(server);\n }\n}\n\nasync function listen(\n app: Hono,\n): Promise<{ server: ServerType; port: number }> {\n return new Promise((resolve, reject) => {\n const server = serve(\n { fetch: app.fetch, hostname: \"127.0.0.1\", port: 0 },\n (info) => resolve({ server, port: info.port }),\n );\n server.on(\"error\", (error) => reject(error));\n });\n}\n\nasync function waitForCallback(\n callbackReceived: Promise<CallbackQuery>,\n timeoutMs: number,\n): Promise<CallbackQuery | undefined> {\n let timer: NodeJS.Timeout | undefined;\n const timedOut = new Promise<undefined>((resolve) => {\n timer = setTimeout(() => resolve(undefined), timeoutMs);\n });\n try {\n return await Promise.race([callbackReceived, timedOut]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\nasync function closeServer(server: ServerType): Promise<void> {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n}\n\nfunction renderCallbackHtml(success: boolean): string {\n const message = success\n ? \"Login successful. You can close this tab and return to the terminal.\"\n : \"Login failed. You can close this tab and return to the terminal.\";\n return `<!doctype html><html><head><meta charset=\"utf-8\"><title>Orizm CLI</title></head><body><p>${message}</p></body></html>`;\n}\n","import { Result } from \"@praha/byethrow\";\nimport { defineCommand } from \"../define-command.js\";\nimport { globalArgs } from \"../shared.js\";\nimport { CommandFailure } from \"../define-command.js\";\nimport { resolveEnv } from \"../../env.js\";\nimport { authorize, type AuthorizeError } from \"../../auth/authorize.js\";\nimport { FileTokenStore } from \"../../auth/token-store.js\";\nimport { notice } from \"../../ui/output.js\";\n\nexport default defineCommand({\n meta: {\n name: \"login\",\n description: \"Sign in to Orizm\",\n },\n args: { ...globalArgs },\n run: async () => {\n const env = resolveEnv();\n if (Result.isFailure(env)) {\n return Result.fail({\n message: \"Invalid Orizm environment configuration.\",\n });\n }\n const { issuerUrl } = env.value;\n\n notice(\n \"Opening your browser to complete sign-in. Finish within 5 minutes...\",\n );\n\n const result = await authorize({\n issuerUrl,\n onAuthorizationUrl: (url) =>\n notice(\n `Could not open a browser automatically. Open this URL:\\n${url}`,\n ),\n });\n if (Result.isFailure(result)) {\n return authorizeFailure(result.error);\n }\n\n const { tokenSet, claims } = result.value;\n await new FileTokenStore().set(issuerUrl, {\n accessToken: tokenSet.accessToken,\n refreshToken: tokenSet.refreshToken,\n idToken: tokenSet.idToken,\n expiresAt: tokenSet.expiresAt,\n scope: tokenSet.scope,\n subject: claims.subject,\n profile: { name: claims.name, email: claims.email },\n });\n\n const who = claims.email ?? claims.name ?? claims.subject;\n return Result.succeed({\n json: { issuer: issuerUrl, subject: claims.subject, email: claims.email },\n text: () => `Logged in as ${who}.`,\n });\n },\n});\n\nfunction authorizeFailure(\n error: AuthorizeError,\n): Result.Result<never, CommandFailure> {\n switch (error.type) {\n case \"callback_server_failed\":\n return Result.fail({\n message:\n \"Could not start the local sign-in listener. Check that your environment allows local connections, then try again.\",\n });\n case \"callback_timeout\":\n return Result.fail({\n message:\n \"Timed out before the browser sign-in completed. Run `orizm auth login` again.\",\n });\n case \"state_mismatch\":\n return Result.fail({\n message: \"Sign-in failed due to a security check. Please try again.\",\n });\n case \"user_denied\":\n return Result.fail({ message: \"Sign-in was denied.\" });\n case \"token_exchange_failed\":\n return Result.fail({\n message: `Sign-in failed: ${error.reason}. Please try again.`,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAEA,SAAgB,gBAAgB,OAA2B;CACzD,IAAI,SAAS;CACb,KAAK,MAAM,QAAQ,OACjB,UAAU,OAAO,aAAa,IAAI;CAEpC,OAAO,WACJ,KAAK,MAAM,CAAC,CACZ,QAAQ,OAAO,GAAG,CAAC,CACnB,QAAQ,OAAO,GAAG,CAAC,CACnB,QAAQ,OAAO,EAAE;AACtB;;;;ACZA,SAAgB,YAAY,QAA4B;CACtD,OAAO,WAAW,OAAO,gBAAgB,IAAI,WAAW,MAAM,CAAC;AACjE;;;;ACFA,eAAsB,OAAO,MAAuC;CAGlE,MAAM,OAAO,IAAI,WAAW,IAAI;CAChC,MAAM,SAAS,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,IAAI;CACpE,OAAO,IAAI,WAAW,MAAM;AAC9B;;;;ACIA,eAAsB,aAA4B;CAChD,MAAM,eAAe,gBAAgB,YAAY,EAAE,CAAC;CAEpD,OAAO;EACL;EACA,eAAe,gBAAgB,MAHZ,OAAO,IAAI,YAAY,CAAC,CAAC,OAAO,YAAY,CAAC,CAG3B;EACrC,qBAAqB;CACvB;AACF;;;;ACfA,SAAgB,cAAsB;CACpC,OAAO,gBAAgB,YAAY,EAAE,CAAC;AACxC;AAEA,SAAgB,YACd,UACA,UACS;CACT,OAAO,aAAa,QAAQ,aAAa;AAC3C;;;;ACGA,MAAM,qBAAqB,MAAS;AA+BpC,eAAsB,UACpB,QAC0D;CAC1D,MAAM,EAAE,cAAc;CACtB,MAAM,OAAO,MAAM,WAAW;CAC9B,MAAM,QAAQ,YAAY;CAE1B,IAAI,wBAAwD,CAAC;CAC7D,MAAM,mBAAmB,IAAI,SAAwB,YAAY;EAC/D,kBAAkB;CACpB,CAAC;CAED,MAAM,MAAM,IAAIA,UAAK;CACrB,IAAI,IAAI,cAAc,MAAM;EAC1B,MAAM,QAAQ,EAAE,IAAI,MAAM;EAC1B,gBAAgB;GACd,MAAM,MAAM;GACZ,OAAO,MAAM;GACb,OAAO,MAAM;GACb,kBAAkB,MAAM;EAC1B,CAAC;EACD,OAAO,EAAE,KAAK,mBAAmB,MAAM,SAAS,IAAI,CAAC;CACvD,CAAC;CAED,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,OAAO,GAAG;CAC7B,QAAQ;EAEN,OAAOC,uBAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;CACvD;CACA,MAAM,EAAE,QAAQ,SAAS;CAEzB,IAAI;EACF,MAAM,cAAc,oBAAoB,KAAK;EAC7C,MAAM,mBAAmBC,2CAAsB;GAC7C;GACA;GACA,eAAe,KAAK;GACpB,qBAAqB,KAAK;GAC1B;EACF,CAAC;EAGD,OADiB,OAAO,eAAeC,aACzB,CAAC,gBAAgB,CAAC,CAAC,YAAY;GAC3C,OAAO,qBAAqB,gBAAgB;EAC9C,CAAC;EAED,MAAM,QAAQ,MAAM,gBAClB,kBACA,OAAO,aAAa,kBACtB;EACA,IAAI,SAAS,MACX,OAAOF,uBAAO,KAAK,EAAE,MAAM,mBAAmB,CAAC;EAKjD,IAAI,CAAC,YAAY,OAAO,MAAM,SAAS,IAAI,GACzC,OAAOA,uBAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;EAG/C,IAAI,MAAM,SAAS,MAAM;GACvB,IAAI,MAAM,UAAU,iBAClB,OAAOA,uBAAO,KAAK;IACjB,MAAM;IACN,aAAa,MAAM;GACrB,CAAC;GAEH,OAAOA,uBAAO,KAAK;IACjB,MAAM;IACN,QAAQ,CAAC,MAAM,OAAO,MAAM,gBAAgB,CAAC,CAC1C,QAAQ,SAAS,QAAQ,IAAI,CAAC,CAC9B,KAAK,IAAI;GACd,CAAC;EACH;EAEA,IAAI,MAAM,QAAQ,MAChB,OAAOA,uBAAO,KAAK;GACjB,MAAM;GACN,QAAQ;EACV,CAAC;EAGH,MAAM,YAAY,MAAMG,kCAAa;GACnC;GACA,MAAM,MAAM;GACZ;GACA,cAAc,KAAK;EACrB,CAAC;EACD,IAAIH,uBAAO,UAAU,SAAS,GAAG,OAAO;EAExC,MAAM,SAAS,MAAMI,mCAAc,WAAW,UAAU,MAAM,OAAO;EAErE,OAAOJ,uBAAO,QAAQ;GAAE;GAAW,UAAU,UAAU;GAAO;EAAO,CAAC;CACxE,UAAU;EACR,MAAM,YAAY,MAAM;CAC1B;AACF;AAEA,eAAe,OACb,KAC+C;CAC/C,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,sCACJ;GAAE,OAAO,IAAI;GAAO,UAAU;GAAa,MAAM;EAAE,IAClD,SAAS,QAAQ;GAAE;GAAQ,MAAM,KAAK;EAAK,CAAC,CAC/C;EACA,OAAO,GAAG,UAAU,UAAU,OAAO,KAAK,CAAC;CAC7C,CAAC;AACH;AAEA,eAAe,gBACb,kBACA,WACoC;CACpC,IAAI;CACJ,MAAM,WAAW,IAAI,SAAoB,YAAY;EACnD,QAAQ,iBAAiB,QAAQ,MAAS,GAAG,SAAS;CACxD,CAAC;CACD,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK,CAAC,kBAAkB,QAAQ,CAAC;CACxD,UAAU;EACR,IAAI,SAAS,MAAM,aAAa,KAAK;CACvC;AACF;AAEA,eAAe,YAAY,QAAmC;CAC5D,MAAM,IAAI,SAAe,YAAY,OAAO,YAAY,QAAQ,CAAC,CAAC;AACpE;AAEA,SAAS,mBAAmB,SAA0B;CAIpD,OAAO,4FAHS,UACZ,yEACA,mEACuG;AAC7G;;;;AC7KA,oBAAeK,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM,EAAE,GAAGC,0BAAW;CACtB,KAAK,YAAY;EACf,MAAM,MAAMC,+BAAW;EACvB,IAAIC,uBAAO,UAAU,GAAG,GACtB,OAAOA,uBAAO,KAAK,EACjB,SAAS,2CACX,CAAC;EAEH,MAAM,EAAE,cAAc,IAAI;EAE1B,wBACE,sEACF;EAEA,MAAM,SAAS,MAAM,UAAU;GAC7B;GACA,qBAAqB,QACnBC,wBACE,2DAA2D,KAC7D;EACJ,CAAC;EACD,IAAID,uBAAO,UAAU,MAAM,GACzB,OAAO,iBAAiB,OAAO,KAAK;EAGtC,MAAM,EAAE,UAAU,WAAW,OAAO;EACpC,MAAM,IAAIE,mCAAe,CAAC,CAAC,IAAI,WAAW;GACxC,aAAa,SAAS;GACtB,cAAc,SAAS;GACvB,SAAS,SAAS;GAClB,WAAW,SAAS;GACpB,OAAO,SAAS;GAChB,SAAS,OAAO;GAChB,SAAS;IAAE,MAAM,OAAO;IAAM,OAAO,OAAO;GAAM;EACpD,CAAC;EAED,MAAM,MAAM,OAAO,SAAS,OAAO,QAAQ,OAAO;EAClD,OAAOF,uBAAO,QAAQ;GACpB,MAAM;IAAE,QAAQ;IAAW,SAAS,OAAO;IAAS,OAAO,OAAO;GAAM;GACxE,YAAY,gBAAgB,IAAI;EAClC,CAAC;CACH;AACF,CAAC;AAED,SAAS,iBACP,OACsC;CACtC,QAAQ,MAAM,MAAd;EACE,KAAK,0BACH,OAAOA,uBAAO,KAAK,EACjB,SACE,oHACJ,CAAC;EACH,KAAK,oBACH,OAAOA,uBAAO,KAAK,EACjB,SACE,gFACJ,CAAC;EACH,KAAK,kBACH,OAAOA,uBAAO,KAAK,EACjB,SAAS,4DACX,CAAC;EACH,KAAK,eACH,OAAOA,uBAAO,KAAK,EAAE,SAAS,sBAAsB,CAAC;EACvD,KAAK,yBACH,OAAOA,uBAAO,KAAK,EACjB,SAAS,mBAAmB,MAAM,OAAO,qBAC3C,CAAC;CACL;AACF"}
|
|
1
|
+
{"version":3,"file":"login-M1IF2MdC.cjs","names":["Hono","Result","buildAuthorizationUrl","openBrowser","exchangeCode","verifyIdToken","defineCommand","globalArgs","resolveEnv","Result","notice","FileTokenStore"],"sources":["../src/cli/util/base64url.ts","../src/cli/util/random.ts","../src/cli/util/sha256.ts","../src/cli/auth/pkce.ts","../src/cli/auth/state.ts","../src/cli/auth/authorize.ts","../src/cli/commands/auth/login.ts"],"sourcesContent":["// Node 固有の Buffer ではなく Web 標準の btoa/atob を使う。特定ランタイムの API に\n// 縛られず、ブラウザ / Deno / Edge でもそのまま動く形にしておくため。\nexport function encodeBase64Url(bytes: Uint8Array): string {\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return globalThis\n .btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport function decodeBase64Url(text: string): Uint8Array {\n const base64 = text.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const binary = globalThis.atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","export function randomBytes(length: number): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(length));\n}\n","export async function sha256(data: Uint8Array): Promise<Uint8Array> {\n // 新しい TS lib は Uint8Array を ArrayBufferLike でジェネリックにし digest が ArrayBuffer 裏付けを要求するため、\n // ArrayBuffer 裏付けの view にコピーしてから渡す。\n const view = new Uint8Array(data);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", view);\n return new Uint8Array(digest);\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\nimport { sha256 } from \"../util/sha256.js\";\n\nexport type Pkce = {\n codeVerifier: string;\n codeChallenge: string;\n codeChallengeMethod: \"S256\";\n};\n\nexport async function createPkce(): Promise<Pkce> {\n const codeVerifier = encodeBase64Url(randomBytes(32));\n const digest = await sha256(new TextEncoder().encode(codeVerifier));\n return {\n codeVerifier,\n codeChallenge: encodeBase64Url(digest),\n codeChallengeMethod: \"S256\",\n };\n}\n","import { encodeBase64Url } from \"../util/base64url.js\";\nimport { randomBytes } from \"../util/random.js\";\n\nexport function createState(): string {\n return encodeBase64Url(randomBytes(32));\n}\n\nexport function verifyState(\n expected: string,\n received: string | null,\n): boolean {\n return received !== null && received === expected;\n}\n","import { serve, type ServerType } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\nimport openBrowser from \"open\";\nimport { Result } from \"@praha/byethrow\";\nimport { createPkce } from \"./pkce.js\";\nimport { createState, verifyState } from \"./state.js\";\nimport {\n buildAuthorizationUrl,\n exchangeCode,\n verifyIdToken,\n type IdTokenClaims,\n type TokenExchangeError,\n type TokenSet,\n} from \"./oauth-client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;\n\nexport type AuthorizeError =\n | { type: \"callback_server_failed\" }\n | { type: \"callback_timeout\" }\n | { type: \"state_mismatch\" }\n | { type: \"user_denied\"; description?: string }\n | TokenExchangeError;\n\nexport type AuthorizeSuccess = {\n issuerUrl: string;\n tokenSet: TokenSet;\n claims: IdTokenClaims;\n};\n\ntype CallbackQuery = {\n code?: string;\n state?: string;\n error?: string;\n errorDescription?: string;\n};\n\nexport type AuthorizeParams = {\n issuerUrl: string;\n // ブラウザ起動を差し替え可能にして統合テストで「ブラウザ役」の fetch を流せるようにする。\n openBrowser?: (url: string) => Promise<void>;\n // ブラウザ起動に失敗したときに authorization URL を利用者へ手動提示するための通知口。\n onAuthorizationUrl?: (url: string) => void;\n timeoutMs?: number;\n};\n\nexport async function authorize(\n params: AuthorizeParams,\n): Promise<Result.Result<AuthorizeSuccess, AuthorizeError>> {\n const { issuerUrl } = params;\n const pkce = await createPkce();\n const state = createState();\n\n let resolveCallback: (query: CallbackQuery) => void = () => {};\n const callbackReceived = new Promise<CallbackQuery>((resolve) => {\n resolveCallback = resolve;\n });\n\n const app = new Hono();\n app.get(\"/callback\", (c) => {\n const query = c.req.query();\n resolveCallback({\n code: query.code,\n state: query.state,\n error: query.error,\n errorDescription: query.error_description,\n });\n return c.html(renderCallbackHtml(query.error == null));\n });\n\n let listened: { server: ServerType; port: number };\n try {\n listened = await listen(app);\n } catch {\n // loopback に bind できない環境ではログインを完遂できないため、待たずに失敗を返す。\n return Result.fail({ type: \"callback_server_failed\" });\n }\n const { server, port } = listened;\n\n try {\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n const authorizationUrl = buildAuthorizationUrl({\n issuerUrl,\n redirectUri,\n codeChallenge: pkce.codeChallenge,\n codeChallengeMethod: pkce.codeChallengeMethod,\n state,\n });\n\n const openImpl = params.openBrowser ?? openBrowser;\n await openImpl(authorizationUrl).catch(() => {\n params.onAuthorizationUrl?.(authorizationUrl);\n });\n\n const query = await waitForCallback(\n callbackReceived,\n params.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n );\n if (query == null) {\n return Result.fail({ type: \"callback_timeout\" });\n }\n\n // 成功・失敗どちらの応答も Authorization Server は state を返すため、分岐する前に検証する。\n // 無関係なローカルリクエスト(?error=... 等)で進行中のログインを中断させないため。\n if (!verifyState(state, query.state ?? null)) {\n return Result.fail({ type: \"state_mismatch\" });\n }\n\n if (query.error != null) {\n if (query.error === \"access_denied\") {\n return Result.fail({\n type: \"user_denied\",\n description: query.errorDescription,\n });\n }\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: [query.error, query.errorDescription]\n .filter((part) => part != null)\n .join(\": \"),\n });\n }\n\n if (query.code == null) {\n return Result.fail({\n type: \"token_exchange_failed\",\n reason: \"Authorization response did not include a code\",\n });\n }\n\n const exchanged = await exchangeCode({\n issuerUrl,\n code: query.code,\n redirectUri,\n codeVerifier: pkce.codeVerifier,\n });\n if (Result.isFailure(exchanged)) return exchanged;\n\n const claims = await verifyIdToken(issuerUrl, exchanged.value.idToken);\n\n return Result.succeed({ issuerUrl, tokenSet: exchanged.value, claims });\n } finally {\n await closeServer(server);\n }\n}\n\nasync function listen(\n app: Hono,\n): Promise<{ server: ServerType; port: number }> {\n return new Promise((resolve, reject) => {\n const server = serve(\n { fetch: app.fetch, hostname: \"127.0.0.1\", port: 0 },\n (info) => resolve({ server, port: info.port }),\n );\n server.on(\"error\", (error) => reject(error));\n });\n}\n\nasync function waitForCallback(\n callbackReceived: Promise<CallbackQuery>,\n timeoutMs: number,\n): Promise<CallbackQuery | undefined> {\n let timer: NodeJS.Timeout | undefined;\n const timedOut = new Promise<undefined>((resolve) => {\n timer = setTimeout(() => resolve(undefined), timeoutMs);\n });\n try {\n return await Promise.race([callbackReceived, timedOut]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\nasync function closeServer(server: ServerType): Promise<void> {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n}\n\nfunction renderCallbackHtml(success: boolean): string {\n const message = success\n ? \"Login successful. You can close this tab and return to the terminal.\"\n : \"Login failed. You can close this tab and return to the terminal.\";\n return `<!doctype html><html><head><meta charset=\"utf-8\"><title>Orizm CLI</title></head><body><p>${message}</p></body></html>`;\n}\n","import { Result } from \"@praha/byethrow\";\nimport { defineCommand } from \"../define-command.js\";\nimport { globalArgs } from \"../shared.js\";\nimport { CommandFailure } from \"../define-command.js\";\nimport { resolveEnv } from \"../../env.js\";\nimport { authorize, type AuthorizeError } from \"../../auth/authorize.js\";\nimport { FileTokenStore } from \"../../auth/token-store.js\";\nimport { notice } from \"../../ui/output.js\";\n\nexport default defineCommand({\n meta: {\n name: \"login\",\n description: \"Sign in to Orizm\",\n },\n args: { ...globalArgs },\n run: async () => {\n const env = resolveEnv();\n if (Result.isFailure(env)) {\n return Result.fail({\n message: \"Invalid Orizm environment configuration.\",\n });\n }\n const { issuerUrl } = env.value;\n\n notice(\n \"Opening your browser to complete sign-in. Finish within 5 minutes...\",\n );\n\n const result = await authorize({\n issuerUrl,\n onAuthorizationUrl: (url) =>\n notice(\n `Could not open a browser automatically. Open this URL:\\n${url}`,\n ),\n });\n if (Result.isFailure(result)) {\n return authorizeFailure(result.error);\n }\n\n const { tokenSet, claims } = result.value;\n await new FileTokenStore().set(issuerUrl, {\n accessToken: tokenSet.accessToken,\n refreshToken: tokenSet.refreshToken,\n idToken: tokenSet.idToken,\n expiresAt: tokenSet.expiresAt,\n scope: tokenSet.scope,\n subject: claims.subject,\n profile: { name: claims.name, email: claims.email },\n });\n\n const who = claims.email ?? claims.name ?? claims.subject;\n return Result.succeed({\n json: { issuer: issuerUrl, subject: claims.subject, email: claims.email },\n text: () => `Logged in as ${who}.`,\n });\n },\n});\n\nfunction authorizeFailure(\n error: AuthorizeError,\n): Result.Result<never, CommandFailure> {\n switch (error.type) {\n case \"callback_server_failed\":\n return Result.fail({\n message:\n \"Could not start the local sign-in listener. Check that your environment allows local connections, then try again.\",\n });\n case \"callback_timeout\":\n return Result.fail({\n message:\n \"Timed out before the browser sign-in completed. Run `orizm auth login` again.\",\n });\n case \"state_mismatch\":\n return Result.fail({\n message: \"Sign-in failed due to a security check. Please try again.\",\n });\n case \"user_denied\":\n return Result.fail({ message: \"Sign-in was denied.\" });\n case \"token_exchange_failed\":\n return Result.fail({\n message: `Sign-in failed: ${error.reason}. Please try again.`,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_cli_main = require('./cli/main.cjs');
|
|
2
2
|
const require_shared = require('./shared-DHRPzzKl.cjs');
|
|
3
|
-
const require_token_store = require('./token-store
|
|
3
|
+
const require_token_store = require('./token-store-BgWGhqq0.cjs');
|
|
4
4
|
const require_oauth_client = require('./oauth-client-CdD0evAV.cjs');
|
|
5
5
|
let _praha_byethrow = require("@praha/byethrow");
|
|
6
6
|
|
|
@@ -32,4 +32,4 @@ var logout_default = require_cli_main.defineCommand({
|
|
|
32
32
|
|
|
33
33
|
//#endregion
|
|
34
34
|
exports.default = logout_default;
|
|
35
|
-
//# sourceMappingURL=logout-
|
|
35
|
+
//# sourceMappingURL=logout-BCSfFgPz.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout-
|
|
1
|
+
{"version":3,"file":"logout-BCSfFgPz.cjs","names":["defineCommand","globalArgs","resolveEnv","Result","FileTokenStore","revokeToken"],"sources":["../src/cli/commands/auth/logout.ts"],"sourcesContent":["import { Result } from \"@praha/byethrow\";\nimport { defineCommand } from \"../define-command.js\";\nimport { globalArgs } from \"../shared.js\";\nimport { resolveEnv } from \"../../env.js\";\nimport { FileTokenStore } from \"../../auth/token-store.js\";\nimport { revokeToken } from \"../../auth/oauth-client.js\";\n\nexport default defineCommand({\n meta: {\n name: \"logout\",\n description: \"Sign out of Orizm\",\n },\n args: { ...globalArgs },\n run: async () => {\n const env = resolveEnv();\n if (Result.isFailure(env)) {\n return Result.fail({\n message: \"Invalid Orizm environment configuration.\",\n });\n }\n const { issuerUrl } = env.value;\n\n const store = new FileTokenStore();\n const entry = await store.get(issuerUrl);\n if (entry === undefined) {\n return Result.succeed({\n json: { loggedOut: false },\n text: () => \"You are not logged in.\",\n });\n }\n\n // Hydra 側 revoke は best-effort。失敗してもローカル破棄でログアウトは成立させる。\n await revokeToken(issuerUrl, entry.refreshToken).catch(() => undefined);\n await store.remove(issuerUrl);\n\n return Result.succeed({\n json: { loggedOut: true },\n text: () => \"Logged out.\",\n });\n },\n});\n"],"mappings":";;;;;;;AAOA,qBAAeA,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM,EAAE,GAAGC,0BAAW;CACtB,KAAK,YAAY;EACf,MAAM,MAAMC,+BAAW;EACvB,IAAIC,uBAAO,UAAU,GAAG,GACtB,OAAOA,uBAAO,KAAK,EACjB,SAAS,2CACX,CAAC;EAEH,MAAM,EAAE,cAAc,IAAI;EAE1B,MAAM,QAAQ,IAAIC,mCAAe;EACjC,MAAM,QAAQ,MAAM,MAAM,IAAI,SAAS;EACvC,IAAI,UAAU,QACZ,OAAOD,uBAAO,QAAQ;GACpB,MAAM,EAAE,WAAW,MAAM;GACzB,YAAY;EACd,CAAC;EAIH,MAAME,iCAAY,WAAW,MAAM,YAAY,CAAC,CAAC,YAAY,MAAS;EACtE,MAAM,MAAM,OAAO,SAAS;EAE5B,OAAOF,uBAAO,QAAQ;GACpB,MAAM,EAAE,WAAW,KAAK;GACxB,YAAY;EACd,CAAC;CACH;AACF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as defineCommand } from "./cli/main.mjs";
|
|
2
2
|
import { i as globalArgs } from "./shared-CZZimGxc.mjs";
|
|
3
|
-
import { n as resolveEnv, t as FileTokenStore } from "./token-store-
|
|
3
|
+
import { n as resolveEnv, t as FileTokenStore } from "./token-store-C2r7cFA-.mjs";
|
|
4
4
|
import { i as revokeToken } from "./oauth-client-QHuDa4fW.mjs";
|
|
5
5
|
import { Result } from "@praha/byethrow";
|
|
6
6
|
|
|
@@ -32,4 +32,4 @@ var logout_default = defineCommand({
|
|
|
32
32
|
|
|
33
33
|
//#endregion
|
|
34
34
|
export { logout_default as default };
|
|
35
|
-
//# sourceMappingURL=logout-
|
|
35
|
+
//# sourceMappingURL=logout-DFzQCQKe.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout-
|
|
1
|
+
{"version":3,"file":"logout-DFzQCQKe.mjs","names":[],"sources":["../src/cli/commands/auth/logout.ts"],"sourcesContent":["import { Result } from \"@praha/byethrow\";\nimport { defineCommand } from \"../define-command.js\";\nimport { globalArgs } from \"../shared.js\";\nimport { resolveEnv } from \"../../env.js\";\nimport { FileTokenStore } from \"../../auth/token-store.js\";\nimport { revokeToken } from \"../../auth/oauth-client.js\";\n\nexport default defineCommand({\n meta: {\n name: \"logout\",\n description: \"Sign out of Orizm\",\n },\n args: { ...globalArgs },\n run: async () => {\n const env = resolveEnv();\n if (Result.isFailure(env)) {\n return Result.fail({\n message: \"Invalid Orizm environment configuration.\",\n });\n }\n const { issuerUrl } = env.value;\n\n const store = new FileTokenStore();\n const entry = await store.get(issuerUrl);\n if (entry === undefined) {\n return Result.succeed({\n json: { loggedOut: false },\n text: () => \"You are not logged in.\",\n });\n }\n\n // Hydra 側 revoke は best-effort。失敗してもローカル破棄でログアウトは成立させる。\n await revokeToken(issuerUrl, entry.refreshToken).catch(() => undefined);\n await store.remove(issuerUrl);\n\n return Result.succeed({\n json: { loggedOut: true },\n text: () => \"Logged out.\",\n });\n },\n});\n"],"mappings":";;;;;;;AAOA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM,EAAE,GAAG,WAAW;CACtB,KAAK,YAAY;EACf,MAAM,MAAM,WAAW;EACvB,IAAI,OAAO,UAAU,GAAG,GACtB,OAAO,OAAO,KAAK,EACjB,SAAS,2CACX,CAAC;EAEH,MAAM,EAAE,cAAc,IAAI;EAE1B,MAAM,QAAQ,IAAI,eAAe;EACjC,MAAM,QAAQ,MAAM,MAAM,IAAI,SAAS;EACvC,IAAI,UAAU,QACZ,OAAO,OAAO,QAAQ;GACpB,MAAM,EAAE,WAAW,MAAM;GACzB,YAAY;EACd,CAAC;EAIH,MAAM,YAAY,WAAW,MAAM,YAAY,CAAC,CAAC,YAAY,MAAS;EACtE,MAAM,MAAM,OAAO,SAAS;EAE5B,OAAO,OAAO,QAAQ;GACpB,MAAM,EAAE,WAAW,KAAK;GACxB,YAAY;EACd,CAAC;CACH;AACF,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const require_cli_main = require('./cli/main.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/cli/commands/key/management/index.ts
|
|
4
|
+
var management_default = require_cli_main.defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "management",
|
|
7
|
+
description: "Manage management keys (content CRUD with RBAC)"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
list: () => Promise.resolve().then(() => require("./list-CMWXO4nB.cjs")).then((m) => m.default),
|
|
11
|
+
create: () => Promise.resolve().then(() => require("./create-tWGEtI3t.cjs")).then((m) => m.default),
|
|
12
|
+
update: () => Promise.resolve().then(() => require("./update-BlUwNhLA.cjs")).then((m) => m.default),
|
|
13
|
+
delete: () => Promise.resolve().then(() => require("./delete-DGrSMqOt.cjs")).then((m) => m.default)
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
exports.default = management_default;
|
|
19
|
+
//# sourceMappingURL=management-C1p-Hm2Z.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"management-
|
|
1
|
+
{"version":3,"file":"management-C1p-Hm2Z.cjs","names":["defineCommand"],"sources":["../src/cli/commands/key/management/index.ts"],"sourcesContent":["import { defineCommand } from \"../../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"management\",\n description: \"Manage management keys (content CRUD with RBAC)\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n create: () => import(\"./create.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,yBAAeA,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,iDAAY,wBAAoB,MAAM,MAAM,EAAE,OAAO;EACrD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
|
|
@@ -7,13 +7,13 @@ var management_default = defineCommand({
|
|
|
7
7
|
description: "Manage management keys (content CRUD with RBAC)"
|
|
8
8
|
},
|
|
9
9
|
subCommands: {
|
|
10
|
-
list: () => import("./list-
|
|
11
|
-
create: () => import("./create-
|
|
12
|
-
update: () => import("./update-
|
|
13
|
-
delete: () => import("./delete-
|
|
10
|
+
list: () => import("./list-MWD4huKP.mjs").then((m) => m.default),
|
|
11
|
+
create: () => import("./create-fweRd0UB.mjs").then((m) => m.default),
|
|
12
|
+
update: () => import("./update-Dy1BOnTB.mjs").then((m) => m.default),
|
|
13
|
+
delete: () => import("./delete-CiWkGnog.mjs").then((m) => m.default)
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
//#endregion
|
|
18
18
|
export { management_default as default };
|
|
19
|
-
//# sourceMappingURL=management-
|
|
19
|
+
//# sourceMappingURL=management-h4yE09a6.mjs.map
|