@withpica/mcp-sdk 3.10.0 → 3.12.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 CHANGED
@@ -11,6 +11,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [3.12.0] - 2026-08-25
15
+
16
+ Adds the ADR-314 import continuation surface (below); everything else is documentation — no other method signature, request path or response shape changes.
17
+
18
+ ### Added
19
+
20
+ - `ImportResult.rowRange` and `imports.execute()` options `rowOffset` / `rowLimit` — the ADR-314 continuation cursor: the server imports one slice per call (default 2,000 rows) and returns `nextOffset` until the file is done.
21
+ - `ImportResult.partial` — set by `POST /admin/import/execute` when a live run wrote rows and some rows failed (a batch import is not transactional; the written rows are committed). `imports.execute()` options gain `conflictStrategy?: "skip" | "error"` (server default now `"skip"`). Error entries are typed with the server's real `error` field alongside `message`, and `severity`.
22
+
23
+ ### Fixed
24
+
25
+ - **Five docstrings described a table that was dropped 2026-05-29.** ADR-252 WS-A DB-M3 dropped both the `work_credits` view and the `work_credits_legacy` table, but these docstrings still told the reader a row lands there. Each now names the canonical home the code actually writes to:
26
+ - `CreditsResource.atomicAdd` cited `replace_work_credits` — a retired RPC — as the non-atomic alternative. It now names the live comparison (the work-level `POST /credits` additive upsert) and says where the row lands: publishing roles to `work_collaborators`, master attribution to `recording_credits`, owner to `recording_splits`.
27
+ - `DiscoveriesResource.claimCredit` said it drains a `discovered_credits` row **into a `work_credits` row**. It does not write a credit row anywhere — the claim is a status transition on `discovered_credits`, which is what the backing route's own provenance stamp records.
28
+ - `DiscoveriesResource.claimArtist` said `work_claims` + `work_credits`. `work_claims` is right; the claimed performer credit is a MASTER credit and lands in `recording_credits` with role `Performer` on the work's sole recording.
29
+ - `CollaboratorsResource.accept` said it "writes a real `work_credits` row". The credit write is grain-routed (ADR-265): a composition-grain invite writes `work_collaborators`, a master/owner-grain invite attests the person's pending `recording_credits`.
30
+ - The `RecordingCredit` orientation comment distinguished this resource from "CreditsResource (`work_credits` / `work_collaborators`)" — now `work_collaborators` / `recording_splits`.
31
+
32
+ > Verified by sweep, not by eye: every snake_case identifier in a comment in `src/index.ts` was cross-checked against the 398 tables and views in the generated database types. `work_credits` was the **only** name with no schema entry, at exactly these sites. Every other table named in a docstring exists, and each write claim was re-read against the route it calls.
33
+
34
+ ## [3.11.0] - 2026-07-28
35
+
36
+ ### Added
37
+
38
+ - **`ConsentResource` (ADR-300)** — `pica.consent.readiness({ limit? })` → `GET /admin/consent/readiness`. Returns the org-scoped consent readiness verdict: per-level cleared / partial / blocked / unset asset counts, plus named blockers ranked refusals-first then by catalogue reach. Backs the `pica_consent_readiness` tool in `@withpica/mcp-server` 2.95.2.
39
+ - Read-only by design: there is deliberately no consent **write** method. The per-subject consent routes refuse Bearer callers (ADR-292), because a consent decision has to be made by the person whose rights it binds rather than by an agent acting for them. Do not add one without revisiting that ADR.
40
+
14
41
  ## [3.10.0] - 2026-07-27
15
42
 
16
43
  ### Added
package/dist/index.d.ts CHANGED
@@ -175,7 +175,14 @@ export interface ResolvePersonResult {
175
175
  export type BillingTier = "solo" | "indie" | "pro" | "established" | "enterprise";
176
176
  export interface BillingSlice {
177
177
  billing_state: "trial" | "active" | "hibernated";
178
- trial_days_remaining: number | null;
178
+ /**
179
+ * free_runway (walked in, never charged, no clock) | resident (paying one
180
+ * flat fee per 30-day cycle) | paused (a cycle lapsed, deep-processing off).
181
+ *
182
+ * ⚠️ Replaced `trial_days_remaining` on 2026-08-21 — pica has no trial, and
183
+ * that field reported null for every organisation while implying one existed.
184
+ */
185
+ plan: "free_runway" | "resident" | "paused";
179
186
  current_tier: BillingTier | null;
180
187
  capacity_pct: number;
181
188
  }
@@ -1215,6 +1222,83 @@ declare class BookingsResource extends BaseResource {
1215
1222
  followUpDate?: string;
1216
1223
  }): Promise<BookingEnquiry>;
