unpublishListing
Owner-initiated withdrawal (idempotent). AUTHENTICATED; authorization is enforced IN THE RESOLVER against workspace__strategy__make_public on the LISTING's own owning workspace, same reasoning as republishListing.
Deliberately NOT gated behind marketplace_publish. Withdrawal is the undo of
publication: gating it behind the entitlement that gated the publish is how an
org that downgraded — or whose card lapsed — ends up unable to take its own
indexed page down. Gate acquiring a capability, never relinquishing what was
already acquired (the same rule billing.EnforceStrategyBuilderModeUpdate
states for re-saving a code-mode strategy after a downgrade).
unpublishListing(
id: ID!
): MarketplaceListingAdmin!
Arguments
unpublishListing.id ● ID! non-null scalar
Type
MarketplaceListingAdmin object
Owner-facing view of ONE of the caller's own listings, in ANY status. AUTHENTICATED and a SEPARATE type from MarketplaceListingDetail — unlike the anonymous type this DOES carry ids (id, strategyID, backtestID): unlike sharesForResource (which already receives the resource id as a query argument), myMarketplaceListings takes no argument, so the caller needs these to tell listings apart and to know what is currently pinned before a republish. It is still built field by field, never by embedding the ent row, so fork_payload stays unreachable here too.