Skip to content

asc v0.17.7

Choose a tag to compare

@github-actions github-actions released this 29 Apr 04:49
· 186 commits to main since this release

Added

  • REST POST / PATCH / DELETE for subscription group localizations — SubscriptionGroupLocalizationsController previously exposed only GET, so POST /api/v1/subscription-groups/:groupId/subscription-group-localizations (the call the AppNexus web UI emits when creating a new locale) returned 404. Now wired:
    • POST /api/v1/subscription-groups/:groupId/subscription-group-localizations — body {locale, name, customAppName?}.
    • PATCH /api/v1/subscription-group-localizations/:localizationId — body {name?, customAppName?}.
    • DELETE /api/v1/subscription-group-localizations/:localizationId — returns {"deleted": true}.
  • uploadReviewScreenshot and uploadImage affordances on InAppPurchase and Subscription — until now an agent looking at an IAP or subscription with no review screenshot had no _links path to discover the upload command. The four new affordances close that gap (CLI surface, REST _links, REST endpoints).
  • REST upload endpoints (raw body) — POST /api/v1/iap/:iapId/review-screenshot, POST /api/v1/iap/:iapId/images, POST /api/v1/subscriptions/:subscriptionId/review-screenshot, POST /api/v1/subscriptions/:subscriptionId/images. Send the image bytes as the request body (Content-Type image/png, image/jpeg, etc.); body is spooled to a temp file and uploaded through the existing uploadReviewScreenshot / uploadImage repository methods. 20MB body ceiling. Same path as the GET collection — verb selects read vs. upload.

Fixed

  • uploadImage / uploadReviewScreenshot now wait for ASC processing before returning — ASC's PATCH-commit response carries an empty imageAsset because processing is async; clients were getting {templateURL: "", width: 0, height: 0} and had no signal of when the asset URL would appear. Both SDKInAppPurchaseReviewRepository and SDKSubscriptionReviewRepository now mirror the iOS SDK pattern (AppStoreSdk verifyImageUpload / verifyReviewScreenshotUpload): after the commit PATCH, poll GET /v1/inAppPurchaseImages/{id} (or the screenshot equivalent) until state ∈ {PREPARE_FOR_SUBMISSION, WAITING_FOR_REVIEW, APPROVED} for images / assetDeliveryState == COMPLETE for screenshots. Defaults: 15 attempts × 2s = 30s ceiling; failure states (FAILED, REJECTED) throw immediately. The mapper additionally treats empty templateURL / zero dimensions as nil so any leftover not-ready shape is omitted from JSON via encodeIfPresent rather than leaking. Result: POST /api/v1/iap/:iapId/images and the three sibling upload endpoints return a record whose imageAsset is fully populated and ready to render — no client-side polling needed.

Changed

  • upload action resolves to bare collection path in REST — RESTPathResolver now treats upload like get/update/delete (no extra suffix) so an upload _links href is /api/v1/iap/:iapId/review-screenshot (POST), not /...review-screenshot/upload. Standard REST: the verb carries the intent, the path names the resource.
  • reviewNote now read-side on InAppPurchase and Subscription — the field was previously write-only via asc iap update --review-note / asc subscriptions update --review-note. List/get responses now expose reviewNote: String? so an agent (or web UI like AppNexus's IAP/Subscription review tabs) can read the existing value without a separate fetch. SDK mappers thread attributes.reviewNote from InAppPurchaseV2 and Subscription SDK responses; nil values are omitted from JSON output via encodeIfPresent. Existing JSON snapshots stay byte-identical when no review note is set.