1217
1224
  }
1225
+ /**
1226
+ * Payload accepted by `POST /admin/shows` — a dated show (venue + date +
1227
+ * setlist) OR a tour credit (act + year + role); the route picks which by
1228
+ * which fields are present. Mirrors `ShowPayload` in
1229
+ * app/api/admin/shows/route.ts (not imported — this package is standalone).
1230
+ */
1231
+ interface ShowLogPayload {
1232
+ venue?: string;
1233
+ city?: string;
1234
+ country?: string;
1235
+ date?: string;
1236
+ act?: string;
1237
+ performed_by_person_id?: string;
1238
+ slot?: string;
1239
+ setlist?: string[];
1240
+ set_number?: number;
1241
+ attendance?: number;
1242
+ logged_as?: "act" | "contributor";
1243
+ year?: number;
1244
+ role?: string;
1245
+ tour_name?: string;
1246
+ person_id?: string;
1247
+ email?: string;
1248
+ contributors?: Array<{
1249
+ name?: string;
1250
+ email?: string;
1251
+ person_id?: string;
1252
+ role: string;
1253
+ is_crew?: boolean;
1254
+ }>;
1255
+ }
1256
+ /**
1257
+ * `GET /admin/shows` query params — list the org's shows (newest first,
1258
+ * optionally filtered), or fetch one show plus its folded-in setlist when
1259
+ * `id` is given. Mirrors the route's `queryShows` filter set.
1260
+ */
1261
+ interface ShowQueryParams {
1262
+ id?: string;
1263
+ from?: string;
1264
+ to?: string;
1265
+ venue?: string;
1266
+ city?: string;
1267
+ country?: string;
1268
+ unfiled_only?: boolean;
1269
+ }
1270
+ /**
1271
+ * `PATCH /admin/setlist-items/[id]` payload — confirms what a setlist line
1272
+ * actually was (work match, cover flag, performer) and, when `venue_id` +
1273
+ * `show_id` are both present, the show's venue candidate. Both are applied
1274
+ * when both are supplied; the response carries `venue` and `item`, either of
1275
+ * which may be null.
1276
+ */
1277
+ interface SetlistItemConfirmPayload {
1278
+ work_id?: string;
1279
+ is_cover?: boolean;
1280
+ performed_by?: string;
1281
+ venue_id?: string;
1282
+ show_id?: string;
1283
+ }
1284
+ /**
1285
+ * Live shows and tour credits (ADR-313). Wraps `/admin/shows` and
1286
+ * `/admin/setlist-items/[id]`.
1287
+ */
1288
+ declare class ShowsResource extends BaseResource {
1289
+ /** POST /admin/shows — log a dated show, or a tour credit. */
1290
+ log(payload: ShowLogPayload): Promise<unknown>;
1291
+ /**
1292
+ * GET /admin/shows — list shows for the org (newest first), or the single
1293
+ * show + its folded-in setlist when `id` is given.
1294
+ */
1295
+ query(params?: ShowQueryParams): Promise<unknown>;
1296
+ /**
1297
+ * PATCH /admin/setlist-items/[id] — confirm a setlist match, a cover, a
1298
+ * performer, or (with `venue_id` + `show_id`) a venue candidate.
1299
+ */
1300
+ matchItem(id: string, payload: SetlistItemConfirmPayload): Promise<unknown>;
1301
+ }
1218
1302
  export interface WorkCreditAtomicAddInput {
1219
1303
  person_id: string;
1220
1304
  credit_type?: "writer" | "composer" | "arranger" | "lyricist" | "producer" | "performer" | "engineer" | "mixer" | "mastering" | "owner" | "vocalist" | "instrumentalist" | "conductor" | "programmer" | "remixer";
@@ -1233,9 +1317,14 @@ declare class CreditsResource extends BaseResource {
1233
1317
  listCollaborators(workId: string): Promise<WorkCredit[]>;
1234
1318
  updateCollaborators(workId: string, collaborators: WorkCreditsInput): Promise<WorkCredit[]>;
1235
1319
  /**
1236
- * ADR-232 atomic add — INSERT a single work credit. Race-safe under
1237
- * concurrent writes (replace_work_credits is read-modify-write and
1238
- * therefore not atomic for this verb). Returns the new credit_id.
1320
+ * ADR-232 atomic add — INSERT a single work credit. NOT replace
1321
+ * semantics: the work-level POST /credits is an additive upsert that
1322
+ * re-reads and re-writes the whole set, so it is not atomic for this
1323
+ * verb. createWorkCredit routes the row to its canonical home —
1324
+ * publishing roles to work_collaborators, master attribution to
1325
+ * recording_credits, owner to recording_splits (ADR-252 WS-A; the
1326
+ * legacy work_credits table was dropped at DB-M3). Returns the new
1327
+ * credit_id.
1239
1328
  */
1240
1329
  atomicAdd(workId: string, input: WorkCreditAtomicAddInput): Promise<AtomicCreditResult>;
1241
1330
  /**
@@ -1902,6 +1991,14 @@ declare class EnrichmentResource extends BaseResource {
1902
1991
  * `pending` rows are visible — applied/rejected/expired are hidden
1903
1992
  * regardless of filter. See ADR-163 for the design.
1904
1993
  *
1994
+ * ⚠️ `pending` is not the same as "still worth asking". A finding the
1995
+ * catalogue has since ANSWERED by another route keeps that status — nothing
1996
+ * re-asks the question after mint time — and applying it refuses. Those are
1997
+ * excluded, matching what `/inspect/found` shows, and
1998
+ * `data.excluded_stale` ({count, reasons}) reports the drop so a short page
1999
+ * is distinguishable from a filtered one. Applied after pagination, so a
2000
+ * page may return fewer rows than `limit`.
2001
+ *
1905
2002
  * ADR-264 C1: supports min_confidence, max_confidence, created_after
1906
2003
  * for filtering by confidence band and recency.
1907
2004
  */
@@ -1918,6 +2015,16 @@ declare class EnrichmentResource extends BaseResource {
1918
2015
  max_confidence?: number;
1919
2016
  /** ADR-264 C1: only return proposals created at or after this ISO timestamp */
1920
2017
  created_after?: string;
2018
+ /**
2019
+ * Additionally return `groups` — the interpreted review shape the
2020
+ * /inspect/found page renders (grouped, confidence-banded, before/after
2021
+ * field changes, evidence lines, external refs, per-item actionable /
2022
+ * bulkEligible), read through the FOUND_SOURCES registry.
2023
+ *
2024
+ * ⚠️ `groups` is the WHOLE reviewable queue and is NOT narrowed by the
2025
+ * filters above, which only apply to `proposals`.
2026
+ */
2027
+ review_shape?: boolean;
1921
2028
  }): Promise<any>;
1922
2029
  /**
1923
2030
  * Apply a pending proposal. For update proposals, drift detection
@@ -1963,6 +2070,48 @@ declare class EnrichmentResource extends BaseResource {
1963
2070
  rejected: number;
1964
2071
  skipped: string[];
1965
2072
  }>;
2073
+ /**
2074
+ * Apply many pending proposals in one call — the accept side of the
2075
+ * /inspect/found queue.
2076
+ *
2077
+ * Takes ids only; unlike `bulkRejectProposals` there is deliberately no
2078
+ * `filter` form, because a filter that bulk-ACCEPTS is a different kind of
2079
+ * thing from one that bulk-dismisses: rejecting a mis-filtered set costs a
2080
+ * re-proposal, accepting one writes to the catalogue.
2081
+ *
2082
+ * Caps at 100 per call. ⚠️ **Partial success is normal** — apply branches
2083
+ * into four different update/create paths and each id is applied
2084
+ * independently, so `failed` being non-empty alongside a non-zero `applied`
2085
+ * is the expected shape, not an error. Never report a partial as a success.
2086
+ *
2087
+ * Returns `{ applied, failed: [{ id, error }], skipped }`. `skipped` is
2088
+ * always empty here (a non-pending id arrives as a `failed` entry carrying
2089
+ * its own message); the key exists so one client shape reads apply, reject
2090
+ * and undo alike.
2091
+ */
2092
+ bulkApplyProposals(input: {
2093
+ proposal_ids: string[];
2094
+ /**
2095
+ * ADR-180 Rule 12 preview. When true the server writes NOTHING and answers
2096
+ * `{ dry_run: true, would_affect, not_pending }` instead of the apply
2097
+ * shape — so callers must branch on `dry_run` rather than reading
2098
+ * `applied`, which is absent from a preview.
2099
+ */
2100
+ dry_run?: boolean;
2101
+ }): Promise<{
2102
+ applied?: number;
2103
+ failed?: Array<{
2104
+ id: string;
2105
+ error: string;
2106
+ }>;
2107
+ skipped?: string[];
2108
+ dry_run?: boolean;
2109
+ would_affect?: number;
2110
+ not_pending?: Array<{
2111
+ id: string;
2112
+ error: string;
2113
+ }>;
2114
+ }>;
1966
2115
  /**
1967
2116
  * ADR-178: File a proposal sourced from open-web agent research.
1968
2117
  *
@@ -2022,6 +2171,17 @@ declare class RegistrationResource extends BaseResource {
2022
2171
  export interface CatalogHealthItem {
2023
2172
  grain: "work" | "recording" | "release" | "person";
2024
2173
  issue: string;
2174
+ /**
2175
+ * A sentence a person would recognise ("recordings sharing an ISRC with
2176
+ * another recording"), or null when the issue has no wording yet.
2177
+ *
2178
+ * ⚠️ SAY THIS, NOT `issue`. A bare key relayed to a user reads as
2179
+ * "junk_person" — the failure recorded in `.claude/rules/canonical-model.md`,
2180
+ * where an agent said "WORK_NO_WRITER" out loud because a narrowing adapter
2181
+ * dropped the only human-readable field. `issue` stays for arguments
2182
+ * (`catalogHealthPlan({only: [...]})` selects on it); label is for prose.
2183
+ */
2184
+ label: string | null;
2025
2185
  dimension: "completeness" | "cleanliness";
2026
2186
  severity: "high" | "medium" | "low";
2027
2187
  count: number;
@@ -2305,10 +2465,12 @@ export interface AcknowledgeNotificationsResponse {
2305
2465
  }
2306
2466
  declare class DiscoveriesResource extends BaseResource {
2307
2467
  /**
2308
- * Drain a pending discovered_credits row into a work_credits row in
2309
- * the caller's org. Check-and-set on statusreturns
2310
- * DISCOVERY_ALREADY_RESOLVED (409) if another session won the race.
2311
- * is_first_claim=true triggers the checkout pill on the agent surface.
2468
+ * Claim a pending discovered_credits row in the caller's org. ADR-252
2469
+ * WS-A: this is a STATUS TRANSITION on discovered_creditsno credit
2470
+ * row is written anywhere by this call. Check-and-set on status —
2471
+ * returns DISCOVERY_ALREADY_RESOLVED (409) if another session won the
2472
+ * race. is_first_claim=true triggers the checkout pill on the agent
2473
+ * surface.
2312
2474
  */
2313
2475
  claimCredit(id: string): Promise<ClaimCreditResponse>;
2314
2476
  /**
@@ -2322,10 +2484,13 @@ declare class DiscoveriesResource extends BaseResource {
2322
2484
  */
2323
2485
  claimCustody(id: string): Promise<ClaimCustodyResponse>;
2324
2486
  /**
2325
- * INSTANT path — drain a pending discovered_artists row into the
2326
- * work_claims + work_credits tables via
2327
- * artistClaimingService.processClaimDecision. No +72h window; identity
2328
- * evidence was validated at discovery time.
2487
+ * INSTANT path — drain a pending discovered_artists row via
2488
+ * artistClaimingService.processClaimDecision: CAS-updates work_claims
2489
+ * and inserts the claimed performer credit. ADR-252 WS-A: a performer
2490
+ * credit is a MASTER credit, so it lands in recording_credits (role
2491
+ * 'Performer') on the work's sole recording — NOT the dropped
2492
+ * work_credits table. No +72h window; identity evidence was validated
2493
+ * at discovery time.
2329
2494
  *
2330
2495
  * Refuses with 409 ADMIN_REVIEW_IN_PROGRESS when an open artist_claims
2331
2496
  * row exists for the same (work, person) — see response body
@@ -2826,6 +2991,47 @@ declare class ExportResource extends BaseResource {
2826
2991
  work_id?: string;
2827
2992
  work_ids?: string[];
2828
2993
  }): Promise<any>;
2994
+ /**
2995
+ * The three diligence documents that had no agent path at all until
2996
+ * 2026-07-30 (ADR-303). Each has had a working route and a fully-styled PDF
2997
+ * for months, reachable only by typing the URL, because the buttons that
2998
+ * opened them lived in the `/admin` page tree ADR-251 retired.
2999
+ *
3000
+ * `delivery=url` is the default here for the same reason PR 3 moved the other
3001
+ * exports onto it: `request()` calls `response.json()`, so an inline binary ZIP
3002
+ * cannot cross this transport. `inline` swaps to `format=json` for a sandboxed
3003
+ * agent that cannot fetch a signed S3 URL.
3004
+ */
3005
+ /**
3006
+ * The ADR-100 catalogue snapshot: score, financials, ownership coverage, gaps
3007
+ * with a suggested action for each, physical and production assets, and a
3008
+ * "what to do next" list.
3009
+ *
3010
+ * It had no agent path and no UI control — its buttons lived on the
3011
+ * `/admin/catalog` pages ADR-251 retired, which is why an 80%-implemented
3012
+ * "replace the nine fragments with one document" decision quietly stopped
3013
+ * being reachable at all. Restored 2026-07-30 rather than deleted: the
3014
+ * roadmap and the production-asset provenance exist nowhere else.
3015
+ */
3016
+ picaSnapshot(params?: {
3017
+ scope?: "everything" | "selected" | "work";
3018
+ work_ids?: string[];
3019
+ }): Promise<any>;
3020
+ ownershipRecord(params?: {
3021
+ inline?: boolean;
3022
+ }): Promise<any>;
3023
+ rightsProof(params?: {
3024
+ inline?: boolean;
3025
+ }): Promise<any>;
3026
+ /**
3027
+ * The diligence PACK (the ZIP with its PDF). Distinct from
3028
+ * `analytics.catalogDiligence()`, which reads the same data as JSON and stays
3029
+ * the right tool for "am I ready to register?" — a question that wants an
3030
+ * answer, not a document.
3031
+ */
3032
+ diligencePack(params?: {
3033
+ inline?: boolean;
3034
+ }): Promise<any>;
2829
3035
  songRegistration(params?: {
2830
3036
  iswc_status?: "missing" | "present" | "all";
2831
3037
  work_ids?: string[];
@@ -3013,11 +3219,33 @@ interface ImportResult {
3013
3219
  errors: Array<{
3014
3220
  row: number;
3015
3221
  field: string;
3016
- message: string;
3222
+ /** The server's ValidationError carries the text in `error`; `message`
3223
+ * is kept for callers that normalised it. Read `error ?? message`. */
3224
+ error?: string;
3225
+ message?: string;
3226
+ /** "error" = the row did not land; "warning" = skipped duplicate etc. */
3017
3227
  severity: string;
3018
3228
  }>;
3019
3229
  summary: string;
3020
3230
  dryRun: boolean;
3231
+ /**
3232
+ * True when a LIVE run wrote rows AND some rows failed with severity
3233
+ * "error" (a batch import is not transactional — the written rows are
3234
+ * committed). Set by POST /admin/import/execute; false for a clean run,
3235
+ * a dry run, or a run whose only "errors" are warnings.
3236
+ */
3237
+ partial?: boolean;
3238
+ /**
3239
+ * Which slice of the file this call imported (ADR-314). `nextOffset` is
3240
+ * the `rowOffset` to pass next, or null when the file is done.
3241
+ */
3242
+ rowRange?: {
3243
+ offset: number;
3244
+ limit: number;
3245
+ count: number;
3246
+ totalRowsInFile: number;
3247
+ nextOffset: number | null;
3248
+ };
3021
3249
  }
3022
3250
  /**
3023
3251
  * Source of CSV content — exactly one must be provided:
@@ -3072,6 +3300,14 @@ declare class ImportResource extends BaseResource {
3072
3300
  dryRun?: boolean;
3073
3301
  skipInvalidRows?: boolean;
3074
3302
  batchSize?: number;
3303
+ /** "skip" (server default): a row that trips a unique constraint
3304
+ * becomes a warning, the rest of its batch still lands.
3305
+ * "error": one collision fails the whole batch. */
3306
+ conflictStrategy?: "skip" | "error";
3307
+ /** First data row to import, 0-based (default 0). ADR-314 cursor. */
3308
+ rowOffset?: number;
3309
+ /** Rows to import in this call (server default 2,000, max 10,000). */
3310
+ rowLimit?: number;
3075
3311
  };
3076
3312
  }): Promise<ImportResult>;
3077
3313
  getFields(domain: ImportDomain): Promise<Array<{
@@ -3304,7 +3540,11 @@ declare class CollaboratorsResource extends BaseResource {
3304
3540
  }>>;
3305
3541
  /**
3306
3542
  * ADR-157 warm path — accept an invite addressed to the authenticated
3307
- * user. Writes a real work_credits row and flips status to confirmed.
3543
+ * user, and flip its status to confirmed. The credit write is
3544
+ * grain-routed (ADR-265): a composition-grain invite writes
3545
+ * work_collaborators, a master/owner-grain invite attests the person's
3546
+ * pending recording_credits. ADR-252 WS-A dropped work_credits at
3547
+ * DB-M3, so no row is written there.
3308
3548
  */
3309
3549
  accept(inviteId: string): Promise<Record<string, unknown>>;
3310
3550
  /**
@@ -3670,9 +3910,14 @@ declare class RecordingCreditsResource extends BaseResource {
3670
3910
  */
3671
3911
  atomicAdd(recordingId: string, input: RecordingCreditCreateInput): Promise<AtomicCreditResult>;
3672
3912
  /**
3673
- * ADR-232 atomic remove — DELETE with `?atomic=1` so the route returns 403
3674
- * INSUFFICIENT_SCOPE on 0-row instead of the legacy lenient silent
3675
- * success. AC-2 strict semantics for pica_credit_remove.
3913
+ * ADR-232 atomic remove — the route returns 403 INSUFFICIENT_SCOPE on a
3914
+ * 0-row delete. AC-2 strict semantics for pica_credit_remove.
3915
+ *
3916
+ * As of 2026-08-24 that is the route's behaviour for every caller, flagged
3917
+ * or not; `?atomic=1` is kept only so an older published server keeps
3918
+ * working, and is accepted-and-ignored server-side. **Remove when
3919
+ * `@withpica/mcp-server` 2.96.0 ships (the alias-removal release)**, together
3920
+ * with the route's param handling — the two must go in the same release.
3676
3921
  */
3677
3922
  atomicRemove(recordingId: string, creditId: string): Promise<AtomicCreditResult>;
3678
3923
  /**
@@ -4173,6 +4418,17 @@ declare class ShareLinksResource extends BaseResource {
4173
4418
  */
4174
4419
  delete(id: string): Promise<any>;
4175
4420
  }
4421
+ /**
4422
+ * ADR-300 — the read side of the ADR-292 consent ledger. Read-only by
4423
+ * design: consent WRITES stay human-session only (the per-subject consent
4424
+ * routes refuse Bearer callers), so there is deliberately no write method
4425
+ * on this resource.
4426
+ */
4427
+ declare class ConsentResource extends BaseResource {
4428
+ readiness(params?: {
4429
+ limit?: number;
4430
+ }): Promise<any>;
4431
+ }
4176
4432
  declare class CustodyResource extends BaseResource {
4177
4433
  claim(body: {
4178
4434
  work_id: string;
@@ -4407,6 +4663,7 @@ export declare class PicaClient {
4407
4663
  recordings: RecordingsResource;
4408
4664
  licensing: LicensingResource;
4409
4665
  bookings: BookingsResource;
4666
+ shows: ShowsResource;
4410
4667
  credits: CreditsResource;
4411
4668
  creditsBalance: CreditsBalanceResource;
4412
4669
  picaScore: PicaScoreResource;
@@ -4461,6 +4718,7 @@ export declare class PicaClient {
4461
4718
  royalties: RoyaltiesResource;
4462
4719
  statements: StatementsResource;
4463
4720
  shareLinks: ShareLinksResource;
4721
+ consent: ConsentResource;
4464
4722
  custody: CustodyResource;
4465
4723
  recordingCustody: RecordingCustodyResource;
4466
4724
  recordingSamples: RecordingSamplesResource;