monday-cli 0.2.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 +439 -0
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/dist/api/board-child-finder.d.ts +95 -0
- package/dist/api/board-child-finder.d.ts.map +1 -0
- package/dist/api/board-child-finder.js +89 -0
- package/dist/api/board-child-finder.js.map +1 -0
- package/dist/api/board-metadata.d.ts +162 -0
- package/dist/api/board-metadata.d.ts.map +1 -0
- package/dist/api/board-metadata.js +238 -0
- package/dist/api/board-metadata.js.map +1 -0
- package/dist/api/board-mutation-invalidation.d.ts +153 -0
- package/dist/api/board-mutation-invalidation.d.ts.map +1 -0
- package/dist/api/board-mutation-invalidation.js +136 -0
- package/dist/api/board-mutation-invalidation.js.map +1 -0
- package/dist/api/board-mutation-result.d.ts +97 -0
- package/dist/api/board-mutation-result.d.ts.map +1 -0
- package/dist/api/board-mutation-result.js +99 -0
- package/dist/api/board-mutation-result.js.map +1 -0
- package/dist/api/board-projection.d.ts +68 -0
- package/dist/api/board-projection.d.ts.map +1 -0
- package/dist/api/board-projection.js +79 -0
- package/dist/api/board-projection.js.map +1 -0
- package/dist/api/cache.d.ts +150 -0
- package/dist/api/cache.d.ts.map +1 -0
- package/dist/api/cache.js +418 -0
- package/dist/api/cache.js.map +1 -0
- package/dist/api/client.d.ts +162 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +205 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/column-mapping.d.ts +68 -0
- package/dist/api/column-mapping.d.ts.map +1 -0
- package/dist/api/column-mapping.js +117 -0
- package/dist/api/column-mapping.js.map +1 -0
- package/dist/api/column-mutation-result.d.ts +136 -0
- package/dist/api/column-mutation-result.d.ts.map +1 -0
- package/dist/api/column-mutation-result.js +130 -0
- package/dist/api/column-mutation-result.js.map +1 -0
- package/dist/api/column-types.d.ts +215 -0
- package/dist/api/column-types.d.ts.map +1 -0
- package/dist/api/column-types.js +195 -0
- package/dist/api/column-types.js.map +1 -0
- package/dist/api/column-values.d.ts +446 -0
- package/dist/api/column-values.d.ts.map +1 -0
- package/dist/api/column-values.js +795 -0
- package/dist/api/column-values.js.map +1 -0
- package/dist/api/columns.d.ts +205 -0
- package/dist/api/columns.d.ts.map +1 -0
- package/dist/api/columns.js +343 -0
- package/dist/api/columns.js.map +1 -0
- package/dist/api/complexity.d.ts +90 -0
- package/dist/api/complexity.d.ts.map +1 -0
- package/dist/api/complexity.js +194 -0
- package/dist/api/complexity.js.map +1 -0
- package/dist/api/dates.d.ts +150 -0
- package/dist/api/dates.d.ts.map +1 -0
- package/dist/api/dates.js +490 -0
- package/dist/api/dates.js.map +1 -0
- package/dist/api/destructive-gate.d.ts +107 -0
- package/dist/api/destructive-gate.d.ts.map +1 -0
- package/dist/api/destructive-gate.js +19 -0
- package/dist/api/destructive-gate.js.map +1 -0
- package/dist/api/dry-run.d.ts +338 -0
- package/dist/api/dry-run.d.ts.map +1 -0
- package/dist/api/dry-run.js +607 -0
- package/dist/api/dry-run.js.map +1 -0
- package/dist/api/emails.d.ts +60 -0
- package/dist/api/emails.d.ts.map +1 -0
- package/dist/api/emails.js +113 -0
- package/dist/api/emails.js.map +1 -0
- package/dist/api/errors.d.ts +82 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +434 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/filters.d.ts +198 -0
- package/dist/api/filters.d.ts.map +1 -0
- package/dist/api/filters.js +328 -0
- package/dist/api/filters.js.map +1 -0
- package/dist/api/group-color.d.ts +33 -0
- package/dist/api/group-color.d.ts.map +1 -0
- package/dist/api/group-color.js +80 -0
- package/dist/api/group-color.js.map +1 -0
- package/dist/api/group-mutation-result.d.ts +150 -0
- package/dist/api/group-mutation-result.d.ts.map +1 -0
- package/dist/api/group-mutation-result.js +141 -0
- package/dist/api/group-mutation-result.js.map +1 -0
- package/dist/api/iso-country-codes.d.ts +45 -0
- package/dist/api/iso-country-codes.d.ts.map +1 -0
- package/dist/api/iso-country-codes.js +71 -0
- package/dist/api/iso-country-codes.js.map +1 -0
- package/dist/api/item-board-lookup.d.ts +86 -0
- package/dist/api/item-board-lookup.d.ts.map +1 -0
- package/dist/api/item-board-lookup.js +140 -0
- package/dist/api/item-board-lookup.js.map +1 -0
- package/dist/api/item-helpers.d.ts +133 -0
- package/dist/api/item-helpers.d.ts.map +1 -0
- package/dist/api/item-helpers.js +139 -0
- package/dist/api/item-helpers.js.map +1 -0
- package/dist/api/item-mutation-result.d.ts +60 -0
- package/dist/api/item-mutation-result.d.ts.map +1 -0
- package/dist/api/item-mutation-result.js +63 -0
- package/dist/api/item-mutation-result.js.map +1 -0
- package/dist/api/item-projection.d.ts +165 -0
- package/dist/api/item-projection.d.ts.map +1 -0
- package/dist/api/item-projection.js +235 -0
- package/dist/api/item-projection.js.map +1 -0
- package/dist/api/item-source-read.d.ts +45 -0
- package/dist/api/item-source-read.d.ts.map +1 -0
- package/dist/api/item-source-read.js +57 -0
- package/dist/api/item-source-read.js.map +1 -0
- package/dist/api/items-page-walker.d.ts +126 -0
- package/dist/api/items-page-walker.d.ts.map +1 -0
- package/dist/api/items-page-walker.js +256 -0
- package/dist/api/items-page-walker.js.map +1 -0
- package/dist/api/links.d.ts +70 -0
- package/dist/api/links.d.ts.map +1 -0
- package/dist/api/links.js +128 -0
- package/dist/api/links.js.map +1 -0
- package/dist/api/me-token.d.ts +52 -0
- package/dist/api/me-token.d.ts.map +1 -0
- package/dist/api/me-token.js +55 -0
- package/dist/api/me-token.js.map +1 -0
- package/dist/api/pagination.d.ts +201 -0
- package/dist/api/pagination.d.ts.map +1 -0
- package/dist/api/pagination.js +223 -0
- package/dist/api/pagination.js.map +1 -0
- package/dist/api/partial-success-mutation.d.ts +28 -0
- package/dist/api/partial-success-mutation.d.ts.map +1 -0
- package/dist/api/partial-success-mutation.js +68 -0
- package/dist/api/partial-success-mutation.js.map +1 -0
- package/dist/api/people.d.ts +182 -0
- package/dist/api/people.d.ts.map +1 -0
- package/dist/api/people.js +260 -0
- package/dist/api/people.js.map +1 -0
- package/dist/api/phones.d.ts +74 -0
- package/dist/api/phones.d.ts.map +1 -0
- package/dist/api/phones.js +167 -0
- package/dist/api/phones.js.map +1 -0
- package/dist/api/raw-document.d.ts +53 -0
- package/dist/api/raw-document.d.ts.map +1 -0
- package/dist/api/raw-document.js +177 -0
- package/dist/api/raw-document.js.map +1 -0
- package/dist/api/raw-write.d.ts +127 -0
- package/dist/api/raw-write.d.ts.map +1 -0
- package/dist/api/raw-write.js +233 -0
- package/dist/api/raw-write.js.map +1 -0
- package/dist/api/resolution-context.d.ts +32 -0
- package/dist/api/resolution-context.d.ts.map +1 -0
- package/dist/api/resolution-context.js +42 -0
- package/dist/api/resolution-context.js.map +1 -0
- package/dist/api/resolution-pass.d.ts +163 -0
- package/dist/api/resolution-pass.d.ts.map +1 -0
- package/dist/api/resolution-pass.js +254 -0
- package/dist/api/resolution-pass.js.map +1 -0
- package/dist/api/resolve-client.d.ts +69 -0
- package/dist/api/resolve-client.d.ts.map +1 -0
- package/dist/api/resolve-client.js +70 -0
- package/dist/api/resolve-client.js.map +1 -0
- package/dist/api/resolver-error-fold.d.ts +176 -0
- package/dist/api/resolver-error-fold.d.ts.map +1 -0
- package/dist/api/resolver-error-fold.js +230 -0
- package/dist/api/resolver-error-fold.js.map +1 -0
- package/dist/api/resolvers.d.ts +131 -0
- package/dist/api/resolvers.d.ts.map +1 -0
- package/dist/api/resolvers.js +262 -0
- package/dist/api/resolvers.js.map +1 -0
- package/dist/api/response-root.d.ts +65 -0
- package/dist/api/response-root.d.ts.map +1 -0
- package/dist/api/response-root.js +61 -0
- package/dist/api/response-root.js.map +1 -0
- package/dist/api/retry.d.ts +112 -0
- package/dist/api/retry.d.ts.map +1 -0
- package/dist/api/retry.js +181 -0
- package/dist/api/retry.js.map +1 -0
- package/dist/api/set-expression.d.ts +23 -0
- package/dist/api/set-expression.d.ts.map +1 -0
- package/dist/api/set-expression.js +31 -0
- package/dist/api/set-expression.js.map +1 -0
- package/dist/api/sort.d.ts +59 -0
- package/dist/api/sort.d.ts.map +1 -0
- package/dist/api/sort.js +73 -0
- package/dist/api/sort.js.map +1 -0
- package/dist/api/source-aggregator.d.ts +94 -0
- package/dist/api/source-aggregator.d.ts.map +1 -0
- package/dist/api/source-aggregator.js +111 -0
- package/dist/api/source-aggregator.js.map +1 -0
- package/dist/api/transport.d.ts +58 -0
- package/dist/api/transport.d.ts.map +1 -0
- package/dist/api/transport.js +190 -0
- package/dist/api/transport.js.map +1 -0
- package/dist/api/update-mutation-result.d.ts +133 -0
- package/dist/api/update-mutation-result.d.ts.map +1 -0
- package/dist/api/update-mutation-result.js +145 -0
- package/dist/api/update-mutation-result.js.map +1 -0
- package/dist/api/users-fan-out-mutation.d.ts +124 -0
- package/dist/api/users-fan-out-mutation.d.ts.map +1 -0
- package/dist/api/users-fan-out-mutation.js +331 -0
- package/dist/api/users-fan-out-mutation.js.map +1 -0
- package/dist/api/walk-pages.d.ts +91 -0
- package/dist/api/walk-pages.d.ts.map +1 -0
- package/dist/api/walk-pages.js +84 -0
- package/dist/api/walk-pages.js.map +1 -0
- package/dist/api/workspace-projection.d.ts +64 -0
- package/dist/api/workspace-projection.d.ts.map +1 -0
- package/dist/api/workspace-projection.js +83 -0
- package/dist/api/workspace-projection.js.map +1 -0
- package/dist/cli/envelope-out.d.ts +128 -0
- package/dist/cli/envelope-out.d.ts.map +1 -0
- package/dist/cli/envelope-out.js +146 -0
- package/dist/cli/envelope-out.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +27 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/program.d.ts +29 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +109 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/run.d.ts +108 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +105 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/commands/account/client-helper.d.ts +37 -0
- package/dist/commands/account/client-helper.d.ts.map +1 -0
- package/dist/commands/account/client-helper.js +55 -0
- package/dist/commands/account/client-helper.js.map +1 -0
- package/dist/commands/account/complexity.d.ts +29 -0
- package/dist/commands/account/complexity.d.ts.map +1 -0
- package/dist/commands/account/complexity.js +70 -0
- package/dist/commands/account/complexity.js.map +1 -0
- package/dist/commands/account/info.d.ts +36 -0
- package/dist/commands/account/info.d.ts.map +1 -0
- package/dist/commands/account/info.js +74 -0
- package/dist/commands/account/info.js.map +1 -0
- package/dist/commands/account/version.d.ts +44 -0
- package/dist/commands/account/version.d.ts.map +1 -0
- package/dist/commands/account/version.js +98 -0
- package/dist/commands/account/version.js.map +1 -0
- package/dist/commands/account/whoami.d.ts +34 -0
- package/dist/commands/account/whoami.d.ts.map +1 -0
- package/dist/commands/account/whoami.js +77 -0
- package/dist/commands/account/whoami.js.map +1 -0
- package/dist/commands/board/add-users.d.ts +60 -0
- package/dist/commands/board/add-users.d.ts.map +1 -0
- package/dist/commands/board/add-users.js +133 -0
- package/dist/commands/board/add-users.js.map +1 -0
- package/dist/commands/board/archive.d.ts +64 -0
- package/dist/commands/board/archive.d.ts.map +1 -0
- package/dist/commands/board/archive.js +226 -0
- package/dist/commands/board/archive.js.map +1 -0
- package/dist/commands/board/column-create.d.ts +146 -0
- package/dist/commands/board/column-create.d.ts.map +1 -0
- package/dist/commands/board/column-create.js +564 -0
- package/dist/commands/board/column-create.js.map +1 -0
- package/dist/commands/board/column-delete.d.ts +76 -0
- package/dist/commands/board/column-delete.d.ts.map +1 -0
- package/dist/commands/board/column-delete.js +224 -0
- package/dist/commands/board/column-delete.js.map +1 -0
- package/dist/commands/board/column-update.d.ts +92 -0
- package/dist/commands/board/column-update.d.ts.map +1 -0
- package/dist/commands/board/column-update.js +364 -0
- package/dist/commands/board/column-update.js.map +1 -0
- package/dist/commands/board/columns.d.ts +30 -0
- package/dist/commands/board/columns.d.ts.map +1 -0
- package/dist/commands/board/columns.js +102 -0
- package/dist/commands/board/columns.js.map +1 -0
- package/dist/commands/board/create.d.ts +67 -0
- package/dist/commands/board/create.d.ts.map +1 -0
- package/dist/commands/board/create.js +226 -0
- package/dist/commands/board/create.js.map +1 -0
- package/dist/commands/board/delete.d.ts +60 -0
- package/dist/commands/board/delete.d.ts.map +1 -0
- package/dist/commands/board/delete.js +192 -0
- package/dist/commands/board/delete.js.map +1 -0
- package/dist/commands/board/describe.d.ts +68 -0
- package/dist/commands/board/describe.d.ts.map +1 -0
- package/dist/commands/board/describe.js +241 -0
- package/dist/commands/board/describe.js.map +1 -0
- package/dist/commands/board/doctor.d.ts +108 -0
- package/dist/commands/board/doctor.d.ts.map +1 -0
- package/dist/commands/board/doctor.js +417 -0
- package/dist/commands/board/doctor.js.map +1 -0
- package/dist/commands/board/duplicate.d.ts +85 -0
- package/dist/commands/board/duplicate.d.ts.map +1 -0
- package/dist/commands/board/duplicate.js +281 -0
- package/dist/commands/board/duplicate.js.map +1 -0
- package/dist/commands/board/find.d.ts +47 -0
- package/dist/commands/board/find.d.ts.map +1 -0
- package/dist/commands/board/find.js +153 -0
- package/dist/commands/board/find.js.map +1 -0
- package/dist/commands/board/get.d.ts +41 -0
- package/dist/commands/board/get.d.ts.map +1 -0
- package/dist/commands/board/get.js +66 -0
- package/dist/commands/board/get.js.map +1 -0
- package/dist/commands/board/group-archive.d.ts +83 -0
- package/dist/commands/board/group-archive.d.ts.map +1 -0
- package/dist/commands/board/group-archive.js +264 -0
- package/dist/commands/board/group-archive.js.map +1 -0
- package/dist/commands/board/group-create.d.ts +118 -0
- package/dist/commands/board/group-create.d.ts.map +1 -0
- package/dist/commands/board/group-create.js +239 -0
- package/dist/commands/board/group-create.js.map +1 -0
- package/dist/commands/board/group-delete.d.ts +79 -0
- package/dist/commands/board/group-delete.d.ts.map +1 -0
- package/dist/commands/board/group-delete.js +222 -0
- package/dist/commands/board/group-delete.js.map +1 -0
- package/dist/commands/board/group-duplicate.d.ts +70 -0
- package/dist/commands/board/group-duplicate.d.ts.map +1 -0
- package/dist/commands/board/group-duplicate.js +219 -0
- package/dist/commands/board/group-duplicate.js.map +1 -0
- package/dist/commands/board/group-update.d.ts +145 -0
- package/dist/commands/board/group-update.d.ts.map +1 -0
- package/dist/commands/board/group-update.js +341 -0
- package/dist/commands/board/group-update.js.map +1 -0
- package/dist/commands/board/groups.d.ts +28 -0
- package/dist/commands/board/groups.d.ts.map +1 -0
- package/dist/commands/board/groups.js +85 -0
- package/dist/commands/board/groups.js.map +1 -0
- package/dist/commands/board/list.d.ts +39 -0
- package/dist/commands/board/list.d.ts.map +1 -0
- package/dist/commands/board/list.js +135 -0
- package/dist/commands/board/list.js.map +1 -0
- package/dist/commands/board/subscribers.d.ts +24 -0
- package/dist/commands/board/subscribers.d.ts.map +1 -0
- package/dist/commands/board/subscribers.js +89 -0
- package/dist/commands/board/subscribers.js.map +1 -0
- package/dist/commands/board/update.d.ts +82 -0
- package/dist/commands/board/update.d.ts.map +1 -0
- package/dist/commands/board/update.js +328 -0
- package/dist/commands/board/update.js.map +1 -0
- package/dist/commands/cache/clear.d.ts +34 -0
- package/dist/commands/cache/clear.d.ts.map +1 -0
- package/dist/commands/cache/clear.js +113 -0
- package/dist/commands/cache/clear.js.map +1 -0
- package/dist/commands/cache/list.d.ts +50 -0
- package/dist/commands/cache/list.d.ts.map +1 -0
- package/dist/commands/cache/list.js +77 -0
- package/dist/commands/cache/list.js.map +1 -0
- package/dist/commands/cache/stats.d.ts +22 -0
- package/dist/commands/cache/stats.d.ts.map +1 -0
- package/dist/commands/cache/stats.js +56 -0
- package/dist/commands/cache/stats.js.map +1 -0
- package/dist/commands/config/path.d.ts +22 -0
- package/dist/commands/config/path.d.ts.map +1 -0
- package/dist/commands/config/path.js +74 -0
- package/dist/commands/config/path.js.map +1 -0
- package/dist/commands/config/show.d.ts +61 -0
- package/dist/commands/config/show.d.ts.map +1 -0
- package/dist/commands/config/show.js +137 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/emit.d.ts +156 -0
- package/dist/commands/emit.d.ts.map +1 -0
- package/dist/commands/emit.js +212 -0
- package/dist/commands/emit.js.map +1 -0
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +195 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/item/archive.d.ts +81 -0
- package/dist/commands/item/archive.d.ts.map +1 -0
- package/dist/commands/item/archive.js +187 -0
- package/dist/commands/item/archive.js.map +1 -0
- package/dist/commands/item/clear.d.ts +140 -0
- package/dist/commands/item/clear.d.ts.map +1 -0
- package/dist/commands/item/clear.js +748 -0
- package/dist/commands/item/clear.js.map +1 -0
- package/dist/commands/item/create.d.ts +77 -0
- package/dist/commands/item/create.d.ts.map +1 -0
- package/dist/commands/item/create.js +802 -0
- package/dist/commands/item/create.js.map +1 -0
- package/dist/commands/item/delete.d.ts +82 -0
- package/dist/commands/item/delete.d.ts.map +1 -0
- package/dist/commands/item/delete.js +179 -0
- package/dist/commands/item/delete.js.map +1 -0
- package/dist/commands/item/duplicate.d.ts +117 -0
- package/dist/commands/item/duplicate.d.ts.map +1 -0
- package/dist/commands/item/duplicate.js +238 -0
- package/dist/commands/item/duplicate.js.map +1 -0
- package/dist/commands/item/find.d.ts +55 -0
- package/dist/commands/item/find.d.ts.map +1 -0
- package/dist/commands/item/find.js +231 -0
- package/dist/commands/item/find.js.map +1 -0
- package/dist/commands/item/get.d.ts +47 -0
- package/dist/commands/item/get.d.ts.map +1 -0
- package/dist/commands/item/get.js +66 -0
- package/dist/commands/item/get.js.map +1 -0
- package/dist/commands/item/list.d.ts +73 -0
- package/dist/commands/item/list.d.ts.map +1 -0
- package/dist/commands/item/list.js +284 -0
- package/dist/commands/item/list.js.map +1 -0
- package/dist/commands/item/move.d.ts +181 -0
- package/dist/commands/item/move.d.ts.map +1 -0
- package/dist/commands/item/move.js +560 -0
- package/dist/commands/item/move.js.map +1 -0
- package/dist/commands/item/search.d.ts +67 -0
- package/dist/commands/item/search.d.ts.map +1 -0
- package/dist/commands/item/search.js +322 -0
- package/dist/commands/item/search.js.map +1 -0
- package/dist/commands/item/set.d.ts +88 -0
- package/dist/commands/item/set.d.ts.map +1 -0
- package/dist/commands/item/set.js +387 -0
- package/dist/commands/item/set.js.map +1 -0
- package/dist/commands/item/subitems.d.ts +50 -0
- package/dist/commands/item/subitems.d.ts.map +1 -0
- package/dist/commands/item/subitems.js +86 -0
- package/dist/commands/item/subitems.js.map +1 -0
- package/dist/commands/item/update.d.ts +99 -0
- package/dist/commands/item/update.d.ts.map +1 -0
- package/dist/commands/item/update.js +884 -0
- package/dist/commands/item/update.js.map +1 -0
- package/dist/commands/item/upsert.d.ts +105 -0
- package/dist/commands/item/upsert.d.ts.map +1 -0
- package/dist/commands/item/upsert.js +998 -0
- package/dist/commands/item/upsert.js.map +1 -0
- package/dist/commands/parse-argv.d.ts +20 -0
- package/dist/commands/parse-argv.d.ts.map +1 -0
- package/dist/commands/parse-argv.js +40 -0
- package/dist/commands/parse-argv.js.map +1 -0
- package/dist/commands/raw/index.d.ts +23 -0
- package/dist/commands/raw/index.d.ts.map +1 -0
- package/dist/commands/raw/index.js +416 -0
- package/dist/commands/raw/index.js.map +1 -0
- package/dist/commands/run-by-id-lookup.d.ts +72 -0
- package/dist/commands/run-by-id-lookup.d.ts.map +1 -0
- package/dist/commands/run-by-id-lookup.js +58 -0
- package/dist/commands/run-by-id-lookup.js.map +1 -0
- package/dist/commands/schema/index.d.ts +104 -0
- package/dist/commands/schema/index.d.ts.map +1 -0
- package/dist/commands/schema/index.js +183 -0
- package/dist/commands/schema/index.js.map +1 -0
- package/dist/commands/types.d.ts +66 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +15 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/update/body-source.d.ts +38 -0
- package/dist/commands/update/body-source.d.ts.map +1 -0
- package/dist/commands/update/body-source.js +80 -0
- package/dist/commands/update/body-source.js.map +1 -0
- package/dist/commands/update/clear-all.d.ts +67 -0
- package/dist/commands/update/clear-all.d.ts.map +1 -0
- package/dist/commands/update/clear-all.js +281 -0
- package/dist/commands/update/clear-all.js.map +1 -0
- package/dist/commands/update/create.d.ts +51 -0
- package/dist/commands/update/create.d.ts.map +1 -0
- package/dist/commands/update/create.js +167 -0
- package/dist/commands/update/create.js.map +1 -0
- package/dist/commands/update/delete.d.ts +53 -0
- package/dist/commands/update/delete.d.ts.map +1 -0
- package/dist/commands/update/delete.js +148 -0
- package/dist/commands/update/delete.js.map +1 -0
- package/dist/commands/update/edit.d.ts +37 -0
- package/dist/commands/update/edit.d.ts.map +1 -0
- package/dist/commands/update/edit.js +129 -0
- package/dist/commands/update/edit.js.map +1 -0
- package/dist/commands/update/get.d.ts +37 -0
- package/dist/commands/update/get.d.ts.map +1 -0
- package/dist/commands/update/get.js +92 -0
- package/dist/commands/update/get.js.map +1 -0
- package/dist/commands/update/like.d.ts +17 -0
- package/dist/commands/update/like.d.ts.map +1 -0
- package/dist/commands/update/like.js +23 -0
- package/dist/commands/update/like.js.map +1 -0
- package/dist/commands/update/list.d.ts +58 -0
- package/dist/commands/update/list.d.ts.map +1 -0
- package/dist/commands/update/list.js +322 -0
- package/dist/commands/update/list.js.map +1 -0
- package/dist/commands/update/pin.d.ts +17 -0
- package/dist/commands/update/pin.d.ts.map +1 -0
- package/dist/commands/update/pin.js +23 -0
- package/dist/commands/update/pin.js.map +1 -0
- package/dist/commands/update/reply.d.ts +47 -0
- package/dist/commands/update/reply.d.ts.map +1 -0
- package/dist/commands/update/reply.js +149 -0
- package/dist/commands/update/reply.js.map +1 -0
- package/dist/commands/update/toggle.d.ts +70 -0
- package/dist/commands/update/toggle.d.ts.map +1 -0
- package/dist/commands/update/toggle.js +118 -0
- package/dist/commands/update/toggle.js.map +1 -0
- package/dist/commands/update/unlike.d.ts +17 -0
- package/dist/commands/update/unlike.d.ts.map +1 -0
- package/dist/commands/update/unlike.js +22 -0
- package/dist/commands/update/unlike.js.map +1 -0
- package/dist/commands/update/unpin.d.ts +17 -0
- package/dist/commands/update/unpin.d.ts.map +1 -0
- package/dist/commands/update/unpin.js +21 -0
- package/dist/commands/update/unpin.js.map +1 -0
- package/dist/commands/user/get.d.ts +31 -0
- package/dist/commands/user/get.d.ts.map +1 -0
- package/dist/commands/user/get.js +81 -0
- package/dist/commands/user/get.js.map +1 -0
- package/dist/commands/user/list.d.ts +61 -0
- package/dist/commands/user/list.d.ts.map +1 -0
- package/dist/commands/user/list.js +148 -0
- package/dist/commands/user/list.js.map +1 -0
- package/dist/commands/user/me.d.ts +17 -0
- package/dist/commands/user/me.d.ts.map +1 -0
- package/dist/commands/user/me.js +49 -0
- package/dist/commands/user/me.js.map +1 -0
- package/dist/commands/workspace/add-users.d.ts +76 -0
- package/dist/commands/workspace/add-users.d.ts.map +1 -0
- package/dist/commands/workspace/add-users.js +154 -0
- package/dist/commands/workspace/add-users.js.map +1 -0
- package/dist/commands/workspace/create.d.ts +59 -0
- package/dist/commands/workspace/create.d.ts.map +1 -0
- package/dist/commands/workspace/create.js +163 -0
- package/dist/commands/workspace/create.js.map +1 -0
- package/dist/commands/workspace/delete.d.ts +67 -0
- package/dist/commands/workspace/delete.d.ts.map +1 -0
- package/dist/commands/workspace/delete.js +182 -0
- package/dist/commands/workspace/delete.js.map +1 -0
- package/dist/commands/workspace/folders.d.ts +40 -0
- package/dist/commands/workspace/folders.d.ts.map +1 -0
- package/dist/commands/workspace/folders.js +124 -0
- package/dist/commands/workspace/folders.js.map +1 -0
- package/dist/commands/workspace/get.d.ts +35 -0
- package/dist/commands/workspace/get.d.ts.map +1 -0
- package/dist/commands/workspace/get.js +62 -0
- package/dist/commands/workspace/get.js.map +1 -0
- package/dist/commands/workspace/list.d.ts +57 -0
- package/dist/commands/workspace/list.d.ts.map +1 -0
- package/dist/commands/workspace/list.js +125 -0
- package/dist/commands/workspace/list.js.map +1 -0
- package/dist/commands/workspace/remove-users.d.ts +47 -0
- package/dist/commands/workspace/remove-users.d.ts.map +1 -0
- package/dist/commands/workspace/remove-users.js +122 -0
- package/dist/commands/workspace/remove-users.js.map +1 -0
- package/dist/commands/workspace/update.d.ts +68 -0
- package/dist/commands/workspace/update.d.ts.map +1 -0
- package/dist/commands/workspace/update.js +237 -0
- package/dist/commands/workspace/update.js.map +1 -0
- package/dist/config/load.d.ts +33 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +81 -0
- package/dist/config/load.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/types/global-flags.d.ts +69 -0
- package/dist/types/global-flags.d.ts.map +1 -0
- package/dist/types/global-flags.js +170 -0
- package/dist/types/global-flags.js.map +1 -0
- package/dist/types/ids.d.ts +38 -0
- package/dist/types/ids.d.ts.map +1 -0
- package/dist/types/ids.js +51 -0
- package/dist/types/ids.js.map +1 -0
- package/dist/types/json.d.ts +60 -0
- package/dist/types/json.d.ts.map +1 -0
- package/dist/types/json.js +33 -0
- package/dist/types/json.js.map +1 -0
- package/dist/utils/errors.d.ts +121 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +264 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +39 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +49 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output/envelope.d.ts +140 -0
- package/dist/utils/output/envelope.d.ts.map +1 -0
- package/dist/utils/output/envelope.js +120 -0
- package/dist/utils/output/envelope.js.map +1 -0
- package/dist/utils/output/json.d.ts +10 -0
- package/dist/utils/output/json.d.ts.map +1 -0
- package/dist/utils/output/json.js +12 -0
- package/dist/utils/output/json.js.map +1 -0
- package/dist/utils/output/ndjson.d.ts +92 -0
- package/dist/utils/output/ndjson.d.ts.map +1 -0
- package/dist/utils/output/ndjson.js +33 -0
- package/dist/utils/output/ndjson.js.map +1 -0
- package/dist/utils/output/select.d.ts +22 -0
- package/dist/utils/output/select.d.ts.map +1 -0
- package/dist/utils/output/select.js +47 -0
- package/dist/utils/output/select.js.map +1 -0
- package/dist/utils/output/table.d.ts +32 -0
- package/dist/utils/output/table.d.ts.map +1 -0
- package/dist/utils/output/table.js +133 -0
- package/dist/utils/output/table.js.map +1 -0
- package/dist/utils/output/text.d.ts +5 -0
- package/dist/utils/output/text.d.ts.map +1 -0
- package/dist/utils/output/text.js +32 -0
- package/dist/utils/output/text.js.map +1 -0
- package/dist/utils/parse-boundary.d.ts +53 -0
- package/dist/utils/parse-boundary.d.ts.map +1 -0
- package/dist/utils/parse-boundary.js +62 -0
- package/dist/utils/parse-boundary.js.map +1 -0
- package/dist/utils/redact.d.ts +54 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +154 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/request-id.d.ts +17 -0
- package/dist/utils/request-id.d.ts.map +1 -0
- package/dist/utils/request-id.js +26 -0
- package/dist/utils/request-id.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `meta.source` + `meta.cache_age_seconds` merge rules per cli-design
|
|
3
|
+
* §6.1 — first leg seeds; `mixed` is contagious; `cache + live → mixed`;
|
|
4
|
+
* for cache age the aggregate is the OLDEST cache age across legs (the
|
|
5
|
+
* worst-case staleness).
|
|
6
|
+
*
|
|
7
|
+
* Lifted from four sites — see v0.2-plan §12 R21:
|
|
8
|
+
* - `api/dry-run.ts` (`mergeSource` + `mergeCacheAge`, private)
|
|
9
|
+
* - `commands/item/update.ts` (`mergeSourceForRemap`)
|
|
10
|
+
* - `commands/item/create.ts` (`mergeSourceLeg` +
|
|
11
|
+
* `mergeSourceWithPreflight` + `mergeCacheAgeWithPreflight`)
|
|
12
|
+
* - inline `Math.max` cache-age folds
|
|
13
|
+
*
|
|
14
|
+
* The local copies all left a "If a third consumer arrives, lift to
|
|
15
|
+
* a shared module then" comment; create.ts was the third+fourth, so
|
|
16
|
+
* the lift fired post-M9.
|
|
17
|
+
*/
|
|
18
|
+
export type EnvelopeSource = 'live' | 'cache' | 'mixed';
|
|
19
|
+
/**
|
|
20
|
+
* Planner/mutation surfaces that may claim `'none'` (no API call
|
|
21
|
+
* fired). The dry-run engine + create.ts surface this; once any
|
|
22
|
+
* leg fires it collapses to a real source via
|
|
23
|
+
* `mergeSourceWithPreflight`.
|
|
24
|
+
*/
|
|
25
|
+
export type EnvelopeSourceOrNone = EnvelopeSource | 'none';
|
|
26
|
+
/**
|
|
27
|
+
* Merges a new leg's source into the running aggregate. First leg
|
|
28
|
+
* seeds (`undefined → next`); any `mixed` is contagious; otherwise
|
|
29
|
+
* `cache + live → mixed`; otherwise the unanimous value.
|
|
30
|
+
*/
|
|
31
|
+
export declare const mergeSource: (current: EnvelopeSource | undefined, next: EnvelopeSource) => EnvelopeSource;
|
|
32
|
+
/**
|
|
33
|
+
* Folds a pre-planner preflight source ('live' / 'cache' / 'mixed' /
|
|
34
|
+
* `undefined` when no preflight leg fired) into a planner source
|
|
35
|
+
* ('live' / 'cache' / 'mixed' / 'none'). Used by create.ts's dry-run
|
|
36
|
+
* + live envelopes so `meta.source` reflects every wire leg that
|
|
37
|
+
* fired (Codex M9 P2 #1). When the planner is `'none'` and any
|
|
38
|
+
* preflight leg fired, the preflight source wins; otherwise the
|
|
39
|
+
* `mergeSource` rule applies.
|
|
40
|
+
*/
|
|
41
|
+
export declare const mergeSourceWithPreflight: (planner: EnvelopeSourceOrNone, preflight: EnvelopeSource | undefined) => EnvelopeSourceOrNone;
|
|
42
|
+
/**
|
|
43
|
+
* Merges a new leg's `cacheAgeSeconds` into the running aggregate.
|
|
44
|
+
* Per cli-design §6.1, the envelope's `cache_age_seconds` is the
|
|
45
|
+
* **oldest** age across legs that hit cache — worst-case staleness.
|
|
46
|
+
* `null` legs (live fetches) don't update; if all legs are live the
|
|
47
|
+
* aggregate stays `null`.
|
|
48
|
+
*/
|
|
49
|
+
export declare const mergeCacheAge: (current: number | null, next: number | null) => number | null;
|
|
50
|
+
/**
|
|
51
|
+
* Stateful accumulator wrapping `mergeSource` + `mergeCacheAge` for
|
|
52
|
+
* the multi-leg orchestrators in `commands/item/*` that fold per-leg
|
|
53
|
+
* `meta.source` / `cacheAgeSeconds` contributions into one aggregate
|
|
54
|
+
* before emitting the envelope. Lifted post-M11 (§16 R30) — five
|
|
55
|
+
* sites duplicated the same `let aggregate; record(source, cacheAge)`
|
|
56
|
+
* closure pattern (move's `runCrossBoardMove`, create's live path,
|
|
57
|
+
* update single, update bulk dry-run + live).
|
|
58
|
+
*
|
|
59
|
+
* The standalone `mergeSource` / `mergeCacheAge` exports stay — the
|
|
60
|
+
* `mergeSourceWithPreflight` shape in `create.ts` dry-run doesn't
|
|
61
|
+
* collapse cleanly into the class (it folds a `'none'`-claiming
|
|
62
|
+
* planner source against a preflight `EnvelopeSource | undefined`,
|
|
63
|
+
* not the class's per-leg `EnvelopeSource` shape).
|
|
64
|
+
*/
|
|
65
|
+
export declare class SourceAggregator {
|
|
66
|
+
private source;
|
|
67
|
+
private cacheAge;
|
|
68
|
+
/**
|
|
69
|
+
* Optional seed for callers that already have a first leg's source
|
|
70
|
+
* + cacheAge in hand (e.g. update bulk's metadata leg). Equivalent
|
|
71
|
+
* to `new SourceAggregator()` followed by `.record(seed.source,
|
|
72
|
+
* seed.cacheAgeSeconds)`, but keeps the call site one line.
|
|
73
|
+
*/
|
|
74
|
+
constructor(seed?: {
|
|
75
|
+
readonly source: EnvelopeSource;
|
|
76
|
+
readonly cacheAgeSeconds: number | null;
|
|
77
|
+
});
|
|
78
|
+
/**
|
|
79
|
+
* Folds a leg's `source` + `cacheAgeSeconds` into the running
|
|
80
|
+
* aggregate. First call seeds; subsequent calls apply the
|
|
81
|
+
* `mergeSource` / `mergeCacheAge` rules.
|
|
82
|
+
*/
|
|
83
|
+
record(source: EnvelopeSource, cacheAgeSeconds: number | null): void;
|
|
84
|
+
/**
|
|
85
|
+
* Snapshot of the current aggregate. `fallback` (default `'live'`)
|
|
86
|
+
* is returned when no leg has been recorded — matches the
|
|
87
|
+
* `aggregate ?? 'live'` pattern every call site used pre-lift.
|
|
88
|
+
*/
|
|
89
|
+
result(fallback?: EnvelopeSource): {
|
|
90
|
+
readonly source: EnvelopeSource;
|
|
91
|
+
readonly cacheAgeSeconds: number | null;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=source-aggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-aggregator.d.ts","sourceRoot":"","sources":["../../src/api/source-aggregator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AACxD;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,cAAc,GAAG,SAAS,EACnC,MAAM,cAAc,KACnB,cAKF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,oBAAoB,EAC7B,WAAW,cAAc,GAAG,SAAS,KACpC,oBAIF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,MAAM,GAAG,IAAI,EACtB,MAAM,MAAM,GAAG,IAAI,KAClB,MAAM,GAAG,IAIX,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;;OAKG;gBAED,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KACzC;IAMH;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKpE;;;;OAIG;IACH,MAAM,CAAC,QAAQ,GAAE,cAAuB,GAAG;QACzC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KACzC;CAMF"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `meta.source` + `meta.cache_age_seconds` merge rules per cli-design
|
|
3
|
+
* §6.1 — first leg seeds; `mixed` is contagious; `cache + live → mixed`;
|
|
4
|
+
* for cache age the aggregate is the OLDEST cache age across legs (the
|
|
5
|
+
* worst-case staleness).
|
|
6
|
+
*
|
|
7
|
+
* Lifted from four sites — see v0.2-plan §12 R21:
|
|
8
|
+
* - `api/dry-run.ts` (`mergeSource` + `mergeCacheAge`, private)
|
|
9
|
+
* - `commands/item/update.ts` (`mergeSourceForRemap`)
|
|
10
|
+
* - `commands/item/create.ts` (`mergeSourceLeg` +
|
|
11
|
+
* `mergeSourceWithPreflight` + `mergeCacheAgeWithPreflight`)
|
|
12
|
+
* - inline `Math.max` cache-age folds
|
|
13
|
+
*
|
|
14
|
+
* The local copies all left a "If a third consumer arrives, lift to
|
|
15
|
+
* a shared module then" comment; create.ts was the third+fourth, so
|
|
16
|
+
* the lift fired post-M9.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Merges a new leg's source into the running aggregate. First leg
|
|
20
|
+
* seeds (`undefined → next`); any `mixed` is contagious; otherwise
|
|
21
|
+
* `cache + live → mixed`; otherwise the unanimous value.
|
|
22
|
+
*/
|
|
23
|
+
export const mergeSource = (current, next) => {
|
|
24
|
+
if (current === undefined)
|
|
25
|
+
return next;
|
|
26
|
+
if (current === 'mixed' || next === 'mixed')
|
|
27
|
+
return 'mixed';
|
|
28
|
+
if (current === next)
|
|
29
|
+
return current;
|
|
30
|
+
return 'mixed';
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Folds a pre-planner preflight source ('live' / 'cache' / 'mixed' /
|
|
34
|
+
* `undefined` when no preflight leg fired) into a planner source
|
|
35
|
+
* ('live' / 'cache' / 'mixed' / 'none'). Used by create.ts's dry-run
|
|
36
|
+
* + live envelopes so `meta.source` reflects every wire leg that
|
|
37
|
+
* fired (Codex M9 P2 #1). When the planner is `'none'` and any
|
|
38
|
+
* preflight leg fired, the preflight source wins; otherwise the
|
|
39
|
+
* `mergeSource` rule applies.
|
|
40
|
+
*/
|
|
41
|
+
export const mergeSourceWithPreflight = (planner, preflight) => {
|
|
42
|
+
if (preflight === undefined)
|
|
43
|
+
return planner;
|
|
44
|
+
if (planner === 'none')
|
|
45
|
+
return preflight;
|
|
46
|
+
return mergeSource(planner, preflight);
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Merges a new leg's `cacheAgeSeconds` into the running aggregate.
|
|
50
|
+
* Per cli-design §6.1, the envelope's `cache_age_seconds` is the
|
|
51
|
+
* **oldest** age across legs that hit cache — worst-case staleness.
|
|
52
|
+
* `null` legs (live fetches) don't update; if all legs are live the
|
|
53
|
+
* aggregate stays `null`.
|
|
54
|
+
*/
|
|
55
|
+
export const mergeCacheAge = (current, next) => {
|
|
56
|
+
if (next === null)
|
|
57
|
+
return current;
|
|
58
|
+
if (current === null)
|
|
59
|
+
return next;
|
|
60
|
+
return Math.max(current, next);
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Stateful accumulator wrapping `mergeSource` + `mergeCacheAge` for
|
|
64
|
+
* the multi-leg orchestrators in `commands/item/*` that fold per-leg
|
|
65
|
+
* `meta.source` / `cacheAgeSeconds` contributions into one aggregate
|
|
66
|
+
* before emitting the envelope. Lifted post-M11 (§16 R30) — five
|
|
67
|
+
* sites duplicated the same `let aggregate; record(source, cacheAge)`
|
|
68
|
+
* closure pattern (move's `runCrossBoardMove`, create's live path,
|
|
69
|
+
* update single, update bulk dry-run + live).
|
|
70
|
+
*
|
|
71
|
+
* The standalone `mergeSource` / `mergeCacheAge` exports stay — the
|
|
72
|
+
* `mergeSourceWithPreflight` shape in `create.ts` dry-run doesn't
|
|
73
|
+
* collapse cleanly into the class (it folds a `'none'`-claiming
|
|
74
|
+
* planner source against a preflight `EnvelopeSource | undefined`,
|
|
75
|
+
* not the class's per-leg `EnvelopeSource` shape).
|
|
76
|
+
*/
|
|
77
|
+
export class SourceAggregator {
|
|
78
|
+
source;
|
|
79
|
+
cacheAge;
|
|
80
|
+
/**
|
|
81
|
+
* Optional seed for callers that already have a first leg's source
|
|
82
|
+
* + cacheAge in hand (e.g. update bulk's metadata leg). Equivalent
|
|
83
|
+
* to `new SourceAggregator()` followed by `.record(seed.source,
|
|
84
|
+
* seed.cacheAgeSeconds)`, but keeps the call site one line.
|
|
85
|
+
*/
|
|
86
|
+
constructor(seed) {
|
|
87
|
+
this.source = seed?.source;
|
|
88
|
+
this.cacheAge = seed?.cacheAgeSeconds ?? null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Folds a leg's `source` + `cacheAgeSeconds` into the running
|
|
92
|
+
* aggregate. First call seeds; subsequent calls apply the
|
|
93
|
+
* `mergeSource` / `mergeCacheAge` rules.
|
|
94
|
+
*/
|
|
95
|
+
record(source, cacheAgeSeconds) {
|
|
96
|
+
this.source = mergeSource(this.source, source);
|
|
97
|
+
this.cacheAge = mergeCacheAge(this.cacheAge, cacheAgeSeconds);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Snapshot of the current aggregate. `fallback` (default `'live'`)
|
|
101
|
+
* is returned when no leg has been recorded — matches the
|
|
102
|
+
* `aggregate ?? 'live'` pattern every call site used pre-lift.
|
|
103
|
+
*/
|
|
104
|
+
result(fallback = 'live') {
|
|
105
|
+
return {
|
|
106
|
+
source: this.source ?? fallback,
|
|
107
|
+
cacheAgeSeconds: this.cacheAge,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=source-aggregator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-aggregator.js","sourceRoot":"","sources":["../../src/api/source-aggregator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAWH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,OAAmC,EACnC,IAAoB,EACJ,EAAE;IAClB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5D,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAA6B,EAC7B,SAAqC,EACf,EAAE;IACxB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC5C,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAsB,EACtB,IAAmB,EACJ,EAAE;IACjB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAA6B;IACnC,QAAQ,CAAgB;IAEhC;;;;;OAKG;IACH,YACE,IAGC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,eAAe,IAAI,IAAI,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAsB,EAAE,eAA8B;QAC3D,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,WAA2B,MAAM;QAItC,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ;YAC/B,eAAe,EAAE,IAAI,CAAC,QAAQ;SAC/B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport interface (`v0.1-plan.md` §2 pre-flight, §5.2).
|
|
3
|
+
*
|
|
4
|
+
* Sits between `commands/*` and the network. The injected
|
|
5
|
+
* `Transport` is what `run({ transport })` swaps under tests — a
|
|
6
|
+
* `FixtureTransport` substitutes for `FetchTransport` so the same
|
|
7
|
+
* commands → api → transport stack runs in tests as in production
|
|
8
|
+
* (header injection, abort handling, timeout, retry mapping). The
|
|
9
|
+
* alternative — `vi.spyOn`'ing the SDK's `request` method — was
|
|
10
|
+
* the original plan and got rejected in the Codex review because
|
|
11
|
+
* it bypasses too many layers.
|
|
12
|
+
*
|
|
13
|
+
* The transport does **not** map GraphQL errors to CLI error codes;
|
|
14
|
+
* that's `api/errors.ts` in M2. Network-level failures (refused
|
|
15
|
+
* connection, timeout, malformed JSON) become `ApiError`s here so
|
|
16
|
+
* the runner never sees a raw `fetch` exception.
|
|
17
|
+
*/
|
|
18
|
+
export interface TransportRequest {
|
|
19
|
+
readonly query: string;
|
|
20
|
+
readonly variables?: Readonly<Record<string, unknown>>;
|
|
21
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
22
|
+
readonly signal?: AbortSignal;
|
|
23
|
+
readonly operationName?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface TransportResponse {
|
|
26
|
+
readonly status: number;
|
|
27
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
28
|
+
/**
|
|
29
|
+
* Parsed JSON body. GraphQL responses are JSON; if the upstream
|
|
30
|
+
* returns something else (HTML error page, etc.) the transport
|
|
31
|
+
* surfaces an `ApiError(network_error)` rather than a partially-
|
|
32
|
+
* decoded payload.
|
|
33
|
+
*/
|
|
34
|
+
readonly body: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface Transport {
|
|
37
|
+
readonly request: (req: TransportRequest) => Promise<TransportResponse>;
|
|
38
|
+
}
|
|
39
|
+
export interface FetchTransportConfig {
|
|
40
|
+
readonly endpoint: string;
|
|
41
|
+
readonly apiToken: string;
|
|
42
|
+
readonly apiVersion: string;
|
|
43
|
+
readonly timeoutMs: number;
|
|
44
|
+
/** Override for tests; defaults to global `fetch`. */
|
|
45
|
+
readonly fetchImpl?: typeof fetch;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Builds a `Transport` over `fetch`. Owns:
|
|
49
|
+
* - `Authorization: <token>` (no `Bearer ` prefix per Monday's API).
|
|
50
|
+
* - `API-Version: <pinned>` per `cli-design.md` §2.
|
|
51
|
+
* - `Content-Type: application/json`.
|
|
52
|
+
* - Per-request timeout via `AbortSignal.timeout` chained with the
|
|
53
|
+
* caller's signal so external cancellation still wins.
|
|
54
|
+
*
|
|
55
|
+
* The token never reaches an error message, log line, or URL.
|
|
56
|
+
*/
|
|
57
|
+
export declare const createFetchTransport: (config: FetchTransportConfig) => Transport;
|
|
58
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/api/transport.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,oBAAoB,KAC3B,SAoGF,CAAC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { ApiError } from '../utils/errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds a `Transport` over `fetch`. Owns:
|
|
4
|
+
* - `Authorization: <token>` (no `Bearer ` prefix per Monday's API).
|
|
5
|
+
* - `API-Version: <pinned>` per `cli-design.md` §2.
|
|
6
|
+
* - `Content-Type: application/json`.
|
|
7
|
+
* - Per-request timeout via `AbortSignal.timeout` chained with the
|
|
8
|
+
* caller's signal so external cancellation still wins.
|
|
9
|
+
*
|
|
10
|
+
* The token never reaches an error message, log line, or URL.
|
|
11
|
+
*/
|
|
12
|
+
export const createFetchTransport = (config) => {
|
|
13
|
+
const fetchImpl = config.fetchImpl ?? fetch;
|
|
14
|
+
return {
|
|
15
|
+
request: async ({ query, variables, headers, signal, operationName, }) => {
|
|
16
|
+
// Header lockdown: caller-supplied headers spread first so the
|
|
17
|
+
// transport-owned set (`Authorization`, `API-Version`,
|
|
18
|
+
// `Content-Type`) always wins. The previous order let any
|
|
19
|
+
// caller — including a buggy command or an injected
|
|
20
|
+
// `FixtureTransport` request — override auth or the API
|
|
21
|
+
// version pin silently. We also strip any case-variant of
|
|
22
|
+
// those names from the caller bag so a lowercase
|
|
23
|
+
// `authorization` can't sneak past the literal-key spread.
|
|
24
|
+
const reservedHeaderLowerNames = new Set([
|
|
25
|
+
'authorization',
|
|
26
|
+
'api-version',
|
|
27
|
+
'content-type',
|
|
28
|
+
]);
|
|
29
|
+
const callerHeaders = headers ?? {};
|
|
30
|
+
const safeCallerHeaders = {};
|
|
31
|
+
for (const [key, value] of Object.entries(callerHeaders)) {
|
|
32
|
+
if (!reservedHeaderLowerNames.has(key.toLowerCase())) {
|
|
33
|
+
safeCallerHeaders[key] = value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const requestHeaders = {
|
|
37
|
+
...safeCallerHeaders,
|
|
38
|
+
Authorization: config.apiToken,
|
|
39
|
+
'API-Version': config.apiVersion,
|
|
40
|
+
'Content-Type': 'application/json',
|
|
41
|
+
};
|
|
42
|
+
const body = { query };
|
|
43
|
+
if (variables !== undefined) {
|
|
44
|
+
body.variables = variables;
|
|
45
|
+
}
|
|
46
|
+
if (operationName !== undefined) {
|
|
47
|
+
body.operationName = operationName;
|
|
48
|
+
}
|
|
49
|
+
const combinedSignal = combineSignals(signal, AbortSignal.timeout(config.timeoutMs));
|
|
50
|
+
let response;
|
|
51
|
+
try {
|
|
52
|
+
response = await fetchImpl(config.endpoint, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: requestHeaders,
|
|
55
|
+
body: JSON.stringify(body),
|
|
56
|
+
signal: combinedSignal,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
// Don't ever interpolate the token into the error string —
|
|
61
|
+
// `requestHeaders` stays out of the message; `cause` carries
|
|
62
|
+
// the raw error (which the redactor will scrub before emit).
|
|
63
|
+
if (isAbortError(err) && combinedSignal.reason !== signal?.reason) {
|
|
64
|
+
throw new ApiError('timeout', `request timed out after ${String(config.timeoutMs)}ms`, { cause: err, details: { timeout_ms: config.timeoutMs } });
|
|
65
|
+
}
|
|
66
|
+
throw new ApiError('network_error', describeFetchError(err), {
|
|
67
|
+
cause: err,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const responseHeaders = headersToRecord(response.headers);
|
|
71
|
+
let parsed;
|
|
72
|
+
try {
|
|
73
|
+
parsed = await response.json();
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// Don't interpolate `config.endpoint` into the message —
|
|
77
|
+
// a misconfigured URL containing the token (e.g. someone
|
|
78
|
+
// setting MONDAY_API_URL=...?token=...) would land here.
|
|
79
|
+
// The redactor would catch it on emit, but security.md
|
|
80
|
+
// explicitly forbids putting the token into Error.message
|
|
81
|
+
// in the first place. (Codex M2 review §4.)
|
|
82
|
+
throw new ApiError('network_error', `non-JSON response (status ${String(response.status)})`, { cause: err, httpStatus: response.status });
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
status: response.status,
|
|
86
|
+
headers: responseHeaders,
|
|
87
|
+
body: parsed,
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
const isAbortError = (err) => {
|
|
93
|
+
if (err instanceof Error) {
|
|
94
|
+
return err.name === 'AbortError' || err.name === 'TimeoutError';
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Builds a generic, URL-free message for a thrown `fetch` exception.
|
|
100
|
+
*
|
|
101
|
+
* Why not `err.message`. Node's undici embeds the request URL into
|
|
102
|
+
* the messages of common transport errors — `ECONNREFUSED https://
|
|
103
|
+
* api.example/v2?token=...`, `getaddrinfo ENOTFOUND
|
|
104
|
+
* api.example`, etc. If `MONDAY_API_URL` is misconfigured to carry
|
|
105
|
+
* the token (or any other secret), the literal token lands in
|
|
106
|
+
* `ApiError.message`. The runner's redactor would catch it on emit,
|
|
107
|
+
* but `security.md` forbids the token entering `Error.message` in
|
|
108
|
+
* the first place — the rule is defence-in-depth, not "we'll fix it
|
|
109
|
+
* downstream". The original error is still attached via `cause`,
|
|
110
|
+
* which a future debug log surfaces through `redact()` (key + value
|
|
111
|
+
* scan) rather than verbatim.
|
|
112
|
+
*
|
|
113
|
+
* Maps the common shapes to short, stable codes:
|
|
114
|
+
* - DNS / hostname unresolvable → `dns lookup failed`
|
|
115
|
+
* - ECONNREFUSED / ECONNRESET → `connection refused`
|
|
116
|
+
* - SSL/TLS issue → `tls error`
|
|
117
|
+
* - generic Error → `fetch failed`
|
|
118
|
+
* - non-Error throw → `fetch failed`
|
|
119
|
+
*/
|
|
120
|
+
const describeFetchError = (err) => {
|
|
121
|
+
if (err instanceof Error) {
|
|
122
|
+
const code = err.code;
|
|
123
|
+
if (typeof code === 'string') {
|
|
124
|
+
if (code.startsWith('ENOTFOUND') || code.startsWith('EAI_')) {
|
|
125
|
+
return 'fetch failed: dns lookup failed';
|
|
126
|
+
}
|
|
127
|
+
if (code === 'ECONNREFUSED' || code === 'ECONNRESET') {
|
|
128
|
+
return 'fetch failed: connection refused';
|
|
129
|
+
}
|
|
130
|
+
if (code === 'CERT_HAS_EXPIRED' || code.startsWith('UNABLE_TO_')) {
|
|
131
|
+
return 'fetch failed: tls error';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Sniff the message for the same common shapes when err.code
|
|
135
|
+
// isn't surfaced (older fetch impls, wrapped TypeErrors).
|
|
136
|
+
const lower = err.message.toLowerCase();
|
|
137
|
+
if (lower.includes('econnrefused') || lower.includes('connection refused')) {
|
|
138
|
+
return 'fetch failed: connection refused';
|
|
139
|
+
}
|
|
140
|
+
if (lower.includes('enotfound') ||
|
|
141
|
+
lower.includes('eai_again') ||
|
|
142
|
+
lower.includes('getaddrinfo')) {
|
|
143
|
+
return 'fetch failed: dns lookup failed';
|
|
144
|
+
}
|
|
145
|
+
return 'fetch failed';
|
|
146
|
+
}
|
|
147
|
+
return 'fetch failed';
|
|
148
|
+
};
|
|
149
|
+
const headersToRecord = (headers) => {
|
|
150
|
+
const out = {};
|
|
151
|
+
headers.forEach((value, key) => {
|
|
152
|
+
out[key] = value;
|
|
153
|
+
});
|
|
154
|
+
return out;
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Mirrors `AbortSignal.any` in environments that don't have it yet.
|
|
158
|
+
* Prefers the platform implementation when available so tests
|
|
159
|
+
* exercise the real path.
|
|
160
|
+
*/
|
|
161
|
+
const combineSignals = (...signals) => {
|
|
162
|
+
const real = signals.filter((s) => s !== undefined);
|
|
163
|
+
const [first, ...rest] = real;
|
|
164
|
+
if (first === undefined) {
|
|
165
|
+
return new AbortController().signal;
|
|
166
|
+
}
|
|
167
|
+
if (rest.length === 0) {
|
|
168
|
+
return first;
|
|
169
|
+
}
|
|
170
|
+
if (typeof AbortSignal.any === 'function') {
|
|
171
|
+
return AbortSignal.any(real);
|
|
172
|
+
}
|
|
173
|
+
/* c8 ignore start — legacy fallback for runtimes without
|
|
174
|
+
`AbortSignal.any` (Node < 19). Repo's engines pin to Node 22+,
|
|
175
|
+
so this path is never hit in CI or dev. Kept for safety in case
|
|
176
|
+
a downstream embedder runs an older Node. */
|
|
177
|
+
const ctrl = new AbortController();
|
|
178
|
+
for (const s of real) {
|
|
179
|
+
if (s.aborted) {
|
|
180
|
+
ctrl.abort(s.reason);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
s.addEventListener('abort', () => {
|
|
184
|
+
ctrl.abort(s.reason);
|
|
185
|
+
}, { once: true });
|
|
186
|
+
}
|
|
187
|
+
return ctrl.signal;
|
|
188
|
+
/* c8 ignore stop */
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/api/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAoD9C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAA4B,EACjB,EAAE;IACb,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAE5C,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,EACd,KAAK,EACL,SAAS,EACT,OAAO,EACP,MAAM,EACN,aAAa,GACd,EAAE,EAAE;YACH,+DAA+D;YAC/D,uDAAuD;YACvD,0DAA0D;YAC1D,oDAAoD;YACpD,wDAAwD;YACxD,0DAA0D;YAC1D,iDAAiD;YACjD,2DAA2D;YAC3D,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;gBACvC,eAAe;gBACf,aAAa;gBACb,cAAc;aACf,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,OAAO,IAAI,EAAE,CAAC;YACpC,MAAM,iBAAiB,GAA2B,EAAE,CAAC;YACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACrD,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,cAAc,GAA2B;gBAC7C,GAAG,iBAAiB;gBACpB,aAAa,EAAE,MAAM,CAAC,QAAQ;gBAC9B,aAAa,EAAE,MAAM,CAAC,UAAU;gBAChC,cAAc,EAAE,kBAAkB;aACnC,CAAC;YAEF,MAAM,IAAI,GAA4B,EAAE,KAAK,EAAE,CAAC;YAChD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC7B,CAAC;YACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YACrC,CAAC;YAED,MAAM,cAAc,GAAG,cAAc,CACnC,MAAM,EACN,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CACtC,CAAC;YAEF,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAC1C,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,cAAc;iBACvB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,2DAA2D;gBAC3D,6DAA6D;gBAC7D,6DAA6D;gBAC7D,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC;oBAClE,MAAM,IAAI,QAAQ,CAChB,SAAS,EACT,2BAA2B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EACvD,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,CAC1D,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE;oBAC3D,KAAK,EAAE,GAAG;iBACX,CAAC,CAAC;YACL,CAAC;YAED,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,yDAAyD;gBACzD,yDAAyD;gBACzD,yDAAyD;gBACzD,uDAAuD;gBACvD,0DAA0D;gBAC1D,4CAA4C;gBAC5C,MAAM,IAAI,QAAQ,CAChB,eAAe,EACf,6BAA6B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EACvD,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAC5C,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,eAAe;gBACxB,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,GAAY,EAAW,EAAE;IAC7C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,kBAAkB,GAAG,CAAC,GAAY,EAAU,EAAE;IAClD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAC;QAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,OAAO,iCAAiC,CAAC;YAC3C,CAAC;YACD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBACrD,OAAO,kCAAkC,CAAC;YAC5C,CAAC;YACD,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjE,OAAO,yBAAyB,CAAC;YACnC,CAAC;QACH,CAAC;QACD,6DAA6D;QAC7D,0DAA0D;QAC1D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC3E,OAAO,kCAAkC,CAAC;QAC5C,CAAC;QACD,IACE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3B,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAC7B,CAAC;YACD,OAAO,iCAAiC,CAAC;QAC3C,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,OAAgB,EACkB,EAAE;IACpC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,cAAc,GAAG,CACrB,GAAG,OAA6C,EACnC,EAAE;IACf,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,WAAW,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD;;;mDAG+C;IAC/C,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM;QACR,CAAC;QACD,CAAC,CAAC,gBAAgB,CAChB,OAAO,EACP,GAAG,EAAE;YACH,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACnB,oBAAoB;AACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update-mutation projection + GraphQL field-fragment, lifted from
|
|
3
|
+
* five M13 mutation verbs and two M3 / M5b read-or-write call sites
|
|
4
|
+
* (v0.2-plan §20 R37 + R38).
|
|
5
|
+
*
|
|
6
|
+
* **R37 — `projectMutationUpdate`.** Every M13 mutation verb (`update
|
|
7
|
+
* reply` / `edit` / `delete` plus the four toggle verbs `like` /
|
|
8
|
+
* `unlike` / `pin` / `unpin`) returns the post-mutation `Update` and
|
|
9
|
+
* guards a null payload with the same shape: a typed throw carrying
|
|
10
|
+
* `details.update_id` (or `parent_id` for reply, which keys errors
|
|
11
|
+
* off the parent the agent passed on argv), then a strict zod parse
|
|
12
|
+
* to surface the §6.4 mutation envelope's `data: <projected
|
|
13
|
+
* snapshot>`. Mirrors R28's `projectMutationItem` exactly with
|
|
14
|
+
* `Update` substituted for `Item`.
|
|
15
|
+
*
|
|
16
|
+
* Lifted from five sites — see v0.2-plan §20 R37:
|
|
17
|
+
* - `commands/update/reply.ts` (M13 — local `projectReply`,
|
|
18
|
+
* `idKey: 'parent_id'` because the argv input is the parent,
|
|
19
|
+
* not the new update).
|
|
20
|
+
* - `commands/update/edit.ts` (M13 — local `projectEdited`).
|
|
21
|
+
* - `commands/update/delete.ts` (M13 — local `projectDeleted`).
|
|
22
|
+
* - `commands/update/toggle.ts` (M13 — local `projectToggle`,
|
|
23
|
+
* consumed by four toggle verbs via per-verb `mutationName`).
|
|
24
|
+
* - `commands/update/clear-all.ts` (M13 — uses the null-check-only
|
|
25
|
+
* variant; see "Why two exports" below).
|
|
26
|
+
*
|
|
27
|
+
* **Why two exports.** Four of the five lift sites parse the wire
|
|
28
|
+
* payload against the full `updateProjectionSchema`. Clear-all's
|
|
29
|
+
* `DELETE_UPDATE_MUTATION` deliberately selects only `{ id }` (per-
|
|
30
|
+
* target round-trip; no projection is emitted in `data.results[i]`),
|
|
31
|
+
* so the strict schema would fail on every successful delete. The
|
|
32
|
+
* lift therefore exposes two seams:
|
|
33
|
+
*
|
|
34
|
+
* - `projectMutationUpdate({raw, updateId, mutationName, idKey?})`
|
|
35
|
+
* — null-check + strict parse + projection. Used by reply / edit
|
|
36
|
+
* / delete / toggle.
|
|
37
|
+
* - `assertUpdateMutationPresent({raw, updateId, mutationName,
|
|
38
|
+
* idKey?})` — null-check + typed throw, no projection. Used by
|
|
39
|
+
* clear-all's per-target dispatch.
|
|
40
|
+
*
|
|
41
|
+
* Both share `buildNotFoundError` so the typed throw's shape (code,
|
|
42
|
+
* message format, `details.<idKey>`) is identical across all five
|
|
43
|
+
* sites — agents key off `error.code` + `error.details.update_id`
|
|
44
|
+
* (or `parent_id`) without caring which verb threw.
|
|
45
|
+
*
|
|
46
|
+
* **R38 — `UPDATE_FIELDS_FRAGMENT`.** The GraphQL selection set every
|
|
47
|
+
* Update-shape mutation + the M3 `update get` read share. Mirrors
|
|
48
|
+
* `ITEM_FIELDS_FRAGMENT` (M5b lift in `item-helpers.ts`); a future
|
|
49
|
+
* §6.4 wire-shape addition is a one-touch fragment edit instead of
|
|
50
|
+
* a six-touch sweep across `update create` / `reply` / `edit` /
|
|
51
|
+
* `delete` / `toggle` / `get`. Indentation matches the 6-space
|
|
52
|
+
* continuation each consumer interpolates at, so rendered query
|
|
53
|
+
* bytes are unchanged post-lift.
|
|
54
|
+
*
|
|
55
|
+
* **What stays at the call site.** Reply's `parent_id` echo from
|
|
56
|
+
* argv (`{...projected, parent_id: parentId}`) is a caller-side
|
|
57
|
+
* extension — the helper returns the base `UpdateProjection` and
|
|
58
|
+
* reply spreads onto it before emit. Mirrors R28's handling of
|
|
59
|
+
* `item duplicate`'s `duplicated_from_id` extension. `update get`'s
|
|
60
|
+
* extra `edited_at` + `replies` slots are likewise composed at the
|
|
61
|
+
* call site (`${UPDATE_FIELDS_FRAGMENT}\n edited_at\n replies
|
|
62
|
+
* {...}`); the fragment is the shared subset, callers compose extras
|
|
63
|
+
* on top — same shape `item subitems` uses against
|
|
64
|
+
* `ITEM_FIELDS_FRAGMENT`.
|
|
65
|
+
*/
|
|
66
|
+
import { z } from 'zod';
|
|
67
|
+
/**
|
|
68
|
+
* Shared GraphQL selection set for the Update shape — every M13
|
|
69
|
+
* mutation verb plus M5b's `update create` and M3's `update get`
|
|
70
|
+
* select these fields. 6-space continuation indent matches the
|
|
71
|
+
* column every consumer interpolates `${UPDATE_FIELDS_FRAGMENT}` at,
|
|
72
|
+
* so rendered query bytes are unchanged post-lift.
|
|
73
|
+
*/
|
|
74
|
+
export declare const UPDATE_FIELDS_FRAGMENT = "id\n body\n text_body\n creator_id\n creator { id name email }\n item_id\n created_at\n updated_at";
|
|
75
|
+
/**
|
|
76
|
+
* Strict zod schema for the post-mutation `Update` projection — the
|
|
77
|
+
* exact shape `UPDATE_FIELDS_FRAGMENT` selects from the wire. Reply's
|
|
78
|
+
* output extends this with `parent_id` at the call site.
|
|
79
|
+
*/
|
|
80
|
+
export declare const updateProjectionSchema: z.ZodObject<{
|
|
81
|
+
id: z.core.$ZodBranded<z.ZodString, "UpdateId", "out">;
|
|
82
|
+
body: z.ZodString;
|
|
83
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
84
|
+
creator_id: z.ZodNullable<z.ZodString>;
|
|
85
|
+
creator: z.ZodNullable<z.ZodObject<{
|
|
86
|
+
id: z.ZodString;
|
|
87
|
+
name: z.ZodString;
|
|
88
|
+
email: z.ZodString;
|
|
89
|
+
}, z.core.$strict>>;
|
|
90
|
+
item_id: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "ItemId", "out">>;
|
|
91
|
+
created_at: z.ZodNullable<z.ZodString>;
|
|
92
|
+
updated_at: z.ZodNullable<z.ZodString>;
|
|
93
|
+
}, z.core.$strict>;
|
|
94
|
+
export type UpdateProjection = z.infer<typeof updateProjectionSchema>;
|
|
95
|
+
/** `'update_id'` for the M13 verbs; `'parent_id'` for `update reply`
|
|
96
|
+
* (the argv input is the parent, not the new update). */
|
|
97
|
+
export type UpdateMutationIdKey = 'update_id' | 'parent_id';
|
|
98
|
+
export interface UpdateMutationContext {
|
|
99
|
+
readonly updateId: string;
|
|
100
|
+
/** Mutation root-field name for the not_found message
|
|
101
|
+
* (`create_update` / `edit_update` / `delete_update` /
|
|
102
|
+
* `like_update` / `unlike_update` / `pin_to_top` /
|
|
103
|
+
* `unpin_from_top`). */
|
|
104
|
+
readonly mutationName: string;
|
|
105
|
+
/** Defaults to `'update_id'`. */
|
|
106
|
+
readonly idKey?: UpdateMutationIdKey;
|
|
107
|
+
}
|
|
108
|
+
export interface ProjectMutationUpdateInputs extends UpdateMutationContext {
|
|
109
|
+
readonly raw: unknown;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Null-check-only variant for sites whose GraphQL selection is too
|
|
113
|
+
* narrow to parse against `updateProjectionSchema` (currently just
|
|
114
|
+
* `update clear-all`'s per-target `delete_update` round-trip, which
|
|
115
|
+
* selects only `{ id }`). Throws the same typed `not_found` shape
|
|
116
|
+
* the projecting helper does so agents see one error contract across
|
|
117
|
+
* every M13 mutation verb.
|
|
118
|
+
*/
|
|
119
|
+
export declare const assertUpdateMutationPresent: (raw: unknown, ctx: UpdateMutationContext) => void;
|
|
120
|
+
/**
|
|
121
|
+
* Parses + projects a post-mutation `Update` payload, throwing the
|
|
122
|
+
* typed `not_found` on null/undefined and `internal_error` (via the
|
|
123
|
+
* R18 parse-boundary wrap) on a malformed shape. The helper owns
|
|
124
|
+
* both error envelopes; callers compose post-projection extras
|
|
125
|
+
* (reply's `parent_id` echo) at the call site.
|
|
126
|
+
*
|
|
127
|
+
* `details: { <idKey>: updateId }` is supplied by the helper so
|
|
128
|
+
* every consumer carries the same envelope shape — agents key off
|
|
129
|
+
* `details.update_id` (or `details.parent_id` for reply's not_found
|
|
130
|
+
* path) regardless of which mutation verb threw.
|
|
131
|
+
*/
|
|
132
|
+
export declare const projectMutationUpdate: (inputs: ProjectMutationUpdateInputs) => UpdateProjection;
|
|
133
|
+
//# sourceMappingURL=update-mutation-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-mutation-result.d.ts","sourceRoot":"","sources":["../../src/api/update-mutation-result.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,0IAOlB,CAAC;AAUlB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;kBAWxB,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;0DAC0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;6BAGyB;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AAaD;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GACtC,KAAK,OAAO,EACZ,KAAK,qBAAqB,KACzB,IAIF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,2BAA2B,KAClC,gBASF,CAAC"}
|