monday-cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +324 -2
- package/README.md +128 -30
- package/dist/api/board-favorites.d.ts +329 -0
- package/dist/api/board-favorites.d.ts.map +1 -0
- package/dist/api/board-favorites.js +353 -0
- package/dist/api/board-favorites.js.map +1 -0
- package/dist/api/board-mutation-result.d.ts +9 -5
- package/dist/api/board-mutation-result.d.ts.map +1 -1
- package/dist/api/board-mutation-result.js +9 -5
- package/dist/api/board-mutation-result.js.map +1 -1
- package/dist/api/board-relation-validation.d.ts +161 -0
- package/dist/api/board-relation-validation.d.ts.map +1 -0
- package/dist/api/board-relation-validation.js +317 -0
- package/dist/api/board-relation-validation.js.map +1 -0
- package/dist/api/cache.d.ts +14 -5
- package/dist/api/cache.d.ts.map +1 -1
- package/dist/api/cache.js +8 -10
- package/dist/api/cache.js.map +1 -1
- package/dist/api/column-mapping.js +2 -2
- package/dist/api/column-mapping.js.map +1 -1
- package/dist/api/column-mutation-result.d.ts +9 -5
- package/dist/api/column-mutation-result.d.ts.map +1 -1
- package/dist/api/column-mutation-result.js +9 -5
- package/dist/api/column-mutation-result.js.map +1 -1
- package/dist/api/column-types.d.ts +26 -7
- package/dist/api/column-types.d.ts.map +1 -1
- package/dist/api/column-types.js +42 -3
- package/dist/api/column-types.js.map +1 -1
- package/dist/api/column-values.d.ts +228 -31
- package/dist/api/column-values.d.ts.map +1 -1
- package/dist/api/column-values.js +551 -124
- package/dist/api/column-values.js.map +1 -1
- package/dist/api/cross-board-search.d.ts +501 -0
- package/dist/api/cross-board-search.d.ts.map +1 -0
- package/dist/api/cross-board-search.js +547 -0
- package/dist/api/cross-board-search.js.map +1 -0
- package/dist/api/dev-conventions.d.ts +1038 -0
- package/dist/api/dev-conventions.d.ts.map +1 -0
- package/dist/api/dev-conventions.js +1556 -0
- package/dist/api/dev-conventions.js.map +1 -0
- package/dist/api/dry-run.d.ts +32 -5
- package/dist/api/dry-run.d.ts.map +1 -1
- package/dist/api/dry-run.js +149 -32
- package/dist/api/dry-run.js.map +1 -1
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +28 -7
- package/dist/api/errors.js.map +1 -1
- package/dist/api/group-mutation-result.d.ts +9 -5
- package/dist/api/group-mutation-result.d.ts.map +1 -1
- package/dist/api/group-mutation-result.js +9 -5
- package/dist/api/group-mutation-result.js.map +1 -1
- package/dist/api/item-history-projection.d.ts +919 -0
- package/dist/api/item-history-projection.d.ts.map +1 -0
- package/dist/api/item-history-projection.js +1104 -0
- package/dist/api/item-history-projection.js.map +1 -0
- package/dist/api/item-mutation-execute.d.ts +82 -0
- package/dist/api/item-mutation-execute.d.ts.map +1 -0
- package/dist/api/item-mutation-execute.js +199 -0
- package/dist/api/item-mutation-execute.js.map +1 -0
- package/dist/api/notifications.d.ts +156 -0
- package/dist/api/notifications.d.ts.map +1 -0
- package/dist/api/notifications.js +215 -0
- package/dist/api/notifications.js.map +1 -0
- package/dist/api/oauth-test-helper.d.ts +64 -0
- package/dist/api/oauth-test-helper.d.ts.map +1 -0
- package/dist/api/oauth-test-helper.js +179 -0
- package/dist/api/oauth-test-helper.js.map +1 -0
- package/dist/api/oauth.d.ts +198 -0
- package/dist/api/oauth.d.ts.map +1 -0
- package/dist/api/oauth.js +471 -0
- package/dist/api/oauth.js.map +1 -0
- package/dist/api/partial-success-bulk.d.ts +422 -0
- package/dist/api/partial-success-bulk.d.ts.map +1 -0
- package/dist/api/partial-success-bulk.js +378 -0
- package/dist/api/partial-success-bulk.js.map +1 -0
- package/dist/api/people.d.ts +54 -1
- package/dist/api/people.d.ts.map +1 -1
- package/dist/api/people.js +27 -3
- package/dist/api/people.js.map +1 -1
- package/dist/api/probes.d.ts +487 -0
- package/dist/api/probes.d.ts.map +1 -0
- package/dist/api/probes.js +881 -0
- package/dist/api/probes.js.map +1 -0
- package/dist/api/raw-document.d.ts.map +1 -1
- package/dist/api/raw-document.js +2 -2
- package/dist/api/raw-document.js.map +1 -1
- package/dist/api/raw-write.d.ts.map +1 -1
- package/dist/api/raw-write.js +11 -3
- package/dist/api/raw-write.js.map +1 -1
- package/dist/api/resolution-context.d.ts +23 -11
- package/dist/api/resolution-context.d.ts.map +1 -1
- package/dist/api/resolution-context.js +53 -12
- package/dist/api/resolution-context.js.map +1 -1
- package/dist/api/resolution-pass.d.ts +30 -1
- package/dist/api/resolution-pass.d.ts.map +1 -1
- package/dist/api/resolution-pass.js +36 -1
- package/dist/api/resolution-pass.js.map +1 -1
- package/dist/api/resolve-client.d.ts +11 -0
- package/dist/api/resolve-client.d.ts.map +1 -1
- package/dist/api/resolve-client.js +1 -1
- package/dist/api/resolve-client.js.map +1 -1
- package/dist/api/response-root.d.ts +92 -46
- package/dist/api/response-root.d.ts.map +1 -1
- package/dist/api/response-root.js +93 -41
- package/dist/api/response-root.js.map +1 -1
- package/dist/api/tag-directory.d.ts +154 -0
- package/dist/api/tag-directory.d.ts.map +1 -0
- package/dist/api/tag-directory.js +325 -0
- package/dist/api/tag-directory.js.map +1 -0
- package/dist/api/time-tracking.d.ts +165 -0
- package/dist/api/time-tracking.d.ts.map +1 -0
- package/dist/api/time-tracking.js +135 -0
- package/dist/api/time-tracking.js.map +1 -0
- package/dist/api/transport.js +3 -3
- package/dist/api/transport.js.map +1 -1
- package/dist/api/usage.d.ts +190 -0
- package/dist/api/usage.d.ts.map +1 -0
- package/dist/api/usage.js +194 -0
- package/dist/api/usage.js.map +1 -0
- package/dist/api/users-fan-out-mutation.d.ts.map +1 -1
- package/dist/api/users-fan-out-mutation.js +10 -5
- package/dist/api/users-fan-out-mutation.js.map +1 -1
- package/dist/api/webhooks.d.ts +357 -0
- package/dist/api/webhooks.d.ts.map +1 -0
- package/dist/api/webhooks.js +333 -0
- package/dist/api/webhooks.js.map +1 -0
- package/dist/cli/envelope-out.d.ts +18 -1
- package/dist/cli/envelope-out.d.ts.map +1 -1
- package/dist/cli/envelope-out.js +16 -2
- package/dist/cli/envelope-out.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +120 -1
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/run.d.ts +12 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +2 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/commands/account/tags.d.ts +37 -0
- package/dist/commands/account/tags.d.ts.map +1 -0
- package/dist/commands/account/tags.js +84 -0
- package/dist/commands/account/tags.js.map +1 -0
- package/dist/commands/auth/login.d.ts +14 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +314 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +28 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +94 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/board/archive.d.ts.map +1 -1
- package/dist/commands/board/archive.js +14 -14
- package/dist/commands/board/archive.js.map +1 -1
- package/dist/commands/board/column-create.d.ts +3 -3
- package/dist/commands/board/column-create.d.ts.map +1 -1
- package/dist/commands/board/column-create.js +52 -45
- package/dist/commands/board/column-create.js.map +1 -1
- package/dist/commands/board/column-delete.d.ts.map +1 -1
- package/dist/commands/board/column-delete.js +15 -16
- package/dist/commands/board/column-delete.js.map +1 -1
- package/dist/commands/board/column-update.d.ts.map +1 -1
- package/dist/commands/board/column-update.js +23 -22
- package/dist/commands/board/column-update.js.map +1 -1
- package/dist/commands/board/create.d.ts.map +1 -1
- package/dist/commands/board/create.js +14 -17
- package/dist/commands/board/create.js.map +1 -1
- package/dist/commands/board/delete.d.ts.map +1 -1
- package/dist/commands/board/delete.js +12 -15
- package/dist/commands/board/delete.js.map +1 -1
- package/dist/commands/board/describe.d.ts.map +1 -1
- package/dist/commands/board/describe.js +30 -0
- package/dist/commands/board/describe.js.map +1 -1
- package/dist/commands/board/duplicate.d.ts.map +1 -1
- package/dist/commands/board/duplicate.js +12 -13
- package/dist/commands/board/duplicate.js.map +1 -1
- package/dist/commands/board/favorites.d.ts +33 -0
- package/dist/commands/board/favorites.d.ts.map +1 -0
- package/dist/commands/board/favorites.js +74 -0
- package/dist/commands/board/favorites.js.map +1 -0
- package/dist/commands/board/find.d.ts +1 -1
- package/dist/commands/board/group-archive.d.ts.map +1 -1
- package/dist/commands/board/group-archive.js +12 -16
- package/dist/commands/board/group-archive.js.map +1 -1
- package/dist/commands/board/group-create.d.ts.map +1 -1
- package/dist/commands/board/group-create.js +9 -19
- package/dist/commands/board/group-create.js.map +1 -1
- package/dist/commands/board/group-delete.d.ts.map +1 -1
- package/dist/commands/board/group-delete.js +12 -16
- package/dist/commands/board/group-delete.js.map +1 -1
- package/dist/commands/board/group-duplicate.d.ts.map +1 -1
- package/dist/commands/board/group-duplicate.js +12 -16
- package/dist/commands/board/group-duplicate.js.map +1 -1
- package/dist/commands/board/group-update.d.ts.map +1 -1
- package/dist/commands/board/group-update.js +12 -11
- package/dist/commands/board/group-update.js.map +1 -1
- package/dist/commands/board/list.d.ts +1 -1
- package/dist/commands/board/update.d.ts.map +1 -1
- package/dist/commands/board/update.js +16 -11
- package/dist/commands/board/update.js.map +1 -1
- package/dist/commands/cache/list.d.ts +2 -0
- package/dist/commands/cache/list.d.ts.map +1 -1
- package/dist/commands/cache/list.js +2 -2
- package/dist/commands/cache/list.js.map +1 -1
- package/dist/commands/dev/_shared.d.ts +40 -0
- package/dist/commands/dev/_shared.d.ts.map +1 -0
- package/dist/commands/dev/_shared.js +104 -0
- package/dist/commands/dev/_shared.js.map +1 -0
- package/dist/commands/dev/configure.d.ts +36 -0
- package/dist/commands/dev/configure.d.ts.map +1 -0
- package/dist/commands/dev/configure.js +145 -0
- package/dist/commands/dev/configure.js.map +1 -0
- package/dist/commands/dev/discover.d.ts +34 -0
- package/dist/commands/dev/discover.d.ts.map +1 -0
- package/dist/commands/dev/discover.js +117 -0
- package/dist/commands/dev/discover.js.map +1 -0
- package/dist/commands/dev/doctor.d.ts +39 -0
- package/dist/commands/dev/doctor.d.ts.map +1 -0
- package/dist/commands/dev/doctor.js +91 -0
- package/dist/commands/dev/doctor.js.map +1 -0
- package/dist/commands/dev/epic/items.d.ts +24 -0
- package/dist/commands/dev/epic/items.d.ts.map +1 -0
- package/dist/commands/dev/epic/items.js +103 -0
- package/dist/commands/dev/epic/items.js.map +1 -0
- package/dist/commands/dev/epic/list.d.ts +36 -0
- package/dist/commands/dev/epic/list.d.ts.map +1 -0
- package/dist/commands/dev/epic/list.js +120 -0
- package/dist/commands/dev/epic/list.js.map +1 -0
- package/dist/commands/dev/release/list.d.ts +21 -0
- package/dist/commands/dev/release/list.d.ts.map +1 -0
- package/dist/commands/dev/release/list.js +73 -0
- package/dist/commands/dev/release/list.js.map +1 -0
- package/dist/commands/dev/sprint/current.d.ts +24 -0
- package/dist/commands/dev/sprint/current.d.ts.map +1 -0
- package/dist/commands/dev/sprint/current.js +90 -0
- package/dist/commands/dev/sprint/current.js.map +1 -0
- package/dist/commands/dev/sprint/items.d.ts +34 -0
- package/dist/commands/dev/sprint/items.d.ts.map +1 -0
- package/dist/commands/dev/sprint/items.js +118 -0
- package/dist/commands/dev/sprint/items.js.map +1 -0
- package/dist/commands/dev/sprint/list.d.ts +41 -0
- package/dist/commands/dev/sprint/list.d.ts.map +1 -0
- package/dist/commands/dev/sprint/list.js +104 -0
- package/dist/commands/dev/sprint/list.js.map +1 -0
- package/dist/commands/dev/task/block.d.ts +29 -0
- package/dist/commands/dev/task/block.d.ts.map +1 -0
- package/dist/commands/dev/task/block.js +106 -0
- package/dist/commands/dev/task/block.js.map +1 -0
- package/dist/commands/dev/task/done.d.ts +30 -0
- package/dist/commands/dev/task/done.d.ts.map +1 -0
- package/dist/commands/dev/task/done.js +113 -0
- package/dist/commands/dev/task/done.js.map +1 -0
- package/dist/commands/dev/task/list.d.ts +42 -0
- package/dist/commands/dev/task/list.d.ts.map +1 -0
- package/dist/commands/dev/task/list.js +227 -0
- package/dist/commands/dev/task/list.js.map +1 -0
- package/dist/commands/dev/task/start.d.ts +29 -0
- package/dist/commands/dev/task/start.d.ts.map +1 -0
- package/dist/commands/dev/task/start.js +90 -0
- package/dist/commands/dev/task/start.js.map +1 -0
- package/dist/commands/emit.d.ts.map +1 -1
- package/dist/commands/emit.js +5 -3
- package/dist/commands/emit.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +95 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/item/archive.d.ts.map +1 -1
- package/dist/commands/item/archive.js +11 -0
- package/dist/commands/item/archive.js.map +1 -1
- package/dist/commands/item/clear.d.ts.map +1 -1
- package/dist/commands/item/clear.js +15 -0
- package/dist/commands/item/clear.js.map +1 -1
- package/dist/commands/item/create.d.ts.map +1 -1
- package/dist/commands/item/create.js +41 -8
- package/dist/commands/item/create.js.map +1 -1
- package/dist/commands/item/delete.d.ts.map +1 -1
- package/dist/commands/item/delete.js +11 -0
- package/dist/commands/item/delete.js.map +1 -1
- package/dist/commands/item/duplicate.d.ts.map +1 -1
- package/dist/commands/item/duplicate.js +12 -0
- package/dist/commands/item/duplicate.js.map +1 -1
- package/dist/commands/item/history.d.ts +60 -0
- package/dist/commands/item/history.d.ts.map +1 -0
- package/dist/commands/item/history.js +309 -0
- package/dist/commands/item/history.js.map +1 -0
- package/dist/commands/item/list.d.ts.map +1 -1
- package/dist/commands/item/list.js +16 -13
- package/dist/commands/item/list.js.map +1 -1
- package/dist/commands/item/move.d.ts.map +1 -1
- package/dist/commands/item/move.js +41 -7
- package/dist/commands/item/move.js.map +1 -1
- package/dist/commands/item/search.d.ts +99 -15
- package/dist/commands/item/search.d.ts.map +1 -1
- package/dist/commands/item/search.js +480 -36
- package/dist/commands/item/search.js.map +1 -1
- package/dist/commands/item/set.d.ts.map +1 -1
- package/dist/commands/item/set.js +52 -8
- package/dist/commands/item/set.js.map +1 -1
- package/dist/commands/item/time-track/start.d.ts +61 -0
- package/dist/commands/item/time-track/start.d.ts.map +1 -0
- package/dist/commands/item/time-track/start.js +138 -0
- package/dist/commands/item/time-track/start.js.map +1 -0
- package/dist/commands/item/time-track/stop.d.ts +32 -0
- package/dist/commands/item/time-track/stop.d.ts.map +1 -0
- package/dist/commands/item/time-track/stop.js +97 -0
- package/dist/commands/item/time-track/stop.js.map +1 -0
- package/dist/commands/item/update.d.ts +1 -0
- package/dist/commands/item/update.d.ts.map +1 -1
- package/dist/commands/item/update.js +103 -113
- package/dist/commands/item/update.js.map +1 -1
- package/dist/commands/item/upsert.d.ts.map +1 -1
- package/dist/commands/item/upsert.js +48 -1
- package/dist/commands/item/upsert.js.map +1 -1
- package/dist/commands/notification/send.d.ts +60 -0
- package/dist/commands/notification/send.d.ts.map +1 -0
- package/dist/commands/notification/send.js +147 -0
- package/dist/commands/notification/send.js.map +1 -0
- package/dist/commands/parse-argv.d.ts.map +1 -1
- package/dist/commands/parse-argv.js +14 -4
- package/dist/commands/parse-argv.js.map +1 -1
- package/dist/commands/raw/index.d.ts.map +1 -1
- package/dist/commands/raw/index.js +13 -15
- package/dist/commands/raw/index.js.map +1 -1
- package/dist/commands/run-by-id-lookup.d.ts.map +1 -1
- package/dist/commands/run-by-id-lookup.js +2 -2
- package/dist/commands/run-by-id-lookup.js.map +1 -1
- package/dist/commands/schema/index.d.ts +2 -0
- package/dist/commands/schema/index.d.ts.map +1 -1
- package/dist/commands/status.d.ts +120 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +365 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update/body-source.d.ts.map +1 -1
- package/dist/commands/update/body-source.js +2 -2
- package/dist/commands/update/body-source.js.map +1 -1
- package/dist/commands/update/create.d.ts +2 -3
- package/dist/commands/update/create.d.ts.map +1 -1
- package/dist/commands/update/create.js +15 -3
- package/dist/commands/update/create.js.map +1 -1
- package/dist/commands/update/delete.d.ts.map +1 -1
- package/dist/commands/update/delete.js +11 -0
- package/dist/commands/update/delete.js.map +1 -1
- package/dist/commands/update/edit.d.ts.map +1 -1
- package/dist/commands/update/edit.js +11 -0
- package/dist/commands/update/edit.js.map +1 -1
- package/dist/commands/update/list.d.ts.map +1 -1
- package/dist/commands/update/list.js +15 -12
- package/dist/commands/update/list.js.map +1 -1
- package/dist/commands/update/reply.d.ts.map +1 -1
- package/dist/commands/update/reply.js +11 -0
- package/dist/commands/update/reply.js.map +1 -1
- package/dist/commands/update/toggle.d.ts.map +1 -1
- package/dist/commands/update/toggle.js +13 -0
- package/dist/commands/update/toggle.js.map +1 -1
- package/dist/commands/usage.d.ts +58 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +94 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/webhook/create.d.ts +74 -0
- package/dist/commands/webhook/create.d.ts.map +1 -0
- package/dist/commands/webhook/create.js +150 -0
- package/dist/commands/webhook/create.js.map +1 -0
- package/dist/commands/webhook/delete.d.ts +46 -0
- package/dist/commands/webhook/delete.d.ts.map +1 -0
- package/dist/commands/webhook/delete.js +141 -0
- package/dist/commands/webhook/delete.js.map +1 -0
- package/dist/commands/webhook/list.d.ts +23 -0
- package/dist/commands/webhook/list.d.ts.map +1 -0
- package/dist/commands/webhook/list.js +68 -0
- package/dist/commands/webhook/list.js.map +1 -0
- package/dist/commands/workspace/create.d.ts.map +1 -1
- package/dist/commands/workspace/create.js +16 -0
- package/dist/commands/workspace/create.js.map +1 -1
- package/dist/commands/workspace/delete.d.ts.map +1 -1
- package/dist/commands/workspace/delete.js +13 -13
- package/dist/commands/workspace/delete.js.map +1 -1
- package/dist/commands/workspace/list.d.ts +1 -1
- package/dist/commands/workspace/update.d.ts.map +1 -1
- package/dist/commands/workspace/update.js +15 -15
- package/dist/commands/workspace/update.js.map +1 -1
- package/dist/config/credentials.d.ts +189 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +300 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/profiles.d.ts +125 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +227 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/types/global-flags.d.ts +1 -1
- package/dist/types/global-flags.d.ts.map +1 -1
- package/dist/types/global-flags.js +28 -16
- package/dist/types/global-flags.js.map +1 -1
- package/dist/types/ids.d.ts +2 -0
- package/dist/types/ids.d.ts.map +1 -1
- package/dist/types/ids.js +5 -3
- package/dist/types/ids.js.map +1 -1
- package/dist/utils/errors.d.ts +57 -3
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +69 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/fs.d.ts +35 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +36 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/json.d.ts +60 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +86 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/output/ndjson.d.ts +65 -3
- package/dist/utils/output/ndjson.d.ts.map +1 -1
- package/dist/utils/output/ndjson.js +21 -0
- package/dist/utils/output/ndjson.js.map +1 -1
- package/dist/utils/redact.d.ts.map +1 -1
- package/dist/utils/redact.js +31 -0
- package/dist/utils/redact.js.map +1 -1
- package/package.json +2 -1
- package/dist/commands/account/client-helper.d.ts +0 -37
- package/dist/commands/account/client-helper.d.ts.map +0 -1
- package/dist/commands/account/client-helper.js +0 -55
- package/dist/commands/account/client-helper.js.map +0 -1
|
@@ -44,6 +44,7 @@ import { parseArgv } from '../parse-argv.js';
|
|
|
44
44
|
import { ApiError, UsageError } from '../../utils/errors.js';
|
|
45
45
|
import { unwrapOrThrow } from '../../utils/parse-boundary.js';
|
|
46
46
|
import { WORKSPACE_FIELDS_FRAGMENT, workspaceProjectionSchema, } from '../../api/workspace-projection.js';
|
|
47
|
+
import { assertResponseFieldPresent } from '../../api/response-root.js';
|
|
47
48
|
const WORKSPACE_UPDATE_PREFLIGHT_QUERY = `
|
|
48
49
|
query WorkspaceUpdatePreflight($ids: [ID!]) {
|
|
49
50
|
workspaces(ids: $ids) {
|
|
@@ -196,21 +197,20 @@ export const workspaceUpdateCommand = {
|
|
|
196
197
|
'verify the response shape and update responseSchema if ' +
|
|
197
198
|
'Monday\'s contract has changed.',
|
|
198
199
|
});
|
|
199
|
-
//
|
|
200
|
-
//
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
200
|
+
// R42 (post-v0.2 → v0.3 cleanup follow-up): consolidate the
|
|
201
|
+
// M14 round-3 F1 inline missing-key check onto the shared
|
|
202
|
+
// helper. Distinguishes "root key absent" (schema-drift →
|
|
203
|
+
// internal_error) from "value null" (workspace missing →
|
|
204
|
+
// not_found via projectUpdatedWorkspace). M14 workspace verbs
|
|
205
|
+
// were missed by the initial R42 sweep (the §22 sites list
|
|
206
|
+
// jumped M13 → M15); folded in here.
|
|
207
|
+
assertResponseFieldPresent({
|
|
208
|
+
data,
|
|
209
|
+
key: 'update_workspace',
|
|
210
|
+
operationLabel: 'WorkspaceUpdate',
|
|
211
|
+
details: { workspace_id: parsed.workspaceId },
|
|
212
|
+
nullHandling: 'caller_handles',
|
|
213
|
+
});
|
|
214
214
|
const projected = projectUpdatedWorkspace(data.update_workspace, parsed.workspaceId);
|
|
215
215
|
emitMutation({
|
|
216
216
|
ctx,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/workspace/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAE1B,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/workspace/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAE1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,gCAAgC,GAAG;;;QAGjC,yBAAyB;;;CAGhC,CAAC;AAEF,MAAM,yBAAyB,GAAG;;;QAG1B,yBAAyB;;;CAGhC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAC;AAIrE,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,CAAC;IACN,WAAW,EAAE,iBAAiB;IAC9B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;QAClC,OAAO,EAAE,wDAAwD;KAClE,CAAC;SACD,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAClF;IACE,OAAO,EACL,2EAA2E;CAC9E,CACF,CAAC;AAEJ,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACvD,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE;CAC9B,CAAC;KACD,KAAK,EAAE,CAAC;AAOX,MAAM,CAAC,MAAM,sBAAsB,GAG/B;IACF,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,0CAA0C;IACnD,QAAQ,EAAE;QACR,uDAAuD;QACvD,6CAA6C;QAC7C,wEAAwE;QACxE,8DAA8D;KAC/D;IACD,mEAAmE;IACnE,kEAAkE;IAClE,yCAAyC;IACzC,UAAU,EAAE,IAAI;IAChB,WAAW;IACX,YAAY,EAAE,2BAA2B;IACzC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC1E,IAAI;aACD,OAAO,CAAC,sBAAsB,CAAC;aAC/B,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC;aAC3C,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC;aAC1C,MAAM,CAAC,YAAY,EAAE,iCAAiC,CAAC;aACvD,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;aACxD,WAAW,CACV,OAAO,EACP,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1F;aACA,MAAM,CAAC,KAAK,EAAE,WAAoB,EAAE,IAAa,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,SAAS,CAAC,sBAAsB,CAAC,WAAW,EAAE;gBAC3D,WAAW;gBACX,GAAI,IAA0C;aAC/C,CAAC,CAAC;YACH,6DAA6D;YAC7D,4DAA4D;YAC5D,6DAA6D;YAC7D,2DAA2D;YAC3D,wDAAwD;YACxD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAExC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,CAC/D,GAAG,EACH,OAAO,CAAC,IAAI,EAAE,CACf,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvB,0DAA0D;gBAC1D,wDAAwD;gBACxD,uDAAuD;gBACvD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,GAAG,CAChC,gCAAgC,EAChC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAC7B,EAAE,aAAa,EAAE,0BAA0B,EAAE,CAC9C,CAAC;gBACF,MAAM,aAAa,GAAG,aAAa,CACjC,uBAAuB,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EACjD;oBACE,OAAO,EACL,+DAA+D;oBACjE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE;iBAC9C,CACF,CAAC;gBACF,MAAM,KAAK,GAAY,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,MAAM,IAAI,QAAQ,CAChB,WAAW,EACX,uCAAuC,MAAM,CAAC,WAAW,EAAE,EAC3D,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAClD,CAAC;gBACJ,CAAC;gBACD,MAAM,OAAO,GAAG,aAAa,CAC3B,2BAA2B,CAAC,SAAS,CAAC,KAAK,CAAC,EAC5C;oBACE,OAAO,EAAE,2DAA2D;oBACpE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE;iBAC9C,CACF,CAAC;gBAEF,MAAM,IAAI,GAA8B,EAAE,CAAC;gBAC3C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;gBACtD,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;gBACtD,CAAC;gBACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACrC,IAAI,CAAC,WAAW,GAAG;wBACjB,IAAI,EAAE,OAAO,CAAC,WAAW;wBACzB,EAAE,EAAE,MAAM,CAAC,WAAW;qBACvB,CAAC;gBACJ,CAAC;gBAED,UAAU,CAAC;oBACT,GAAG;oBACH,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE;oBAC3B,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,kBAAkB;4BAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;4BAChC,IAAI;yBACL;qBACF;oBACD,MAAM,EAAE,MAAM;oBACd,eAAe,EAAE,IAAI;oBACrB,QAAQ,EAAE,EAAE;oBACZ,UAAU;iBACX,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,sDAAsD;YACtD,4DAA4D;YAC5D,wCAAwC;YACxC,MAAM,UAAU,GAA4B,EAAE,CAAC;YAC/C,IAAI,WAAW,KAAK,SAAS;gBAAE,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC;YAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBAAE,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YAC7D,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACrC,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAC9C,CAAC;YACD,2DAA2D;YAC3D,0DAA0D;YAC1D,+DAA+D;YAC/D,4DAA4D;YAC5D,4DAA4D;YAC5D,sBAAsB;YACtB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,UAAU,CAClB,2EAA2E,EAC3E,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAClD,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,yBAAyB,EACzB,EAAE,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,EACtC,EAAE,aAAa,EAAE,iBAAiB,EAAE,CACrC,CAAC;YACF,MAAM,IAAI,GAAG,aAAa,CACxB,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3C;gBACE,OAAO,EAAE,sDAAsD;gBAC/D,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC7C,IAAI,EACF,wDAAwD;oBACxD,yDAAyD;oBACzD,iCAAiC;aACpC,CACF,CAAC;YACF,4DAA4D;YAC5D,0DAA0D;YAC1D,0DAA0D;YAC1D,yDAAyD;YACzD,8DAA8D;YAC9D,2DAA2D;YAC3D,qCAAqC;YACrC,0BAA0B,CAAC;gBACzB,IAAI;gBACJ,GAAG,EAAE,kBAAkB;gBACvB,cAAc,EAAE,iBAAiB;gBACjC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC7C,YAAY,EAAE,gBAAgB;aAC/B,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,uBAAuB,CACvC,IAAI,CAAC,gBAAgB,EACrB,MAAM,CAAC,WAAW,CACnB,CAAC;YAEF,YAAY,CAAC;gBACX,GAAG;gBACH,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,sBAAsB,CAAC,YAAY;gBAC3C,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC3B,QAAQ,EAAE,EAAE;gBACZ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACnB,MAAM,EAAE,MAAM;gBACd,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACF,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,GAAY,EACZ,WAAmB,EACI,EAAE;IACzB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAChB,WAAW,EACX,qEAAqE,WAAW,EAAE,EAClF,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAClB,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAAC,EAC1C;QACE,OAAO,EAAE,wDAAwD,WAAW,EAAE;QAC9E,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;KACvC,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credentials cache primitive for the v0.3-M21 `monday auth login` /
|
|
3
|
+
* `monday auth logout` verbs (cli-design §7.4 — closes Decision 3).
|
|
4
|
+
*
|
|
5
|
+
* **What this module owns.** The mode-`0600` per-profile credentials
|
|
6
|
+
* file at `~/.monday-cli/credentials`, read/write/delete primitives,
|
|
7
|
+
* and the per-profile token-source-order resolver
|
|
8
|
+
* (§7.4.1: credentials cache > `api_token_env` > `config_error`).
|
|
9
|
+
*
|
|
10
|
+
* **What this module does NOT own.** The credentials file shape is
|
|
11
|
+
* intentionally orthogonal to:
|
|
12
|
+
* - the OAuth wire flow (`src/api/oauth.ts`),
|
|
13
|
+
* - the TOML profile loader (`src/config/profiles.ts`),
|
|
14
|
+
* - the redaction layer (`src/utils/redact.ts`).
|
|
15
|
+
*
|
|
16
|
+
* **Mirrors `src/api/cache.ts writeJsonFile` verbatim** per cli-design
|
|
17
|
+
* §7.4.2. The R-candidate "secure-file primitive shared between cache
|
|
18
|
+
* + credentials" (v0.3-plan §22) flags consolidation when a third
|
|
19
|
+
* consumer lands; today's two-consumer state stays below threshold,
|
|
20
|
+
* so this module duplicates the disk-discipline shape rather than
|
|
21
|
+
* extracting it. The duplication is intentional and the §7.4.2
|
|
22
|
+
* "mirror verbatim" wording is the in-design backstop.
|
|
23
|
+
*
|
|
24
|
+
* **Disk discipline (§7.4.2):**
|
|
25
|
+
*
|
|
26
|
+
* 1. `mkdir({ recursive: true, mode: 0o700 })` + explicit `chmod
|
|
27
|
+
* 0o700` on the parent dir (advisory under umask on some
|
|
28
|
+
* platforms; mirrors `src/api/cache.ts`).
|
|
29
|
+
* 2. Atomic-replace via `writeFile(tmp, payload, { mode: 0o600 })`
|
|
30
|
+
* → `chmod(tmp, 0o600)` → `rename(tmp, final)`.
|
|
31
|
+
* 3. Read-time `fs.fstat`-against-open-descriptor permission check
|
|
32
|
+
* (`(stats.mode & 0o077) !== 0` → refuse, surface
|
|
33
|
+
* `config_error` with `details.path` + `details.hint`).
|
|
34
|
+
*/
|
|
35
|
+
import { z } from 'zod';
|
|
36
|
+
/**
|
|
37
|
+
* File-mode constant for the credentials file. Mirrors
|
|
38
|
+
* `src/api/cache.ts CACHE_FILE_MODE`. The R-candidate consolidation
|
|
39
|
+
* (v0.3-plan §22) would re-export this from a shared `secure-file`
|
|
40
|
+
* primitive; the constant lives here for pre-flight to keep the two
|
|
41
|
+
* surfaces independent.
|
|
42
|
+
*/
|
|
43
|
+
export declare const CREDENTIALS_FILE_MODE = 384;
|
|
44
|
+
/**
|
|
45
|
+
* Bitmask used to detect group/world readable bits on read. A non-
|
|
46
|
+
* zero result means the file is loose; the read path refuses to
|
|
47
|
+
* open it.
|
|
48
|
+
*/
|
|
49
|
+
export declare const CREDENTIALS_INSECURE_BITS = 63;
|
|
50
|
+
/**
|
|
51
|
+
* Pinned at `"1"` for v0.3; reserved for a future migration if the
|
|
52
|
+
* per-profile shape grows incompatibly. Mirrors the cache module's
|
|
53
|
+
* `CACHE_SCHEMA_VERSION`.
|
|
54
|
+
*/
|
|
55
|
+
export declare const CREDENTIALS_SCHEMA_VERSION = "1";
|
|
56
|
+
/** Filename under `~/.monday-cli/`. Pinned for HOME-scoping. */
|
|
57
|
+
export declare const CREDENTIALS_FILE_NAME = "credentials";
|
|
58
|
+
/** Parent directory under HOME. Pinned to match cli-design §7.4.2. */
|
|
59
|
+
export declare const CREDENTIALS_DIR_NAME = ".monday-cli";
|
|
60
|
+
/**
|
|
61
|
+
* Per-profile credentials entry per cli-design §7.4.1.
|
|
62
|
+
*/
|
|
63
|
+
export declare const profileEntrySchema: z.ZodObject<{
|
|
64
|
+
access_token: z.ZodString;
|
|
65
|
+
obtained_at: z.ZodString;
|
|
66
|
+
expires_at: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
|
|
67
|
+
scopes: z.ZodArray<z.ZodString>;
|
|
68
|
+
account_id: z.ZodString;
|
|
69
|
+
}, z.core.$strict>;
|
|
70
|
+
export type ProfileEntry = z.infer<typeof profileEntrySchema>;
|
|
71
|
+
/**
|
|
72
|
+
* Top-level credentials file shape per cli-design §7.4.1.
|
|
73
|
+
*
|
|
74
|
+
* **`schema_version` pinned to literal `"1"`** so a future-version
|
|
75
|
+
* credentials file (e.g., `"2"` after a v0.4 schema change) fails
|
|
76
|
+
* parse-time at this security-bearing surface rather than passing
|
|
77
|
+
* through and getting reinterpreted under the v0.3 schema.
|
|
78
|
+
*/
|
|
79
|
+
export declare const credentialsFileSchema: z.ZodObject<{
|
|
80
|
+
schema_version: z.ZodLiteral<"1">;
|
|
81
|
+
profiles: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
82
|
+
access_token: z.ZodString;
|
|
83
|
+
obtained_at: z.ZodString;
|
|
84
|
+
expires_at: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
|
|
85
|
+
scopes: z.ZodArray<z.ZodString>;
|
|
86
|
+
account_id: z.ZodString;
|
|
87
|
+
}, z.core.$strict>>;
|
|
88
|
+
}, z.core.$strict>;
|
|
89
|
+
export type CredentialsFile = z.infer<typeof credentialsFileSchema>;
|
|
90
|
+
/**
|
|
91
|
+
* Discriminated union for the per-profile token source. Mirrors the
|
|
92
|
+
* §7.4.1 source order: `credentials cache > api_token_env >
|
|
93
|
+
* config_error`.
|
|
94
|
+
*/
|
|
95
|
+
export type ProfileTokenSource = 'credentials_cache' | 'api_token_env';
|
|
96
|
+
export interface ResolvedProfileToken {
|
|
97
|
+
readonly token: string;
|
|
98
|
+
readonly source: ProfileTokenSource;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Common options object for every read/write helper — the `home`
|
|
102
|
+
* override exists so tests can drop a fixture file under a tmp dir
|
|
103
|
+
* without touching the real `~/.monday-cli/`. `env` mirrors the
|
|
104
|
+
* cache layer's existing test-isolation pattern.
|
|
105
|
+
*/
|
|
106
|
+
export interface CredentialsRootOptions {
|
|
107
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
108
|
+
readonly home?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Inputs to {@link setProfileCredentials} — the read-modify-write
|
|
112
|
+
* convenience used by `monday auth login`. Decoupled from the raw
|
|
113
|
+
* `writeCredentials` so callers don't have to load-then-modify-then-
|
|
114
|
+
* write themselves; the helper handles the missing-file case (creates
|
|
115
|
+
* a fresh file with one profile) and the existing-file case (merges
|
|
116
|
+
* the entry into the existing profiles map).
|
|
117
|
+
*/
|
|
118
|
+
export interface SetProfileCredentialsInputs {
|
|
119
|
+
readonly profileName: string;
|
|
120
|
+
readonly entry: ProfileEntry;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Resolves the absolute credentials-file path. Pure helper — does
|
|
124
|
+
* not touch the filesystem.
|
|
125
|
+
*/
|
|
126
|
+
export declare const resolveCredentialsPath: (options?: CredentialsRootOptions) => string;
|
|
127
|
+
/**
|
|
128
|
+
* Reads the credentials file, parses it through
|
|
129
|
+
* {@link credentialsFileSchema}, and returns the parsed shape.
|
|
130
|
+
*
|
|
131
|
+
* Returns `undefined` when the file does not exist (typical first-
|
|
132
|
+
* run state). Throws `config_error` for every other failure mode
|
|
133
|
+
* (insecure mode, malformed JSON, schema mismatch).
|
|
134
|
+
*/
|
|
135
|
+
export declare const readCredentials: (options?: CredentialsRootOptions) => Promise<CredentialsFile | undefined>;
|
|
136
|
+
/**
|
|
137
|
+
* Atomically writes the credentials file. Mirrors `src/api/cache.ts
|
|
138
|
+
* writeEntry` verbatim:
|
|
139
|
+
*
|
|
140
|
+
* 1. `mkdir({ recursive: true, mode: 0o700 })` + `chmod 0o700`.
|
|
141
|
+
* 2. `writeFile(tmpPath, payload, { mode: 0o600 })`.
|
|
142
|
+
* 3. `chmod(tmpPath, 0o600)` (re-applied because `writeFile`'s
|
|
143
|
+
* `mode` is advisory under umask).
|
|
144
|
+
* 4. `rename(tmpPath, finalPath)` (atomic on the same filesystem).
|
|
145
|
+
*
|
|
146
|
+
* Best-effort cleanup of `tmpPath` on any failure so a half-written
|
|
147
|
+
* `.tmp` doesn't accumulate.
|
|
148
|
+
*/
|
|
149
|
+
export declare const writeCredentials: (file: CredentialsFile, options?: CredentialsRootOptions) => Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Read-modify-write convenience for `monday auth login`'s success
|
|
152
|
+
* path. Loads the existing file (or starts a fresh `{schema_version,
|
|
153
|
+
* profiles: {}}` if absent), inserts/replaces the named profile's
|
|
154
|
+
* entry, and writes the result back via {@link writeCredentials}.
|
|
155
|
+
*/
|
|
156
|
+
export declare const setProfileCredentials: (inputs: SetProfileCredentialsInputs, options?: CredentialsRootOptions) => Promise<void>;
|
|
157
|
+
/**
|
|
158
|
+
* Idempotent profile delete for `monday auth logout`. Loads the
|
|
159
|
+
* file (no-op if file is absent), removes the named profile from
|
|
160
|
+
* `profiles`, writes the result back. When the post-delete
|
|
161
|
+
* `profiles` map is empty, **still writes
|
|
162
|
+
* `{schema_version, profiles: {}}`** rather than deleting the file
|
|
163
|
+
* outright (per cli-design §7.3.2 — keeps the schema-version pin
|
|
164
|
+
* discoverable + avoids a fresh-install vs all-logged-out
|
|
165
|
+
* ambiguity).
|
|
166
|
+
*
|
|
167
|
+
* Returns whether the named profile was present pre-delete — the
|
|
168
|
+
* caller surfaces this in the success envelope's `was_present`
|
|
169
|
+
* slot.
|
|
170
|
+
*/
|
|
171
|
+
export declare const deleteProfileCredentials: (profileName: string, options?: CredentialsRootOptions) => Promise<{
|
|
172
|
+
readonly wasPresent: boolean;
|
|
173
|
+
}>;
|
|
174
|
+
/**
|
|
175
|
+
* Per-profile token-source resolver per cli-design §7.4.1 source
|
|
176
|
+
* order: credentials cache > `api_token_env` > `config_error`.
|
|
177
|
+
*
|
|
178
|
+
* The credentials cache wins over `api_token_env` because
|
|
179
|
+
* `monday auth login` is the explicit user action that wrote the
|
|
180
|
+
* cache; honouring it without requiring a config-file edit is the
|
|
181
|
+
* agent-ergonomic default. `monday auth logout --profile <name>`
|
|
182
|
+
* removes the cache entry, restoring the env-fallback path.
|
|
183
|
+
*/
|
|
184
|
+
export interface ResolveProfileTokenInputs {
|
|
185
|
+
readonly profileName: string;
|
|
186
|
+
readonly apiTokenEnvName: string | undefined;
|
|
187
|
+
}
|
|
188
|
+
export declare const resolveProfileToken: (inputs: ResolveProfileTokenInputs, options?: CredentialsRootOptions) => Promise<ResolvedProfileToken>;
|
|
189
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAOH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,MAAQ,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,KAAQ,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AAEnD,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;kBAQpB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;kBAKvB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AAUD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAS,sBAA2B,KACnC,MAGF,CAAC;AAKF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAS,sBAA2B,KACnC,OAAO,CAAC,eAAe,GAAG,SAAS,CA8DrC,CAAC;AAoBF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,eAAe,EACrB,UAAS,sBAA2B,KACnC,OAAO,CAAC,IAAI,CA0Bd,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,2BAA2B,EACnC,UAAS,sBAA2B,KACnC,OAAO,CAAC,IAAI,CAUd,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,GACnC,aAAa,MAAM,EACnB,UAAS,sBAA2B,KACnC,OAAO,CAAC;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAqB1C,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,yBAAyB,EACjC,UAAS,sBAA2B,KACnC,OAAO,CAAC,oBAAoB,CA2B9B,CAAC"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credentials cache primitive for the v0.3-M21 `monday auth login` /
|
|
3
|
+
* `monday auth logout` verbs (cli-design §7.4 — closes Decision 3).
|
|
4
|
+
*
|
|
5
|
+
* **What this module owns.** The mode-`0600` per-profile credentials
|
|
6
|
+
* file at `~/.monday-cli/credentials`, read/write/delete primitives,
|
|
7
|
+
* and the per-profile token-source-order resolver
|
|
8
|
+
* (§7.4.1: credentials cache > `api_token_env` > `config_error`).
|
|
9
|
+
*
|
|
10
|
+
* **What this module does NOT own.** The credentials file shape is
|
|
11
|
+
* intentionally orthogonal to:
|
|
12
|
+
* - the OAuth wire flow (`src/api/oauth.ts`),
|
|
13
|
+
* - the TOML profile loader (`src/config/profiles.ts`),
|
|
14
|
+
* - the redaction layer (`src/utils/redact.ts`).
|
|
15
|
+
*
|
|
16
|
+
* **Mirrors `src/api/cache.ts writeJsonFile` verbatim** per cli-design
|
|
17
|
+
* §7.4.2. The R-candidate "secure-file primitive shared between cache
|
|
18
|
+
* + credentials" (v0.3-plan §22) flags consolidation when a third
|
|
19
|
+
* consumer lands; today's two-consumer state stays below threshold,
|
|
20
|
+
* so this module duplicates the disk-discipline shape rather than
|
|
21
|
+
* extracting it. The duplication is intentional and the §7.4.2
|
|
22
|
+
* "mirror verbatim" wording is the in-design backstop.
|
|
23
|
+
*
|
|
24
|
+
* **Disk discipline (§7.4.2):**
|
|
25
|
+
*
|
|
26
|
+
* 1. `mkdir({ recursive: true, mode: 0o700 })` + explicit `chmod
|
|
27
|
+
* 0o700` on the parent dir (advisory under umask on some
|
|
28
|
+
* platforms; mirrors `src/api/cache.ts`).
|
|
29
|
+
* 2. Atomic-replace via `writeFile(tmp, payload, { mode: 0o600 })`
|
|
30
|
+
* → `chmod(tmp, 0o600)` → `rename(tmp, final)`.
|
|
31
|
+
* 3. Read-time `fs.fstat`-against-open-descriptor permission check
|
|
32
|
+
* (`(stats.mode & 0o077) !== 0` → refuse, surface
|
|
33
|
+
* `config_error` with `details.path` + `details.hint`).
|
|
34
|
+
*/
|
|
35
|
+
import { constants as fsConstants } from 'node:fs';
|
|
36
|
+
import { chmod, mkdir, open, rename, unlink, writeFile } from 'node:fs/promises';
|
|
37
|
+
import { homedir } from 'node:os';
|
|
38
|
+
import { join } from 'node:path';
|
|
39
|
+
import { randomUUID } from 'node:crypto';
|
|
40
|
+
import { z } from 'zod';
|
|
41
|
+
import { ConfigError, asError } from '../utils/errors.js';
|
|
42
|
+
import { formatMode, isENOENT } from '../utils/fs.js';
|
|
43
|
+
/**
|
|
44
|
+
* File-mode constant for the credentials file. Mirrors
|
|
45
|
+
* `src/api/cache.ts CACHE_FILE_MODE`. The R-candidate consolidation
|
|
46
|
+
* (v0.3-plan §22) would re-export this from a shared `secure-file`
|
|
47
|
+
* primitive; the constant lives here for pre-flight to keep the two
|
|
48
|
+
* surfaces independent.
|
|
49
|
+
*/
|
|
50
|
+
export const CREDENTIALS_FILE_MODE = 0o600;
|
|
51
|
+
/**
|
|
52
|
+
* Bitmask used to detect group/world readable bits on read. A non-
|
|
53
|
+
* zero result means the file is loose; the read path refuses to
|
|
54
|
+
* open it.
|
|
55
|
+
*/
|
|
56
|
+
export const CREDENTIALS_INSECURE_BITS = 0o077;
|
|
57
|
+
/**
|
|
58
|
+
* Pinned at `"1"` for v0.3; reserved for a future migration if the
|
|
59
|
+
* per-profile shape grows incompatibly. Mirrors the cache module's
|
|
60
|
+
* `CACHE_SCHEMA_VERSION`.
|
|
61
|
+
*/
|
|
62
|
+
export const CREDENTIALS_SCHEMA_VERSION = '1';
|
|
63
|
+
/** Filename under `~/.monday-cli/`. Pinned for HOME-scoping. */
|
|
64
|
+
export const CREDENTIALS_FILE_NAME = 'credentials';
|
|
65
|
+
/** Parent directory under HOME. Pinned to match cli-design §7.4.2. */
|
|
66
|
+
export const CREDENTIALS_DIR_NAME = '.monday-cli';
|
|
67
|
+
/**
|
|
68
|
+
* Per-profile credentials entry per cli-design §7.4.1.
|
|
69
|
+
*/
|
|
70
|
+
export const profileEntrySchema = z
|
|
71
|
+
.object({
|
|
72
|
+
access_token: z.string().min(1),
|
|
73
|
+
obtained_at: z.string().min(1),
|
|
74
|
+
expires_at: z.union([z.string(), z.null()]),
|
|
75
|
+
scopes: z.array(z.string()),
|
|
76
|
+
account_id: z.string().min(1),
|
|
77
|
+
})
|
|
78
|
+
.strict();
|
|
79
|
+
/**
|
|
80
|
+
* Top-level credentials file shape per cli-design §7.4.1.
|
|
81
|
+
*
|
|
82
|
+
* **`schema_version` pinned to literal `"1"`** so a future-version
|
|
83
|
+
* credentials file (e.g., `"2"` after a v0.4 schema change) fails
|
|
84
|
+
* parse-time at this security-bearing surface rather than passing
|
|
85
|
+
* through and getting reinterpreted under the v0.3 schema.
|
|
86
|
+
*/
|
|
87
|
+
export const credentialsFileSchema = z
|
|
88
|
+
.object({
|
|
89
|
+
schema_version: z.literal(CREDENTIALS_SCHEMA_VERSION),
|
|
90
|
+
profiles: z.record(z.string().min(1), profileEntrySchema),
|
|
91
|
+
})
|
|
92
|
+
.strict();
|
|
93
|
+
const wrapAsConfigError = (err, message, details = {}) => {
|
|
94
|
+
return new ConfigError(message, { cause: asError(err), details });
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Resolves the absolute credentials-file path. Pure helper — does
|
|
98
|
+
* not touch the filesystem.
|
|
99
|
+
*/
|
|
100
|
+
export const resolveCredentialsPath = (options = {}) => {
|
|
101
|
+
const home = options.home ?? homedir();
|
|
102
|
+
return join(home, CREDENTIALS_DIR_NAME, CREDENTIALS_FILE_NAME);
|
|
103
|
+
};
|
|
104
|
+
const credentialsDirPath = (options) => join(options.home ?? homedir(), CREDENTIALS_DIR_NAME);
|
|
105
|
+
/**
|
|
106
|
+
* Reads the credentials file, parses it through
|
|
107
|
+
* {@link credentialsFileSchema}, and returns the parsed shape.
|
|
108
|
+
*
|
|
109
|
+
* Returns `undefined` when the file does not exist (typical first-
|
|
110
|
+
* run state). Throws `config_error` for every other failure mode
|
|
111
|
+
* (insecure mode, malformed JSON, schema mismatch).
|
|
112
|
+
*/
|
|
113
|
+
export const readCredentials = async (options = {}) => {
|
|
114
|
+
const fullPath = resolveCredentialsPath(options);
|
|
115
|
+
let handle;
|
|
116
|
+
try {
|
|
117
|
+
handle = await open(fullPath, fsConstants.O_RDONLY);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
if (isENOENT(err)) {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
throw wrapAsConfigError(err, `cannot read credentials file ${fullPath}`, {
|
|
124
|
+
path: fullPath,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const stats = await handle.stat();
|
|
129
|
+
if ((stats.mode & CREDENTIALS_INSECURE_BITS) !== 0) {
|
|
130
|
+
throw new ConfigError(`refusing to read credentials file with insecure permissions ${formatMode(stats.mode)}`, {
|
|
131
|
+
details: {
|
|
132
|
+
path: fullPath,
|
|
133
|
+
mode: formatMode(stats.mode),
|
|
134
|
+
hint: `permissions must be 0600 — run \`chmod 600 ${fullPath}\``,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const raw = await handle.readFile('utf8');
|
|
139
|
+
let parsed;
|
|
140
|
+
try {
|
|
141
|
+
parsed = JSON.parse(raw);
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
throw wrapAsConfigError(err, `malformed JSON in credentials file ${fullPath}`, {
|
|
145
|
+
path: fullPath,
|
|
146
|
+
hint: `delete the file and re-run \`monday auth login --profile <name>\``,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const result = credentialsFileSchema.safeParse(parsed);
|
|
150
|
+
if (!result.success) {
|
|
151
|
+
const issues = result.error.issues.map((i) => ({
|
|
152
|
+
path: i.path.join('.'),
|
|
153
|
+
message: i.message,
|
|
154
|
+
code: i.code,
|
|
155
|
+
}));
|
|
156
|
+
throw new ConfigError(`credentials file does not conform to v${CREDENTIALS_SCHEMA_VERSION} schema`, {
|
|
157
|
+
cause: result.error,
|
|
158
|
+
details: {
|
|
159
|
+
path: fullPath,
|
|
160
|
+
issues,
|
|
161
|
+
hint: `delete the file and re-run \`monday auth login --profile <name>\``,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
return result.data;
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
await handle.close();
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
const ensureSecureDir = async (path) => {
|
|
172
|
+
// mkdir respects umask, so the explicit `mode` is advisory on some
|
|
173
|
+
// platforms. Re-apply via chmod so a tightened-after-creation
|
|
174
|
+
// directory doesn't betray credentials to another user.
|
|
175
|
+
try {
|
|
176
|
+
await mkdir(path, { recursive: true, mode: 0o700 });
|
|
177
|
+
await chmod(path, 0o700);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
// Disk-full / permissions-denied path; not reproducible from a
|
|
181
|
+
// unit test against a tmp dir.
|
|
182
|
+
/* c8 ignore start */
|
|
183
|
+
throw wrapAsConfigError(err, `cannot prepare credentials directory ${path}`, {
|
|
184
|
+
path,
|
|
185
|
+
});
|
|
186
|
+
/* c8 ignore stop */
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Atomically writes the credentials file. Mirrors `src/api/cache.ts
|
|
191
|
+
* writeEntry` verbatim:
|
|
192
|
+
*
|
|
193
|
+
* 1. `mkdir({ recursive: true, mode: 0o700 })` + `chmod 0o700`.
|
|
194
|
+
* 2. `writeFile(tmpPath, payload, { mode: 0o600 })`.
|
|
195
|
+
* 3. `chmod(tmpPath, 0o600)` (re-applied because `writeFile`'s
|
|
196
|
+
* `mode` is advisory under umask).
|
|
197
|
+
* 4. `rename(tmpPath, finalPath)` (atomic on the same filesystem).
|
|
198
|
+
*
|
|
199
|
+
* Best-effort cleanup of `tmpPath` on any failure so a half-written
|
|
200
|
+
* `.tmp` doesn't accumulate.
|
|
201
|
+
*/
|
|
202
|
+
export const writeCredentials = async (file, options = {}) => {
|
|
203
|
+
// Re-validate before write so a caller passing a malformed shape
|
|
204
|
+
// (e.g., a hand-built object that bypassed the schema) can't slip
|
|
205
|
+
// a bad file onto disk.
|
|
206
|
+
const validated = credentialsFileSchema.parse(file);
|
|
207
|
+
const fullPath = resolveCredentialsPath(options);
|
|
208
|
+
const dir = credentialsDirPath(options);
|
|
209
|
+
await ensureSecureDir(dir);
|
|
210
|
+
const payload = JSON.stringify(validated, null, 2);
|
|
211
|
+
const tmpPath = `${fullPath}.${randomUUID()}.tmp`;
|
|
212
|
+
try {
|
|
213
|
+
await writeFile(tmpPath, payload, { mode: CREDENTIALS_FILE_MODE });
|
|
214
|
+
await chmod(tmpPath, CREDENTIALS_FILE_MODE);
|
|
215
|
+
await rename(tmpPath, fullPath);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
// Disk-full / atomic-rename failure path; not reproducible from a
|
|
219
|
+
// unit test against a tmp dir.
|
|
220
|
+
/* c8 ignore start */
|
|
221
|
+
await unlink(tmpPath).catch(() => undefined);
|
|
222
|
+
throw wrapAsConfigError(err, `cannot write credentials file ${fullPath}`, {
|
|
223
|
+
path: fullPath,
|
|
224
|
+
});
|
|
225
|
+
/* c8 ignore stop */
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Read-modify-write convenience for `monday auth login`'s success
|
|
230
|
+
* path. Loads the existing file (or starts a fresh `{schema_version,
|
|
231
|
+
* profiles: {}}` if absent), inserts/replaces the named profile's
|
|
232
|
+
* entry, and writes the result back via {@link writeCredentials}.
|
|
233
|
+
*/
|
|
234
|
+
export const setProfileCredentials = async (inputs, options = {}) => {
|
|
235
|
+
const existing = await readCredentials(options);
|
|
236
|
+
const next = {
|
|
237
|
+
schema_version: CREDENTIALS_SCHEMA_VERSION,
|
|
238
|
+
profiles: {
|
|
239
|
+
...(existing?.profiles ?? {}),
|
|
240
|
+
[inputs.profileName]: inputs.entry,
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
await writeCredentials(next, options);
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Idempotent profile delete for `monday auth logout`. Loads the
|
|
247
|
+
* file (no-op if file is absent), removes the named profile from
|
|
248
|
+
* `profiles`, writes the result back. When the post-delete
|
|
249
|
+
* `profiles` map is empty, **still writes
|
|
250
|
+
* `{schema_version, profiles: {}}`** rather than deleting the file
|
|
251
|
+
* outright (per cli-design §7.3.2 — keeps the schema-version pin
|
|
252
|
+
* discoverable + avoids a fresh-install vs all-logged-out
|
|
253
|
+
* ambiguity).
|
|
254
|
+
*
|
|
255
|
+
* Returns whether the named profile was present pre-delete — the
|
|
256
|
+
* caller surfaces this in the success envelope's `was_present`
|
|
257
|
+
* slot.
|
|
258
|
+
*/
|
|
259
|
+
export const deleteProfileCredentials = async (profileName, options = {}) => {
|
|
260
|
+
const existing = await readCredentials(options);
|
|
261
|
+
if (existing === undefined) {
|
|
262
|
+
return { wasPresent: false };
|
|
263
|
+
}
|
|
264
|
+
const wasPresent = Object.prototype.hasOwnProperty.call(existing.profiles, profileName);
|
|
265
|
+
if (!wasPresent) {
|
|
266
|
+
return { wasPresent: false };
|
|
267
|
+
}
|
|
268
|
+
const nextProfiles = Object.fromEntries(Object.entries(existing.profiles).filter(([key]) => key !== profileName));
|
|
269
|
+
const next = {
|
|
270
|
+
schema_version: CREDENTIALS_SCHEMA_VERSION,
|
|
271
|
+
profiles: nextProfiles,
|
|
272
|
+
};
|
|
273
|
+
await writeCredentials(next, options);
|
|
274
|
+
return { wasPresent: true };
|
|
275
|
+
};
|
|
276
|
+
export const resolveProfileToken = async (inputs, options = {}) => {
|
|
277
|
+
const credentials = await readCredentials(options);
|
|
278
|
+
const cached = credentials?.profiles[inputs.profileName];
|
|
279
|
+
if (cached !== undefined) {
|
|
280
|
+
return { token: cached.access_token, source: 'credentials_cache' };
|
|
281
|
+
}
|
|
282
|
+
if (inputs.apiTokenEnvName !== undefined) {
|
|
283
|
+
const env = options.env ?? process.env;
|
|
284
|
+
const fromEnv = env[inputs.apiTokenEnvName];
|
|
285
|
+
if (fromEnv !== undefined && fromEnv.length > 0) {
|
|
286
|
+
return { token: fromEnv, source: 'api_token_env' };
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const hint = inputs.apiTokenEnvName !== undefined
|
|
290
|
+
? `no token for profile \`${inputs.profileName}\` — run \`monday auth login --profile ${inputs.profileName}\` or set ${inputs.apiTokenEnvName}`
|
|
291
|
+
: `no token for profile \`${inputs.profileName}\` — run \`monday auth login --profile ${inputs.profileName}\``;
|
|
292
|
+
throw new ConfigError(`no credentials available for profile \`${inputs.profileName}\``, {
|
|
293
|
+
details: {
|
|
294
|
+
profile: inputs.profileName,
|
|
295
|
+
api_token_env: inputs.apiTokenEnvName ?? null,
|
|
296
|
+
hint,
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
};
|
|
300
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"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"}
|