@ttctl/cli 0.0.0 → 0.1.0-rc.1
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 +44 -9
- package/dist/commands/applications/index.d.ts +21 -0
- package/dist/commands/applications/index.d.ts.map +1 -0
- package/dist/commands/applications/index.js +87 -0
- package/dist/commands/applications/index.js.map +1 -0
- package/dist/commands/applications/list.d.ts +55 -0
- package/dist/commands/applications/list.d.ts.map +1 -0
- package/dist/commands/applications/list.js +106 -0
- package/dist/commands/applications/list.js.map +1 -0
- package/dist/commands/applications/shared.d.ts +14 -0
- package/dist/commands/applications/shared.d.ts.map +1 -0
- package/dist/commands/applications/shared.js +19 -0
- package/dist/commands/applications/shared.js.map +1 -0
- package/dist/commands/applications/show.d.ts +51 -0
- package/dist/commands/applications/show.d.ts.map +1 -0
- package/dist/commands/applications/show.js +154 -0
- package/dist/commands/applications/show.js.map +1 -0
- package/dist/commands/applications/stats.d.ts +42 -0
- package/dist/commands/applications/stats.d.ts.map +1 -0
- package/dist/commands/applications/stats.js +69 -0
- package/dist/commands/applications/stats.js.map +1 -0
- package/dist/commands/auth/index.d.ts +17 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +69 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/init.d.ts +98 -0
- package/dist/commands/auth/init.d.ts.map +1 -0
- package/dist/commands/auth/init.js +387 -0
- package/dist/commands/auth/init.js.map +1 -0
- package/dist/commands/auth/signin.d.ts +81 -0
- package/dist/commands/auth/signin.d.ts.map +1 -0
- package/dist/commands/auth/signin.js +145 -0
- package/dist/commands/auth/signin.js.map +1 -0
- package/dist/commands/auth/signout.d.ts +133 -0
- package/dist/commands/auth/signout.d.ts.map +1 -0
- package/dist/commands/auth/signout.js +172 -0
- package/dist/commands/auth/signout.js.map +1 -0
- package/dist/commands/auth/status.d.ts +62 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +98 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/availability/allocated-hours.d.ts +27 -0
- package/dist/commands/availability/allocated-hours.d.ts.map +1 -0
- package/dist/commands/availability/allocated-hours.js +61 -0
- package/dist/commands/availability/allocated-hours.js.map +1 -0
- package/dist/commands/availability/index.d.ts +30 -0
- package/dist/commands/availability/index.d.ts.map +1 -0
- package/dist/commands/availability/index.js +124 -0
- package/dist/commands/availability/index.js.map +1 -0
- package/dist/commands/availability/shared.d.ts +11 -0
- package/dist/commands/availability/shared.d.ts.map +1 -0
- package/dist/commands/availability/shared.js +30 -0
- package/dist/commands/availability/shared.js.map +1 -0
- package/dist/commands/availability/show.d.ts +32 -0
- package/dist/commands/availability/show.d.ts.map +1 -0
- package/dist/commands/availability/show.js +86 -0
- package/dist/commands/availability/show.js.map +1 -0
- package/dist/commands/availability/working-hours.d.ts +53 -0
- package/dist/commands/availability/working-hours.d.ts.map +1 -0
- package/dist/commands/availability/working-hours.js +151 -0
- package/dist/commands/availability/working-hours.js.map +1 -0
- package/dist/commands/contracts/index.d.ts +69 -0
- package/dist/commands/contracts/index.d.ts.map +1 -0
- package/dist/commands/contracts/index.js +198 -0
- package/dist/commands/contracts/index.js.map +1 -0
- package/dist/commands/engagements/breaks.d.ts +81 -0
- package/dist/commands/engagements/breaks.d.ts.map +1 -0
- package/dist/commands/engagements/breaks.js +229 -0
- package/dist/commands/engagements/breaks.js.map +1 -0
- package/dist/commands/engagements/index.d.ts +29 -0
- package/dist/commands/engagements/index.d.ts.map +1 -0
- package/dist/commands/engagements/index.js +172 -0
- package/dist/commands/engagements/index.js.map +1 -0
- package/dist/commands/engagements/list.d.ts +49 -0
- package/dist/commands/engagements/list.d.ts.map +1 -0
- package/dist/commands/engagements/list.js +95 -0
- package/dist/commands/engagements/list.js.map +1 -0
- package/dist/commands/engagements/shared.d.ts +10 -0
- package/dist/commands/engagements/shared.d.ts.map +1 -0
- package/dist/commands/engagements/shared.js +31 -0
- package/dist/commands/engagements/shared.js.map +1 -0
- package/dist/commands/engagements/show.d.ts +19 -0
- package/dist/commands/engagements/show.d.ts.map +1 -0
- package/dist/commands/engagements/show.js +150 -0
- package/dist/commands/engagements/show.js.map +1 -0
- package/dist/commands/engagements/stats.d.ts +24 -0
- package/dist/commands/engagements/stats.d.ts.map +1 -0
- package/dist/commands/engagements/stats.js +51 -0
- package/dist/commands/engagements/stats.js.map +1 -0
- package/dist/commands/jobs/index.d.ts +49 -0
- package/dist/commands/jobs/index.d.ts.map +1 -0
- package/dist/commands/jobs/index.js +304 -0
- package/dist/commands/jobs/index.js.map +1 -0
- package/dist/commands/jobs/interest.d.ts +65 -0
- package/dist/commands/jobs/interest.d.ts.map +1 -0
- package/dist/commands/jobs/interest.js +172 -0
- package/dist/commands/jobs/interest.js.map +1 -0
- package/dist/commands/jobs/list.d.ts +81 -0
- package/dist/commands/jobs/list.d.ts.map +1 -0
- package/dist/commands/jobs/list.js +157 -0
- package/dist/commands/jobs/list.js.map +1 -0
- package/dist/commands/jobs/search.d.ts +71 -0
- package/dist/commands/jobs/search.d.ts.map +1 -0
- package/dist/commands/jobs/search.js +163 -0
- package/dist/commands/jobs/search.js.map +1 -0
- package/dist/commands/jobs/shared.d.ts +79 -0
- package/dist/commands/jobs/shared.d.ts.map +1 -0
- package/dist/commands/jobs/shared.js +133 -0
- package/dist/commands/jobs/shared.js.map +1 -0
- package/dist/commands/jobs/show.d.ts +20 -0
- package/dist/commands/jobs/show.d.ts.map +1 -0
- package/dist/commands/jobs/show.js +135 -0
- package/dist/commands/jobs/show.js.map +1 -0
- package/dist/commands/payments/index.d.ts +34 -0
- package/dist/commands/payments/index.d.ts.map +1 -0
- package/dist/commands/payments/index.js +160 -0
- package/dist/commands/payments/index.js.map +1 -0
- package/dist/commands/payments/methods.d.ts +17 -0
- package/dist/commands/payments/methods.d.ts.map +1 -0
- package/dist/commands/payments/methods.js +79 -0
- package/dist/commands/payments/methods.js.map +1 -0
- package/dist/commands/payments/payouts.d.ts +44 -0
- package/dist/commands/payments/payouts.d.ts.map +1 -0
- package/dist/commands/payments/payouts.js +147 -0
- package/dist/commands/payments/payouts.js.map +1 -0
- package/dist/commands/payments/rate.d.ts +48 -0
- package/dist/commands/payments/rate.d.ts.map +1 -0
- package/dist/commands/payments/rate.js +229 -0
- package/dist/commands/payments/rate.js.map +1 -0
- package/dist/commands/payments/shared.d.ts +10 -0
- package/dist/commands/payments/shared.d.ts.map +1 -0
- package/dist/commands/payments/shared.js +27 -0
- package/dist/commands/payments/shared.js.map +1 -0
- package/dist/commands/profile/basic/index.d.ts +18 -0
- package/dist/commands/profile/basic/index.d.ts.map +1 -0
- package/dist/commands/profile/basic/index.js +79 -0
- package/dist/commands/profile/basic/index.js.map +1 -0
- package/dist/commands/profile/basic/photo-show.d.ts +28 -0
- package/dist/commands/profile/basic/photo-show.d.ts.map +1 -0
- package/dist/commands/profile/basic/photo-show.js +112 -0
- package/dist/commands/profile/basic/photo-show.js.map +1 -0
- package/dist/commands/profile/basic/photo-upload.d.ts +10 -0
- package/dist/commands/profile/basic/photo-upload.d.ts.map +1 -0
- package/dist/commands/profile/basic/photo-upload.js +61 -0
- package/dist/commands/profile/basic/photo-upload.js.map +1 -0
- package/dist/commands/profile/basic/set.d.ts +54 -0
- package/dist/commands/profile/basic/set.d.ts.map +1 -0
- package/dist/commands/profile/basic/set.js +174 -0
- package/dist/commands/profile/basic/set.js.map +1 -0
- package/dist/commands/profile/basic/show.d.ts +95 -0
- package/dist/commands/profile/basic/show.d.ts.map +1 -0
- package/dist/commands/profile/basic/show.js +310 -0
- package/dist/commands/profile/basic/show.js.map +1 -0
- package/dist/commands/profile/certifications/index.d.ts +31 -0
- package/dist/commands/profile/certifications/index.d.ts.map +1 -0
- package/dist/commands/profile/certifications/index.js +298 -0
- package/dist/commands/profile/certifications/index.js.map +1 -0
- package/dist/commands/profile/education/index.d.ts +28 -0
- package/dist/commands/profile/education/index.d.ts.map +1 -0
- package/dist/commands/profile/education/index.js +287 -0
- package/dist/commands/profile/education/index.js.map +1 -0
- package/dist/commands/profile/employment/index.d.ts +40 -0
- package/dist/commands/profile/employment/index.d.ts.map +1 -0
- package/dist/commands/profile/employment/index.js +364 -0
- package/dist/commands/profile/employment/index.js.map +1 -0
- package/dist/commands/profile/external/_shared.d.ts +35 -0
- package/dist/commands/profile/external/_shared.d.ts.map +1 -0
- package/dist/commands/profile/external/_shared.js +59 -0
- package/dist/commands/profile/external/_shared.js.map +1 -0
- package/dist/commands/profile/external/advanced-wizard-show.d.ts +15 -0
- package/dist/commands/profile/external/advanced-wizard-show.d.ts.map +1 -0
- package/dist/commands/profile/external/advanced-wizard-show.js +82 -0
- package/dist/commands/profile/external/advanced-wizard-show.js.map +1 -0
- package/dist/commands/profile/external/custom-requirements-set.d.ts +32 -0
- package/dist/commands/profile/external/custom-requirements-set.d.ts.map +1 -0
- package/dist/commands/profile/external/custom-requirements-set.js +116 -0
- package/dist/commands/profile/external/custom-requirements-set.js.map +1 -0
- package/dist/commands/profile/external/custom-requirements-show.d.ts +16 -0
- package/dist/commands/profile/external/custom-requirements-show.d.ts.map +1 -0
- package/dist/commands/profile/external/custom-requirements-show.js +84 -0
- package/dist/commands/profile/external/custom-requirements-show.js.map +1 -0
- package/dist/commands/profile/external/index.d.ts +20 -0
- package/dist/commands/profile/external/index.d.ts.map +1 -0
- package/dist/commands/profile/external/index.js +102 -0
- package/dist/commands/profile/external/index.js.map +1 -0
- package/dist/commands/profile/external/readiness.d.ts +15 -0
- package/dist/commands/profile/external/readiness.d.ts.map +1 -0
- package/dist/commands/profile/external/readiness.js +104 -0
- package/dist/commands/profile/external/readiness.js.map +1 -0
- package/dist/commands/profile/external/recommendations.d.ts +17 -0
- package/dist/commands/profile/external/recommendations.d.ts.map +1 -0
- package/dist/commands/profile/external/recommendations.js +97 -0
- package/dist/commands/profile/external/recommendations.js.map +1 -0
- package/dist/commands/profile/external/update.d.ts +32 -0
- package/dist/commands/profile/external/update.d.ts.map +1 -0
- package/dist/commands/profile/external/update.js +118 -0
- package/dist/commands/profile/external/update.js.map +1 -0
- package/dist/commands/profile/index.d.ts +16 -0
- package/dist/commands/profile/index.d.ts.map +1 -0
- package/dist/commands/profile/index.js +81 -0
- package/dist/commands/profile/index.js.map +1 -0
- package/dist/commands/profile/industries/index.d.ts +36 -0
- package/dist/commands/profile/industries/index.d.ts.map +1 -0
- package/dist/commands/profile/industries/index.js +230 -0
- package/dist/commands/profile/industries/index.js.map +1 -0
- package/dist/commands/profile/portfolio/add.d.ts +43 -0
- package/dist/commands/profile/portfolio/add.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/add.js +181 -0
- package/dist/commands/profile/portfolio/add.js.map +1 -0
- package/dist/commands/profile/portfolio/highlight.d.ts +11 -0
- package/dist/commands/profile/portfolio/highlight.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/highlight.js +31 -0
- package/dist/commands/profile/portfolio/highlight.js.map +1 -0
- package/dist/commands/profile/portfolio/index.d.ts +16 -0
- package/dist/commands/profile/portfolio/index.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/index.js +121 -0
- package/dist/commands/profile/portfolio/index.js.map +1 -0
- package/dist/commands/profile/portfolio/list.d.ts +83 -0
- package/dist/commands/profile/portfolio/list.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/list.js +189 -0
- package/dist/commands/profile/portfolio/list.js.map +1 -0
- package/dist/commands/profile/portfolio/remove.d.ts +9 -0
- package/dist/commands/profile/portfolio/remove.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/remove.js +24 -0
- package/dist/commands/profile/portfolio/remove.js.map +1 -0
- package/dist/commands/profile/portfolio/reorder.d.ts +17 -0
- package/dist/commands/profile/portfolio/reorder.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/reorder.js +135 -0
- package/dist/commands/profile/portfolio/reorder.js.map +1 -0
- package/dist/commands/profile/portfolio/shared.d.ts +8 -0
- package/dist/commands/profile/portfolio/shared.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/shared.js +10 -0
- package/dist/commands/profile/portfolio/shared.js.map +1 -0
- package/dist/commands/profile/portfolio/update.d.ts +18 -0
- package/dist/commands/profile/portfolio/update.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/update.js +77 -0
- package/dist/commands/profile/portfolio/update.js.map +1 -0
- package/dist/commands/profile/portfolio/upload.d.ts +8 -0
- package/dist/commands/profile/portfolio/upload.d.ts.map +1 -0
- package/dist/commands/profile/portfolio/upload.js +131 -0
- package/dist/commands/profile/portfolio/upload.js.map +1 -0
- package/dist/commands/profile/resume/cancel-upload.d.ts +9 -0
- package/dist/commands/profile/resume/cancel-upload.d.ts.map +1 -0
- package/dist/commands/profile/resume/cancel-upload.js +30 -0
- package/dist/commands/profile/resume/cancel-upload.js.map +1 -0
- package/dist/commands/profile/resume/index.d.ts +15 -0
- package/dist/commands/profile/resume/index.d.ts.map +1 -0
- package/dist/commands/profile/resume/index.js +42 -0
- package/dist/commands/profile/resume/index.js.map +1 -0
- package/dist/commands/profile/resume/upload.d.ts +16 -0
- package/dist/commands/profile/resume/upload.d.ts.map +1 -0
- package/dist/commands/profile/resume/upload.js +65 -0
- package/dist/commands/profile/resume/upload.js.map +1 -0
- package/dist/commands/profile/reviews/_shared.d.ts +9 -0
- package/dist/commands/profile/reviews/_shared.d.ts.map +1 -0
- package/dist/commands/profile/reviews/_shared.js +15 -0
- package/dist/commands/profile/reviews/_shared.js.map +1 -0
- package/dist/commands/profile/reviews/approve-item.d.ts +30 -0
- package/dist/commands/profile/reviews/approve-item.d.ts.map +1 -0
- package/dist/commands/profile/reviews/approve-item.js +82 -0
- package/dist/commands/profile/reviews/approve-item.js.map +1 -0
- package/dist/commands/profile/reviews/approve-section.d.ts +15 -0
- package/dist/commands/profile/reviews/approve-section.d.ts.map +1 -0
- package/dist/commands/profile/reviews/approve-section.js +67 -0
- package/dist/commands/profile/reviews/approve-section.js.map +1 -0
- package/dist/commands/profile/reviews/index.d.ts +19 -0
- package/dist/commands/profile/reviews/index.d.ts.map +1 -0
- package/dist/commands/profile/reviews/index.js +71 -0
- package/dist/commands/profile/reviews/index.js.map +1 -0
- package/dist/commands/profile/reviews/list.d.ts +17 -0
- package/dist/commands/profile/reviews/list.d.ts.map +1 -0
- package/dist/commands/profile/reviews/list.js +96 -0
- package/dist/commands/profile/reviews/list.js.map +1 -0
- package/dist/commands/profile/reviews/submit-for-review.d.ts +16 -0
- package/dist/commands/profile/reviews/submit-for-review.d.ts.map +1 -0
- package/dist/commands/profile/reviews/submit-for-review.js +65 -0
- package/dist/commands/profile/reviews/submit-for-review.js.map +1 -0
- package/dist/commands/profile/shared.d.ts +46 -0
- package/dist/commands/profile/shared.d.ts.map +1 -0
- package/dist/commands/profile/shared.js +111 -0
- package/dist/commands/profile/shared.js.map +1 -0
- package/dist/commands/profile/skills/index.d.ts +29 -0
- package/dist/commands/profile/skills/index.d.ts.map +1 -0
- package/dist/commands/profile/skills/index.js +475 -0
- package/dist/commands/profile/skills/index.js.map +1 -0
- package/dist/commands/profile/visas/add.d.ts +19 -0
- package/dist/commands/profile/visas/add.d.ts.map +1 -0
- package/dist/commands/profile/visas/add.js +37 -0
- package/dist/commands/profile/visas/add.js.map +1 -0
- package/dist/commands/profile/visas/index.d.ts +13 -0
- package/dist/commands/profile/visas/index.d.ts.map +1 -0
- package/dist/commands/profile/visas/index.js +69 -0
- package/dist/commands/profile/visas/index.js.map +1 -0
- package/dist/commands/profile/visas/list.d.ts +40 -0
- package/dist/commands/profile/visas/list.d.ts.map +1 -0
- package/dist/commands/profile/visas/list.js +115 -0
- package/dist/commands/profile/visas/list.js.map +1 -0
- package/dist/commands/profile/visas/remove.d.ts +8 -0
- package/dist/commands/profile/visas/remove.d.ts.map +1 -0
- package/dist/commands/profile/visas/remove.js +23 -0
- package/dist/commands/profile/visas/remove.js.map +1 -0
- package/dist/commands/profile/visas/shared.d.ts +11 -0
- package/dist/commands/profile/visas/shared.d.ts.map +1 -0
- package/dist/commands/profile/visas/shared.js +16 -0
- package/dist/commands/profile/visas/shared.js.map +1 -0
- package/dist/commands/profile/visas/update.d.ts +13 -0
- package/dist/commands/profile/visas/update.d.ts.map +1 -0
- package/dist/commands/profile/visas/update.js +44 -0
- package/dist/commands/profile/visas/update.js.map +1 -0
- package/dist/commands/timesheet/index.d.ts +24 -0
- package/dist/commands/timesheet/index.d.ts.map +1 -0
- package/dist/commands/timesheet/index.js +98 -0
- package/dist/commands/timesheet/index.js.map +1 -0
- package/dist/commands/timesheet/list.d.ts +40 -0
- package/dist/commands/timesheet/list.d.ts.map +1 -0
- package/dist/commands/timesheet/list.js +79 -0
- package/dist/commands/timesheet/list.js.map +1 -0
- package/dist/commands/timesheet/shared.d.ts +10 -0
- package/dist/commands/timesheet/shared.d.ts.map +1 -0
- package/dist/commands/timesheet/shared.js +35 -0
- package/dist/commands/timesheet/shared.js.map +1 -0
- package/dist/commands/timesheet/show.d.ts +19 -0
- package/dist/commands/timesheet/show.d.ts.map +1 -0
- package/dist/commands/timesheet/show.js +109 -0
- package/dist/commands/timesheet/show.js.map +1 -0
- package/dist/commands/timesheet/submit.d.ts +50 -0
- package/dist/commands/timesheet/submit.d.ts.map +1 -0
- package/dist/commands/timesheet/submit.js +151 -0
- package/dist/commands/timesheet/submit.js.map +1 -0
- package/dist/crash-handlers.d.ts +67 -0
- package/dist/crash-handlers.d.ts.map +1 -0
- package/dist/crash-handlers.js +78 -0
- package/dist/crash-handlers.js.map +1 -0
- package/dist/errors.d.ts +45 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +57 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config-context.d.ts +41 -0
- package/dist/lib/config-context.d.ts.map +1 -0
- package/dist/lib/config-context.js +74 -0
- package/dist/lib/config-context.js.map +1 -0
- package/dist/lib/dry-run.d.ts +70 -0
- package/dist/lib/dry-run.d.ts.map +1 -0
- package/dist/lib/dry-run.js +114 -0
- package/dist/lib/dry-run.js.map +1 -0
- package/dist/lib/empty-state-cta.d.ts +63 -0
- package/dist/lib/empty-state-cta.d.ts.map +1 -0
- package/dist/lib/empty-state-cta.js +88 -0
- package/dist/lib/empty-state-cta.js.map +1 -0
- package/dist/lib/envelopes.d.ts +540 -0
- package/dist/lib/envelopes.d.ts.map +1 -0
- package/dist/lib/envelopes.js +598 -0
- package/dist/lib/envelopes.js.map +1 -0
- package/dist/lib/error-routing.d.ts +49 -0
- package/dist/lib/error-routing.d.ts.map +1 -0
- package/dist/lib/error-routing.js +72 -0
- package/dist/lib/error-routing.js.map +1 -0
- package/dist/lib/format-helpers.d.ts +65 -0
- package/dist/lib/format-helpers.d.ts.map +1 -0
- package/dist/lib/format-helpers.js +79 -0
- package/dist/lib/format-helpers.js.map +1 -0
- package/dist/lib/format-overrides.d.ts +81 -0
- package/dist/lib/format-overrides.d.ts.map +1 -0
- package/dist/lib/format-overrides.js +55 -0
- package/dist/lib/format-overrides.js.map +1 -0
- package/dist/lib/freetext.d.ts +83 -0
- package/dist/lib/freetext.d.ts.map +1 -0
- package/dist/lib/freetext.js +182 -0
- package/dist/lib/freetext.js.map +1 -0
- package/dist/lib/kill-switch-hook.d.ts +49 -0
- package/dist/lib/kill-switch-hook.d.ts.map +1 -0
- package/dist/lib/kill-switch-hook.js +34 -0
- package/dist/lib/kill-switch-hook.js.map +1 -0
- package/dist/lib/output.d.ts +173 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +177 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/pagination.d.ts +49 -0
- package/dist/lib/pagination.d.ts.map +1 -0
- package/dist/lib/pagination.js +36 -0
- package/dist/lib/pagination.js.map +1 -0
- package/dist/program.d.ts +80 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +273 -0
- package/dist/program.js.map +1 -0
- package/package.json +35 -13
- package/index.js +0 -7
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { Command, Option } from "commander";
|
|
4
|
+
import { OUTPUT_FORMATS } from "../../../lib/output.js";
|
|
5
|
+
import { runProfileReviewsApproveItem } from "./approve-item.js";
|
|
6
|
+
import { runProfileReviewsApproveSection } from "./approve-section.js";
|
|
7
|
+
import { runProfileReviewsList } from "./list.js";
|
|
8
|
+
import { runProfileReviewsSubmitForReview } from "./submit-for-review.js";
|
|
9
|
+
/**
|
|
10
|
+
* Build the `ttctl profile reviews` command tree. See
|
|
11
|
+
* `core/services/profile/reviews/index.ts` for the per-leaf rationale and
|
|
12
|
+
* spec/API divergences (notably: the `<id>` shorthand from the issue spec
|
|
13
|
+
* is replaced by named flags because the API requires three fields per
|
|
14
|
+
* approval).
|
|
15
|
+
*
|
|
16
|
+
* Four leaves:
|
|
17
|
+
* - list — pending section reviews
|
|
18
|
+
* - approve-item — approve one pending item
|
|
19
|
+
* - approve-section — approve all pending items in a section
|
|
20
|
+
* - submit-for-review — submit profile for platform re-review
|
|
21
|
+
*
|
|
22
|
+
* Approval is destructive (final per platform semantics). When `--dry-run`
|
|
23
|
+
* (#52) ships, this sub-tree should opt in.
|
|
24
|
+
*/
|
|
25
|
+
export function buildProfileReviewsCommand() {
|
|
26
|
+
const reviews = new Command("reviews").description("View and approve pending section/item reviews; submit profile for platform re-review");
|
|
27
|
+
reviews
|
|
28
|
+
.command("list")
|
|
29
|
+
.description("List pending section reviews (and their items)")
|
|
30
|
+
.addOption(new Option("-o, --output <format>", "output format")
|
|
31
|
+
.choices(OUTPUT_FORMATS)
|
|
32
|
+
.default("pretty"))
|
|
33
|
+
.action(async (options) => {
|
|
34
|
+
await runProfileReviewsList(options.output);
|
|
35
|
+
});
|
|
36
|
+
reviews
|
|
37
|
+
.command("approve-item")
|
|
38
|
+
.description("Approve a single pending item within a section review. " +
|
|
39
|
+
"Run `profile reviews list` first to obtain the three required IDs.")
|
|
40
|
+
.requiredOption("--review-id <id>", "section-review ID (from `profile reviews list`)")
|
|
41
|
+
.requiredOption("--item-id <id>", "underlying item ID (from `profile reviews list`)")
|
|
42
|
+
.requiredOption("--kind <kind>", "ItemReviewKind enum value (e.g. EDUCATION, EMPLOYMENT)")
|
|
43
|
+
.addOption(new Option("-o, --output <format>", "output format")
|
|
44
|
+
.choices(OUTPUT_FORMATS)
|
|
45
|
+
.default("pretty"))
|
|
46
|
+
.action(async (options) => {
|
|
47
|
+
await runProfileReviewsApproveItem(options);
|
|
48
|
+
});
|
|
49
|
+
reviews
|
|
50
|
+
.command("approve-section")
|
|
51
|
+
.description("Approve all pending items in a section review")
|
|
52
|
+
.requiredOption("--review-id <id>", "section-review ID (from `profile reviews list`)")
|
|
53
|
+
.requiredOption("--section <section>", "ReviewSection enum value (e.g. EDUCATION)")
|
|
54
|
+
.addOption(new Option("-o, --output <format>", "output format")
|
|
55
|
+
.choices(OUTPUT_FORMATS)
|
|
56
|
+
.default("pretty"))
|
|
57
|
+
.action(async (options) => {
|
|
58
|
+
await runProfileReviewsApproveSection(options);
|
|
59
|
+
});
|
|
60
|
+
reviews
|
|
61
|
+
.command("submit-for-review")
|
|
62
|
+
.description("Submit the profile for platform-side re-review (used after edits)")
|
|
63
|
+
.addOption(new Option("-o, --output <format>", "output format")
|
|
64
|
+
.choices(OUTPUT_FORMATS)
|
|
65
|
+
.default("pretty"))
|
|
66
|
+
.action(async (options) => {
|
|
67
|
+
await runProfileReviewsSubmitForReview(options);
|
|
68
|
+
});
|
|
69
|
+
return reviews;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/profile/reviews/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAChD,sFAAsF,CACvF,CAAC;IAEF,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,OAAiC,EAAE,EAAE;QAClD,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CACV,yDAAyD;QACvD,oEAAoE,CACvE;SACA,cAAc,CAAC,kBAAkB,EAAE,iDAAiD,CAAC;SACrF,cAAc,CAAC,gBAAgB,EAAE,kDAAkD,CAAC;SACpF,cAAc,CAAC,eAAe,EAAE,wDAAwD,CAAC;SACzF,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,OAAiF,EAAE,EAAE;QAClG,MAAM,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,+CAA+C,CAAC;SAC5D,cAAc,CAAC,kBAAkB,EAAE,iDAAiD,CAAC;SACrF,cAAc,CAAC,qBAAqB,EAAE,2CAA2C,CAAC;SAClF,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,OAAoE,EAAE,EAAE;QACrF,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,mEAAmE,CAAC;SAChF,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,OAAiC,EAAE,EAAE;QAClD,MAAM,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { profile } from "@ttctl/core";
|
|
2
|
+
import type { OutputFormat } from "../../../lib/output.js";
|
|
3
|
+
/**
|
|
4
|
+
* Action handler for `ttctl profile reviews list`.
|
|
5
|
+
*
|
|
6
|
+
* Lists pending section reviews for the signed-in user, wrapped in the
|
|
7
|
+
* v0.4 list envelope (#128). Each row carries the `reviewId` (needed by
|
|
8
|
+
* `approve-section`) and an `items` array, where each item carries its
|
|
9
|
+
* own `id` (needed by `approve-item`) and the underlying `itemId` (the
|
|
10
|
+
* entity being reviewed).
|
|
11
|
+
*/
|
|
12
|
+
export declare function runProfileReviewsList(format: OutputFormat): Promise<void>;
|
|
13
|
+
/** Pure formatter — directly unit-testable. */
|
|
14
|
+
export declare function formatReviewsText(data: profile.reviews.SectionReview[]): string;
|
|
15
|
+
/** Pure formatter — directly unit-testable. */
|
|
16
|
+
export declare function formatReviewsTable(data: profile.reviews.SectionReview[]): string;
|
|
17
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/reviews/list.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,OAAO,EAAE,MAAM,aAAa,CAAC;AAMlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/E;AA8BD,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,MAAM,CAc/E;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,MAAM,CAchF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { TtctlError, profile } from "@ttctl/core";
|
|
4
|
+
import { presentTtctlError } from "../../../errors.js";
|
|
5
|
+
import { emitErrorAndExit, wrapListEnvelope } from "../../../lib/envelopes.js";
|
|
6
|
+
import { emitResult } from "../../../lib/output.js";
|
|
7
|
+
import { loadAuthTokenOrExit } from "./_shared.js";
|
|
8
|
+
const COMMAND_LABEL = "profile reviews list";
|
|
9
|
+
/**
|
|
10
|
+
* Action handler for `ttctl profile reviews list`.
|
|
11
|
+
*
|
|
12
|
+
* Lists pending section reviews for the signed-in user, wrapped in the
|
|
13
|
+
* v0.4 list envelope (#128). Each row carries the `reviewId` (needed by
|
|
14
|
+
* `approve-section`) and an `items` array, where each item carries its
|
|
15
|
+
* own `id` (needed by `approve-item`) and the underlying `itemId` (the
|
|
16
|
+
* entity being reviewed).
|
|
17
|
+
*/
|
|
18
|
+
export async function runProfileReviewsList(format) {
|
|
19
|
+
const token = await loadAuthTokenOrExit(COMMAND_LABEL, format);
|
|
20
|
+
let result;
|
|
21
|
+
try {
|
|
22
|
+
result = await profile.reviews.list(token);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
handleError(err, format);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
emitResult(wrapListEnvelope(result), format, {
|
|
29
|
+
pretty: (data) => formatReviewsText(data.items),
|
|
30
|
+
table: (data) => formatReviewsTable(data.items),
|
|
31
|
+
empty: { command: "profile.reviews.list" },
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function handleError(err, format) {
|
|
35
|
+
if (err instanceof TtctlError) {
|
|
36
|
+
if (format === "pretty")
|
|
37
|
+
presentTtctlError(err);
|
|
38
|
+
const errors = [{ code: err.code, message: err.message, hint: err.recovery }];
|
|
39
|
+
emitErrorAndExit({
|
|
40
|
+
operation: "profile.reviews.list",
|
|
41
|
+
format,
|
|
42
|
+
errors,
|
|
43
|
+
exitCode: err.code === "CF_403_CLEARANCE" || err.code === "CF_403_PERSISTENT" ? 2 : 1,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (err instanceof profile.reviews.ProfileError) {
|
|
47
|
+
emitErrorAndExit({
|
|
48
|
+
operation: "profile.reviews.list",
|
|
49
|
+
format,
|
|
50
|
+
errors: [{ code: err.code, message: err.message }],
|
|
51
|
+
prettySummary: `${COMMAND_LABEL} failed (${err.code}): ${err.message}`,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
55
|
+
emitErrorAndExit({
|
|
56
|
+
operation: "profile.reviews.list",
|
|
57
|
+
format,
|
|
58
|
+
errors: [{ code: "INTERNAL_ERROR", message }],
|
|
59
|
+
prettySummary: `${COMMAND_LABEL} failed: ${message}`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Pure formatter — directly unit-testable. */
|
|
63
|
+
export function formatReviewsText(data) {
|
|
64
|
+
if (data.length === 0)
|
|
65
|
+
return "No pending section reviews.";
|
|
66
|
+
const lines = [`Pending section reviews (${data.length.toString()}):`];
|
|
67
|
+
for (const row of data) {
|
|
68
|
+
const sectionLabel = row.section ?? "(unknown section)";
|
|
69
|
+
const requestedAt = row.requestedAt ?? "?";
|
|
70
|
+
lines.push(` - section: ${sectionLabel} reviewId: ${row.id} requestedAt: ${requestedAt}`);
|
|
71
|
+
if (row.items.length > 0) {
|
|
72
|
+
for (const item of row.items) {
|
|
73
|
+
lines.push(` item: id=${item.id} itemId=${item.itemId} requestedAt=${item.requestedAt ?? "?"}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return lines.join("\n");
|
|
78
|
+
}
|
|
79
|
+
/** Pure formatter — directly unit-testable. */
|
|
80
|
+
export function formatReviewsTable(data) {
|
|
81
|
+
const header = ["section", "reviewId", "itemId", "sectionItemId", "requestedAt"];
|
|
82
|
+
if (data.length === 0)
|
|
83
|
+
return header.join("\t");
|
|
84
|
+
const rows = [header];
|
|
85
|
+
for (const row of data) {
|
|
86
|
+
if (row.items.length === 0) {
|
|
87
|
+
rows.push([row.section ?? "", row.id, "", "", row.requestedAt ?? ""]);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
for (const item of row.items) {
|
|
91
|
+
rows.push([row.section ?? "", row.id, item.itemId, item.id, item.requestedAt ?? ""]);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return rows.map((cols) => cols.join("\t")).join("\n");
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/profile/reviews/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { OutputFormat } from "../../../lib/output.js";
|
|
2
|
+
/**
|
|
3
|
+
* Action handler for `ttctl profile reviews submit-for-review`.
|
|
4
|
+
*
|
|
5
|
+
* Re-submits the talent's profile for platform-side re-review (used after
|
|
6
|
+
* profile edits that need re-verification). Emits the v0.4 update
|
|
7
|
+
* envelope (#128) — re-submission is conceptually a state transition,
|
|
8
|
+
* mapped to `update`.
|
|
9
|
+
*
|
|
10
|
+
* The underlying mutation's input shape is INFERRED — UNVERIFIED (see
|
|
11
|
+
* the service module top-comment).
|
|
12
|
+
*/
|
|
13
|
+
export declare function runProfileReviewsSubmitForReview(options: {
|
|
14
|
+
output: OutputFormat;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=submit-for-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-for-review.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/reviews/submit-for-review.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { TtctlError, profile } from "@ttctl/core";
|
|
4
|
+
import { presentTtctlError } from "../../../errors.js";
|
|
5
|
+
import { emitErrorAndExit, emitUpdateSuccess } from "../../../lib/envelopes.js";
|
|
6
|
+
import { loadAuthTokenOrExit } from "./_shared.js";
|
|
7
|
+
const COMMAND_LABEL = "profile reviews submit-for-review";
|
|
8
|
+
/**
|
|
9
|
+
* Action handler for `ttctl profile reviews submit-for-review`.
|
|
10
|
+
*
|
|
11
|
+
* Re-submits the talent's profile for platform-side re-review (used after
|
|
12
|
+
* profile edits that need re-verification). Emits the v0.4 update
|
|
13
|
+
* envelope (#128) — re-submission is conceptually a state transition,
|
|
14
|
+
* mapped to `update`.
|
|
15
|
+
*
|
|
16
|
+
* The underlying mutation's input shape is INFERRED — UNVERIFIED (see
|
|
17
|
+
* the service module top-comment).
|
|
18
|
+
*/
|
|
19
|
+
export async function runProfileReviewsSubmitForReview(options) {
|
|
20
|
+
const token = await loadAuthTokenOrExit(COMMAND_LABEL, options.output);
|
|
21
|
+
let result;
|
|
22
|
+
try {
|
|
23
|
+
result = await profile.reviews.submitForReview(token);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
handleError(err, options.output);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
emitUpdateSuccess({
|
|
30
|
+
operation: "profile.reviews.submit-for-review",
|
|
31
|
+
format: options.output,
|
|
32
|
+
updated: result,
|
|
33
|
+
prettySummary: "Profile submitted for review.",
|
|
34
|
+
notice: result.notice ?? undefined,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function handleError(err, format) {
|
|
38
|
+
if (err instanceof TtctlError) {
|
|
39
|
+
if (format === "pretty")
|
|
40
|
+
presentTtctlError(err);
|
|
41
|
+
const errors = [{ code: err.code, message: err.message, hint: err.recovery }];
|
|
42
|
+
emitErrorAndExit({
|
|
43
|
+
operation: "profile.reviews.submit-for-review",
|
|
44
|
+
format,
|
|
45
|
+
errors,
|
|
46
|
+
exitCode: err.code === "CF_403_CLEARANCE" || err.code === "CF_403_PERSISTENT" ? 2 : 1,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (err instanceof profile.reviews.ProfileError) {
|
|
50
|
+
emitErrorAndExit({
|
|
51
|
+
operation: "profile.reviews.submit-for-review",
|
|
52
|
+
format,
|
|
53
|
+
errors: [{ code: err.code, message: err.message }],
|
|
54
|
+
prettySummary: `${COMMAND_LABEL} failed (${err.code}): ${err.message}`,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
58
|
+
emitErrorAndExit({
|
|
59
|
+
operation: "profile.reviews.submit-for-review",
|
|
60
|
+
format,
|
|
61
|
+
errors: [{ code: "INTERNAL_ERROR", message }],
|
|
62
|
+
prettySummary: `${COMMAND_LABEL} failed: ${message}`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=submit-for-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-for-review.js","sourceRoot":"","sources":["../../../../src/commands/profile/reviews/submit-for-review.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,OAAiC;IACtF,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvE,IAAI,MAA6C,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,iBAAiB,CAAC;QAChB,SAAS,EAAE,mCAAmC;QAC9C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,+BAA+B;QAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;KACnC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,GAAY,EAAE,MAAoB;IACrD,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,MAAM,KAAK,QAAQ;YAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,MAAM,GAAoB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/F,gBAAgB,CAAC;YACf,SAAS,EAAE,mCAAmC;YAC9C,MAAM;YACN,MAAM;YACN,QAAQ,EAAE,GAAG,CAAC,IAAI,KAAK,kBAAkB,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,YAAY,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAChD,gBAAgB,CAAC;YACf,SAAS,EAAE,mCAAmC;YAC9C,MAAM;YACN,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YAClD,aAAa,EAAE,GAAG,aAAa,YAAY,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,gBAAgB,CAAC;QACf,SAAS,EAAE,mCAAmC;QAC9C,MAAM;QACN,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;QAC7C,aAAa,EAAE,GAAG,aAAa,YAAY,OAAO,EAAE;KACrD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { OutputFormat } from "../../lib/output.js";
|
|
2
|
+
/**
|
|
3
|
+
* Load the persisted auth token from the user's `.ttctl.yaml` (in-memory
|
|
4
|
+
* read of `config.auth.token` after `resolveConfigForCli`). Exits with a
|
|
5
|
+
* uniform `UNAUTHENTICATED` stderr message when no token is present —
|
|
6
|
+
* Form A / B configs that haven't been signed-in yet, or post-signout
|
|
7
|
+
* Form A / Form C configs where the token field was removed.
|
|
8
|
+
*
|
|
9
|
+
* Single-arg signature post-#107 — the prior dual-arg form
|
|
10
|
+
* (`loadAuthTokenOrExit(label, tokenPath)`) is gone because the token
|
|
11
|
+
* no longer lives in a separate file. Callers that need the in-memory
|
|
12
|
+
* config object alongside the token can use `resolveConfigForCli()` directly.
|
|
13
|
+
*
|
|
14
|
+
* `commandLabel` is the user-visible prefix used in the error line (e.g.
|
|
15
|
+
* `"profile education add"`); pick the leaf-verb pair that triggered the
|
|
16
|
+
* call so the user maps the error back to their command.
|
|
17
|
+
*
|
|
18
|
+
* Async signature is preserved (returns `Promise<string>`) for source-
|
|
19
|
+
* compatibility with the pre-#107 callers — every leaf already `await`s
|
|
20
|
+
* this function, and downgrading to sync would mean ~50 callers also
|
|
21
|
+
* change shape. The actual work is synchronous after `loadAuthToken` was
|
|
22
|
+
* removed alongside the separate token file.
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadAuthTokenOrExit(commandLabel: string, format?: OutputFormat): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Render a domain error from any of the four sub-domain services
|
|
27
|
+
* (education, certifications, employment, industries). All four reuse
|
|
28
|
+
* `profile.basic.ProfileError` for domain errors.
|
|
29
|
+
*
|
|
30
|
+
* Thin wrapper around the shared CLI error router (#330) closed over
|
|
31
|
+
* `profile.basic.ProfileError`. No per-code hint adapter — `ProfileError`
|
|
32
|
+
* codes do not carry actionable next-step hints today.
|
|
33
|
+
*
|
|
34
|
+
* `commandLabel` is the user-facing leaf-verb pair (e.g.
|
|
35
|
+
* `"profile education add"`). Returns `never` (always exits).
|
|
36
|
+
*/
|
|
37
|
+
export declare function presentSubDomainError(commandLabel: string, err: unknown, format?: OutputFormat): never;
|
|
38
|
+
/**
|
|
39
|
+
* Parse the `--limit` flag for autocomplete-style sub-commands. Rejects
|
|
40
|
+
* non-integers and values outside `1..50` via the envelope ABI (#128).
|
|
41
|
+
*
|
|
42
|
+
* `commandLabel` is the user-facing leaf-verb pair (e.g.
|
|
43
|
+
* `"profile industries autocomplete"`). Returns the parsed integer.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseLimitOrExit(raw: string, commandLabel: string, format?: OutputFormat): number;
|
|
46
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/profile/shared.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAYxD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,GAAE,YAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BhH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,YAAuB,GAAG,KAAK,CAEhH;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAE,YAAuB,GAAG,MAAM,CAiB3G"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { ConfigError, profile } from "@ttctl/core";
|
|
4
|
+
import { resolveConfigForCli } from "../../lib/config-context.js";
|
|
5
|
+
import { emitErrorAndExit } from "../../lib/envelopes.js";
|
|
6
|
+
import { handleDomainError } from "../../lib/error-routing.js";
|
|
7
|
+
/**
|
|
8
|
+
* Translate the user-visible command label (`profile skills add`) into
|
|
9
|
+
* the canonical envelope `operation` value (`profile.skills.add`) used
|
|
10
|
+
* as a stable machine-readable discriminator across all envelopes for
|
|
11
|
+
* the affected verb.
|
|
12
|
+
*/
|
|
13
|
+
function operationFor(commandLabel) {
|
|
14
|
+
return commandLabel.replace(/ /g, ".");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Load the persisted auth token from the user's `.ttctl.yaml` (in-memory
|
|
18
|
+
* read of `config.auth.token` after `resolveConfigForCli`). Exits with a
|
|
19
|
+
* uniform `UNAUTHENTICATED` stderr message when no token is present —
|
|
20
|
+
* Form A / B configs that haven't been signed-in yet, or post-signout
|
|
21
|
+
* Form A / Form C configs where the token field was removed.
|
|
22
|
+
*
|
|
23
|
+
* Single-arg signature post-#107 — the prior dual-arg form
|
|
24
|
+
* (`loadAuthTokenOrExit(label, tokenPath)`) is gone because the token
|
|
25
|
+
* no longer lives in a separate file. Callers that need the in-memory
|
|
26
|
+
* config object alongside the token can use `resolveConfigForCli()` directly.
|
|
27
|
+
*
|
|
28
|
+
* `commandLabel` is the user-visible prefix used in the error line (e.g.
|
|
29
|
+
* `"profile education add"`); pick the leaf-verb pair that triggered the
|
|
30
|
+
* call so the user maps the error back to their command.
|
|
31
|
+
*
|
|
32
|
+
* Async signature is preserved (returns `Promise<string>`) for source-
|
|
33
|
+
* compatibility with the pre-#107 callers — every leaf already `await`s
|
|
34
|
+
* this function, and downgrading to sync would mean ~50 callers also
|
|
35
|
+
* change shape. The actual work is synchronous after `loadAuthToken` was
|
|
36
|
+
* removed alongside the separate token file.
|
|
37
|
+
*/
|
|
38
|
+
export async function loadAuthTokenOrExit(commandLabel, format = "pretty") {
|
|
39
|
+
let config;
|
|
40
|
+
try {
|
|
41
|
+
({ config } = resolveConfigForCli());
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
if (err instanceof ConfigError) {
|
|
45
|
+
emitErrorAndExit({
|
|
46
|
+
operation: operationFor(commandLabel),
|
|
47
|
+
format,
|
|
48
|
+
errors: [{ code: err.code, message: err.message }],
|
|
49
|
+
prettySummary: `${commandLabel} failed (${err.code}): ${err.message}`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
const token = config.auth.token;
|
|
55
|
+
if (token === undefined) {
|
|
56
|
+
emitErrorAndExit({
|
|
57
|
+
operation: operationFor(commandLabel),
|
|
58
|
+
format,
|
|
59
|
+
errors: [
|
|
60
|
+
{
|
|
61
|
+
code: "UNAUTHENTICATED",
|
|
62
|
+
message: "No auth token found in config. Run `ttctl auth signin` to sign in.",
|
|
63
|
+
hint: "ttctl auth signin",
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
prettySummary: `${commandLabel} failed (UNAUTHENTICATED): No auth token found in config. Run \`ttctl auth signin\` to sign in.`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return Promise.resolve(token);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Render a domain error from any of the four sub-domain services
|
|
73
|
+
* (education, certifications, employment, industries). All four reuse
|
|
74
|
+
* `profile.basic.ProfileError` for domain errors.
|
|
75
|
+
*
|
|
76
|
+
* Thin wrapper around the shared CLI error router (#330) closed over
|
|
77
|
+
* `profile.basic.ProfileError`. No per-code hint adapter — `ProfileError`
|
|
78
|
+
* codes do not carry actionable next-step hints today.
|
|
79
|
+
*
|
|
80
|
+
* `commandLabel` is the user-facing leaf-verb pair (e.g.
|
|
81
|
+
* `"profile education add"`). Returns `never` (always exits).
|
|
82
|
+
*/
|
|
83
|
+
export function presentSubDomainError(commandLabel, err, format = "pretty") {
|
|
84
|
+
handleDomainError(commandLabel, err, profile.basic.ProfileError, format);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parse the `--limit` flag for autocomplete-style sub-commands. Rejects
|
|
88
|
+
* non-integers and values outside `1..50` via the envelope ABI (#128).
|
|
89
|
+
*
|
|
90
|
+
* `commandLabel` is the user-facing leaf-verb pair (e.g.
|
|
91
|
+
* `"profile industries autocomplete"`). Returns the parsed integer.
|
|
92
|
+
*/
|
|
93
|
+
export function parseLimitOrExit(raw, commandLabel, format = "pretty") {
|
|
94
|
+
const n = Number(raw);
|
|
95
|
+
if (!Number.isInteger(n) || n < 1 || n > 50) {
|
|
96
|
+
emitErrorAndExit({
|
|
97
|
+
operation: operationFor(commandLabel),
|
|
98
|
+
format,
|
|
99
|
+
errors: [
|
|
100
|
+
{
|
|
101
|
+
code: "VALIDATION_ERROR",
|
|
102
|
+
field: "limit",
|
|
103
|
+
message: `--limit must be an integer between 1 and 50; got "${raw}"`,
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
prettySummary: `${commandLabel} failed (VALIDATION_ERROR): --limit must be an integer between 1 and 50; got "${raw}"`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return n;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/profile/shared.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D;;;;;GAKG;AACH,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAoB,EAAE,SAAuB,QAAQ;IAC7F,IAAI,MAAwD,CAAC;IAC7D,IAAI,CAAC;QACH,CAAC,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,gBAAgB,CAAC;gBACf,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC;gBACrC,MAAM;gBACN,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBAClD,aAAa,EAAE,GAAG,YAAY,YAAY,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE;aACtE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,gBAAgB,CAAC;YACf,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC;YACrC,MAAM;YACN,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,oEAAoE;oBAC7E,IAAI,EAAE,mBAAmB;iBAC1B;aACF;YACD,aAAa,EAAE,GAAG,YAAY,iGAAiG;SAChI,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,GAAY,EAAE,SAAuB,QAAQ;IACvG,iBAAiB,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,YAAoB,EAAE,SAAuB,QAAQ;IACjG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5C,gBAAgB,CAAC;YACf,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC;YACrC,MAAM;YACN,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,kBAAkB;oBACxB,KAAK,EAAE,OAAO;oBACd,OAAO,EAAE,qDAAqD,GAAG,GAAG;iBACrE;aACF;YACD,aAAa,EAAE,GAAG,YAAY,iFAAiF,GAAG,GAAG;SACtH,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { profile } from "@ttctl/core";
|
|
3
|
+
/**
|
|
4
|
+
* Parse an `--experience` flag value into an integer count of months.
|
|
5
|
+
* Accepts a bare number ("60" → 60), `Ny` ("5y" → 60), or `Nm` ("60m" →
|
|
6
|
+
* 60). Returns `null` for anything that doesn't match — the caller turns
|
|
7
|
+
* that into a `VALIDATION_ERROR` exit.
|
|
8
|
+
*
|
|
9
|
+
* Pure function — directly unit-testable.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseExperience(raw: string): number | null;
|
|
12
|
+
export declare function formatSkillSetText(skill: profile.skills.ProfileSkillSet): string;
|
|
13
|
+
export declare function formatSkillSetTable(skill: profile.skills.ProfileSkillSet): string;
|
|
14
|
+
export declare function formatSkillsListText(skills: profile.skills.ProfileSkillSet[]): string;
|
|
15
|
+
export declare function formatSkillsListTable(skills: profile.skills.ProfileSkillSet[]): string;
|
|
16
|
+
/**
|
|
17
|
+
* Build the `ttctl profile skills` command tree. Exposes the seven leaves
|
|
18
|
+
* the issue (#73) specifies — `add`, `remove`, `update`, `show`, `list`,
|
|
19
|
+
* `autocomplete`, `readiness` — registered in the canonical name spelling
|
|
20
|
+
* (`remove`) plus the `rm` alias per the project convention introduced
|
|
21
|
+
* by issue #72 (any `remove` verb gets an `rm` alias).
|
|
22
|
+
*
|
|
23
|
+
* No top-level Commander.js alias on the sub-domain itself: the issue
|
|
24
|
+
* doesn't introduce one (#72 declares aliases only for `certifications` /
|
|
25
|
+
* `employment` / `portfolio` / `resume`), and `skills` already reads
|
|
26
|
+
* naturally as a CLI flag.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildProfileSkillsCommand(): Command;
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/skills/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAc,OAAO,EAAE,MAAM,aAAa,CAAC;AAiPlD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS1D;AA4FD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,MAAM,CAOhF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,MAAM,CASjF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,MAAM,CAKrF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,MAAM,CAYtF;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAkHnD"}
|