@zinn-digital/sdk 0.1.1402 → 0.1.1405

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.
@@ -15972,6 +15972,54 @@ export interface paths {
15972
15972
  patch: operations["updateAdsAutopilotDecisions"];
15973
15973
  trace?: never;
15974
15974
  };
15975
+ "/v1/ads/brief": {
15976
+ parameters: {
15977
+ query?: never;
15978
+ header?: never;
15979
+ path?: never;
15980
+ cookie?: never;
15981
+ };
15982
+ /**
15983
+ * The one brief across every ad network, and the split it drives.
15984
+ * @description Gated on `ads.view`. Read from our own rows (no network call): the objective (`leads` or `revenue`), the monthly budget, the optional target and the test share, and per network its current and proposed monthly ceiling and `why` (`bestReturn`, `offTarget`, `testShare`, `held`, `unreadable`, `otherCurrency`, `noReturn`), plus the versions saved in the last 30 days. The split is the cross-network budget's proposal (docs/1006 §113, §67), measured daily by a Temporal workflow and applied with `applyAdsCrossBudget`.
15985
+ */
15986
+ get: operations["getAdsBrief"];
15987
+ /**
15988
+ * State the objective and the budget once, for every network.
15989
+ * @description Gated on `ads.manage`; audit action `ads.brief_set`. Sets the cross-network monthly ceiling to `budget_minor` and ranks the split by `objective`; the brief it replaces is kept 30 days for `undoAdsBrief`. Measured again now by a Temporal workflow, never in the request; nothing is applied (approve-first unless `mode: auto`). Refusals `refusal.adsconnect.briefBadObjective`, `briefBadBudget`, `briefBadCurrency`, `briefBadTarget`, `briefBadTestShare`, `briefBadMode`.
15990
+ */
15991
+ put: operations["setAdsBrief"];
15992
+ post?: never;
15993
+ /**
15994
+ * Remove the brief (the budget stays, split by conversions per spend).
15995
+ * @description Gated on `ads.manage`; audit action `ads.brief_clear`. Kept as a version, so it can be undone within 30 days.
15996
+ */
15997
+ delete: operations["clearAdsBrief"];
15998
+ options?: never;
15999
+ head?: never;
16000
+ patch?: never;
16001
+ trace?: never;
16002
+ };
16003
+ "/v1/ads/brief/undo": {
16004
+ parameters: {
16005
+ query?: never;
16006
+ header?: never;
16007
+ path?: never;
16008
+ cookie?: never;
16009
+ };
16010
+ get?: never;
16011
+ put?: never;
16012
+ /**
16013
+ * Put back the brief the last save replaced.
16014
+ * @description Gated on `ads.manage`; audit action `ads.brief_undo`. Refused with `refusal.adsconnect.briefNothingToUndo` when no version from the last 30 days is left.
16015
+ */
16016
+ post: operations["undoAdsBrief"];
16017
+ delete?: never;
16018
+ options?: never;
16019
+ head?: never;
16020
+ patch?: never;
16021
+ trace?: never;
16022
+ };
15975
16023
  "/v1/ads/builds": {
15976
16024
  parameters: {
15977
16025
  query?: never;
@@ -20141,6 +20189,26 @@ export interface paths {
20141
20189
  patch?: never;
20142
20190
  trace?: never;
20143
20191
  };
20192
+ "/v1/ads/shield/claims/{claim_id}/outcome": {
20193
+ parameters: {
20194
+ query?: never;
20195
+ header?: never;
20196
+ path?: never;
20197
+ cookie?: never;
20198
+ };
20199
+ get?: never;
20200
+ put?: never;
20201
+ /**
20202
+ * Record Google's answer to a sent pack (credit received or none).
20203
+ * @description Gated on `ads.manage`; audit action `ads.shield_claim_outcome` (za-22, za-N8). For a pack marked sent, a person records the credit Google gave (integer minor units, §2.8) or that Google gave none: card-paying accounts have no invoices to read, so Google's reply is the only answer. Zinn® never moves money here; this is a record of a credit Google gave the ad account. 409 when the pack is not sent yet, or when its answer was read from the account's invoices (those are never overwritten). A person-recorded answer can be corrected; the write is conditional, so an invoice answer landing while the request runs is a 409, never overwritten.
20204
+ */
20205
+ post: operations["recordAdsShieldClaimOutcome"];
20206
+ delete?: never;
20207
+ options?: never;
20208
+ head?: never;
20209
+ patch?: never;
20210
+ trace?: never;
20211
+ };
20144
20212
  "/v1/ads/shield/claims/{claim_id}/sent": {
20145
20213
  parameters: {
20146
20214
  query?: never;
@@ -29908,6 +29976,26 @@ export interface paths {
29908
29976
  patch?: never;
29909
29977
  trace?: never;
29910
29978
  };
29979
+ "/v1/databases/my-address": {
29980
+ parameters: {
29981
+ query?: never;
29982
+ header?: never;
29983
+ path?: never;
29984
+ cookie?: never;
29985
+ };
29986
+ /**
29987
+ * The address this request came from, to suggest for a database allow-list.
29988
+ * @description Gated on `databases.view`. A database hostname publishes both an A and an AAAA record, so a client that prefers IPv6 connects from its IPv6 address and is refused if only its IPv4 address is listed. The dashboard offers this address (and the one its own origin sees, which may be the other family) so the customer can add both. Read from the forwarding header our own ingress writes, never from a value the caller supplies; `address` is null when it cannot be resolved.
29989
+ */
29990
+ get: operations["getManagedDatabaseClientAddress"];
29991
+ put?: never;
29992
+ post?: never;
29993
+ delete?: never;
29994
+ options?: never;
29995
+ head?: never;
29996
+ patch?: never;
29997
+ trace?: never;
29998
+ };
29911
29999
  "/v1/domain-alerts": {
29912
30000
  parameters: {
29913
30001
  query?: never;
@@ -62230,6 +62318,64 @@ export interface components {
62230
62318
  /** @description Our absolute-top share on the brand keywords below this (with rank loss) means someone is placed above us. */
62231
62319
  top_floor_pct: number;
62232
62320
  };
62321
+ AdsBrief: {
62322
+ /** @enum {string} */
62323
+ blocked: "" | "noReturnYet";
62324
+ brief: {
62325
+ /** @description Integer minor units (§2.8). */
62326
+ budget_minor: number | null;
62327
+ currency: string;
62328
+ /** @enum {string} */
62329
+ mode: "suggest" | "auto";
62330
+ /** @enum {string} */
62331
+ objective: "leads" | "revenue";
62332
+ target: number | null;
62333
+ test_share_pct: number;
62334
+ } | null;
62335
+ can_undo_brief: boolean;
62336
+ keep_days: number;
62337
+ last_apply: {
62338
+ at: string | null;
62339
+ by: string | null;
62340
+ can_undo: boolean;
62341
+ moves: components["schemas"]["AdsCrossBudgetMove"][];
62342
+ undone_at: string | null;
62343
+ } | null;
62344
+ /** Format: date-time */
62345
+ measured_at: string | null;
62346
+ moves: components["schemas"]["AdsCrossBudgetMove"][];
62347
+ /** Format: uuid */
62348
+ org_id: string;
62349
+ split: {
62350
+ /** Format: uuid */
62351
+ connection_id: string;
62352
+ conversions_milli: number;
62353
+ cost_minor: number;
62354
+ current_minor: number | null;
62355
+ label: string;
62356
+ platform: string;
62357
+ proposed_minor: number | null;
62358
+ value_minor: number;
62359
+ why: components["schemas"]["AdsBriefWhy"];
62360
+ }[];
62361
+ test_share_max: number;
62362
+ test_share_min: number;
62363
+ test_share_recommended: number;
62364
+ versions: {
62365
+ /** Format: date-time */
62366
+ at: string;
62367
+ brief: {
62368
+ [key: string]: unknown;
62369
+ };
62370
+ by: string;
62371
+ /** Format: uuid */
62372
+ id: string;
62373
+ /** Format: date-time */
62374
+ undone_at: string | null;
62375
+ }[];
62376
+ };
62377
+ /** @enum {string} */
62378
+ AdsBriefWhy: "bestReturn" | "offTarget" | "testShare" | "held" | "unreadable" | "otherCurrency" | "noReturn";
62233
62379
  /** @description The customer's own budget for one campaign (za-84, docs/1006 §84). */
62234
62380
  AdsBudgetDecision: {
62235
62381
  /** Format: int64 */
@@ -63141,6 +63287,10 @@ export interface components {
63141
63287
  targets: {
63142
63288
  [key: string]: number;
63143
63289
  };
63290
+ /** @description za-208 — per connection id, why it gets what it gets (absent on a proposal made before the brief existed). */
63291
+ why?: {
63292
+ [key: string]: components["schemas"]["AdsBriefWhy"];
63293
+ };
63144
63294
  };
63145
63295
  };
63146
63296
  AdsCrossBudgetMove: {
@@ -65420,9 +65570,9 @@ export interface components {
65420
65570
  connection_id: string;
65421
65571
  /** Format: date-time */
65422
65572
  credit_checked_at: string | null;
65423
- /** @description `no_monthly_invoicing` when the account has no invoices to read. */
65573
+ /** @description `no_monthly_invoicing` when the account has no invoices to read (record Google's answer by hand); `no_credit_on_invoices` when the three invoices after the month closed with no credit (declined); `recorded_by_person` when a person recorded it. */
65424
65574
  credit_note: string;
65425
- /** @description The invalid-activity credit for the month read from the account's invoices (null = none seen yet). */
65575
+ /** @description Google's invalid-activity credit for the month, integer minor units of `currency`: read from the account's invoices, or recorded by a person from Google's answer (`credit_note` = `recorded_by_person`). `0` once declined; null = no answer yet. */
65426
65576
  credited_minor: number | null;
65427
65577
  currency: string;
65428
65578
  estimated_cost_minor: number;
@@ -82690,6 +82840,12 @@ export interface components {
82690
82840
  */
82691
82841
  sizes: components["schemas"]["ManagedDatabaseSize"][];
82692
82842
  };
82843
+ ManagedDatabaseClientAddress: {
82844
+ /** @description The caller's public IP address, or null when it cannot be resolved. */
82845
+ address: string | null;
82846
+ /** @enum {string|null} */
82847
+ family: "ipv4" | "ipv6" | null;
82848
+ };
82693
82849
  ManagedDatabaseCreate: {
82694
82850
  /**
82695
82851
  * @description Optional. Omitted uses PostgreSQL. ⛔ Must match the engine the `size` code belongs to — a MySQL request carrying a `db_pg_*` size is refused, because it would run one engine and bill the other.
@@ -134949,6 +135105,136 @@ export interface operations {
134949
135105
  429: components["responses"]["TooManyRequests"];
134950
135106
  };
134951
135107
  };
135108
+ getAdsBrief: {
135109
+ parameters: {
135110
+ query?: {
135111
+ org_id?: string;
135112
+ };
135113
+ header?: never;
135114
+ path?: never;
135115
+ cookie?: never;
135116
+ };
135117
+ requestBody?: never;
135118
+ responses: {
135119
+ /** @description The brief and the split it drives. */
135120
+ 200: {
135121
+ headers: {
135122
+ [name: string]: unknown;
135123
+ };
135124
+ content: {
135125
+ "application/json": components["schemas"]["AdsBrief"];
135126
+ };
135127
+ };
135128
+ 401: components["responses"]["Unauthorized"];
135129
+ 403: components["responses"]["Forbidden"];
135130
+ 404: components["responses"]["NotFound"];
135131
+ 422: components["responses"]["UnprocessableEntity"];
135132
+ 429: components["responses"]["TooManyRequests"];
135133
+ };
135134
+ };
135135
+ setAdsBrief: {
135136
+ parameters: {
135137
+ query?: never;
135138
+ header?: never;
135139
+ path?: never;
135140
+ cookie?: never;
135141
+ };
135142
+ requestBody: {
135143
+ content: {
135144
+ "application/json": {
135145
+ /** @description The monthly budget, integer minor units of `currency` (§2.8). */
135146
+ budget_minor: number;
135147
+ /** @description ISO 4217 */
135148
+ currency: string;
135149
+ /** @enum {string} */
135150
+ mode?: "suggest" | "auto";
135151
+ /** @enum {string} */
135152
+ objective: "leads" | "revenue";
135153
+ /** Format: uuid */
135154
+ org_id?: string;
135155
+ /** @description `leads` — a cost per conversion in minor units; `revenue` — a ROAS in %. */
135156
+ target?: number | null;
135157
+ /** @description The share the networks with no measured return test with (recommended 10). */
135158
+ test_share_pct?: number;
135159
+ };
135160
+ };
135161
+ };
135162
+ responses: {
135163
+ /** @description The brief and the split it drives. */
135164
+ 200: {
135165
+ headers: {
135166
+ [name: string]: unknown;
135167
+ };
135168
+ content: {
135169
+ "application/json": components["schemas"]["AdsBrief"];
135170
+ };
135171
+ };
135172
+ 401: components["responses"]["Unauthorized"];
135173
+ 403: components["responses"]["Forbidden"];
135174
+ 404: components["responses"]["NotFound"];
135175
+ 422: components["responses"]["UnprocessableEntity"];
135176
+ 429: components["responses"]["TooManyRequests"];
135177
+ };
135178
+ };
135179
+ clearAdsBrief: {
135180
+ parameters: {
135181
+ query?: {
135182
+ org_id?: string;
135183
+ };
135184
+ header?: never;
135185
+ path?: never;
135186
+ cookie?: never;
135187
+ };
135188
+ requestBody?: never;
135189
+ responses: {
135190
+ /** @description The brief and the split it drives. */
135191
+ 200: {
135192
+ headers: {
135193
+ [name: string]: unknown;
135194
+ };
135195
+ content: {
135196
+ "application/json": components["schemas"]["AdsBrief"];
135197
+ };
135198
+ };
135199
+ 401: components["responses"]["Unauthorized"];
135200
+ 403: components["responses"]["Forbidden"];
135201
+ 404: components["responses"]["NotFound"];
135202
+ 422: components["responses"]["UnprocessableEntity"];
135203
+ 429: components["responses"]["TooManyRequests"];
135204
+ };
135205
+ };
135206
+ undoAdsBrief: {
135207
+ parameters: {
135208
+ query?: never;
135209
+ header?: never;
135210
+ path?: never;
135211
+ cookie?: never;
135212
+ };
135213
+ requestBody?: {
135214
+ content: {
135215
+ "application/json": {
135216
+ /** Format: uuid */
135217
+ org_id?: string;
135218
+ };
135219
+ };
135220
+ };
135221
+ responses: {
135222
+ /** @description The brief and the split it drives. */
135223
+ 200: {
135224
+ headers: {
135225
+ [name: string]: unknown;
135226
+ };
135227
+ content: {
135228
+ "application/json": components["schemas"]["AdsBrief"];
135229
+ };
135230
+ };
135231
+ 401: components["responses"]["Unauthorized"];
135232
+ 403: components["responses"]["Forbidden"];
135233
+ 404: components["responses"]["NotFound"];
135234
+ 422: components["responses"]["UnprocessableEntity"];
135235
+ 429: components["responses"]["TooManyRequests"];
135236
+ };
135237
+ };
134952
135238
  listAdsBuilds: {
134953
135239
  parameters: {
134954
135240
  query?: {
@@ -142981,6 +143267,47 @@ export interface operations {
142981
143267
  429: components["responses"]["TooManyRequests"];
142982
143268
  };
142983
143269
  };
143270
+ recordAdsShieldClaimOutcome: {
143271
+ parameters: {
143272
+ query?: never;
143273
+ header?: never;
143274
+ path: {
143275
+ claim_id: string;
143276
+ };
143277
+ cookie?: never;
143278
+ };
143279
+ requestBody: {
143280
+ content: {
143281
+ "application/json": {
143282
+ /** @description Required when `outcome` is `credited`; minor units of the pack's currency. */
143283
+ credited_minor?: number | null;
143284
+ /** @description Only used when neither the pack nor its ad account has a currency yet; 422 when it differs from the pack's (Google credits in the account's currency). */
143285
+ currency?: string;
143286
+ /** Format: uuid */
143287
+ org_id?: string;
143288
+ /** @enum {string} */
143289
+ outcome: "credited" | "declined";
143290
+ };
143291
+ };
143292
+ };
143293
+ responses: {
143294
+ /** @description The pack. */
143295
+ 200: {
143296
+ headers: {
143297
+ [name: string]: unknown;
143298
+ };
143299
+ content: {
143300
+ "application/json": components["schemas"]["AdsShieldClaim"];
143301
+ };
143302
+ };
143303
+ 401: components["responses"]["Unauthorized"];
143304
+ 403: components["responses"]["Forbidden"];
143305
+ 404: components["responses"]["NotFound"];
143306
+ 409: components["responses"]["Conflict"];
143307
+ 422: components["responses"]["UnprocessableEntity"];
143308
+ 429: components["responses"]["TooManyRequests"];
143309
+ };
143310
+ };
142984
143311
  markAdsShieldClaimSent: {
142985
143312
  parameters: {
142986
143313
  query?: never;
@@ -159268,6 +159595,28 @@ export interface operations {
159268
159595
  403: components["responses"]["Forbidden"];
159269
159596
  };
159270
159597
  };
159598
+ getManagedDatabaseClientAddress: {
159599
+ parameters: {
159600
+ query?: never;
159601
+ header?: never;
159602
+ path?: never;
159603
+ cookie?: never;
159604
+ };
159605
+ requestBody?: never;
159606
+ responses: {
159607
+ /** @description The caller's public address, or null. */
159608
+ 200: {
159609
+ headers: {
159610
+ [name: string]: unknown;
159611
+ };
159612
+ content: {
159613
+ "application/json": components["schemas"]["ManagedDatabaseClientAddress"];
159614
+ };
159615
+ };
159616
+ 401: components["responses"]["Unauthorized"];
159617
+ 403: components["responses"]["Forbidden"];
159618
+ };
159619
+ };
159271
159620
  getDomainAlerts: {
159272
159621
  parameters: {
159273
159622
  query?: never;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zinn-digital/sdk",
3
- "version": "0.1.1402",
3
+ "version": "0.1.1405",
4
4
  "description": "Typed TypeScript client for the Zinn Digital Platform API, generated from its OpenAPI spec.",
5
5
  "license": "MIT",
6
6
  "author": "Neil Lock \u2014 CEO, Zinn Digital\u00ae Ltd <office@zinndigital.com>",