@wevion/cli 1.0.3584 → 1.0.3602

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.
Files changed (2) hide show
  1. package/openapi.json +206 -19
  2. package/package.json +1 -1
package/openapi.json CHANGED
@@ -6597,7 +6597,8 @@
6597
6597
  "confirmed_at",
6598
6598
  "confirmed_by",
6599
6599
  "second_approver_id",
6600
- "executed_at"
6600
+ "executed_at",
6601
+ "closed_at"
6601
6602
  ],
6602
6603
  "properties": {
6603
6604
  "id": {
@@ -6676,6 +6677,17 @@
6676
6677
  "type": "null"
6677
6678
  }
6678
6679
  ]
6680
+ },
6681
+ "closed_at": {
6682
+ "anyOf": [
6683
+ {
6684
+ "format": "date-time",
6685
+ "type": "string"
6686
+ },
6687
+ {
6688
+ "type": "null"
6689
+ }
6690
+ ]
6679
6691
  }
6680
6692
  }
6681
6693
  }
@@ -88232,6 +88244,17 @@
88232
88244
  }
88233
88245
  ]
88234
88246
  },
88247
+ "closed_at": {
88248
+ "anyOf": [
88249
+ {
88250
+ "format": "date-time",
88251
+ "type": "string"
88252
+ },
88253
+ {
88254
+ "type": "null"
88255
+ }
88256
+ ]
88257
+ },
88235
88258
  "executed_at": {
88236
88259
  "anyOf": [
88237
88260
  {
@@ -157719,12 +157742,8 @@
157719
157742
  "application/json": {
157720
157743
  "schema": {
157721
157744
  "additionalProperties": false,
157745
+ "description": "Partial update of the personal workspace override. A key that is absent leaves the stored value untouched; an array that is present replaces it, and an empty array clears it. Send only what the user actually changed. To drop every personal choice at once call POST /api/v1/my-workspace/reset.",
157722
157746
  "type": "object",
157723
- "required": [
157724
- "hidden_module_ids",
157725
- "pinned_module_ids",
157726
- "reordered_module_ids"
157727
- ],
157728
157747
  "properties": {
157729
157748
  "hidden_hub_ids": {
157730
157749
  "maxItems": 20,
@@ -157779,7 +157798,8 @@
157779
157798
  }
157780
157799
  }
157781
157800
  }
157782
- }
157801
+ },
157802
+ "description": "Partial update of the personal workspace override. A key that is absent leaves the stored value untouched; an array that is present replaces it, and an empty array clears it. Send only what the user actually changed. To drop every personal choice at once call POST /api/v1/my-workspace/reset."
157783
157803
  },
157784
157804
  "security": [
157785
157805
  {
@@ -160387,7 +160407,7 @@
160387
160407
  "properties": {
160388
160408
  "preferences": {
160389
160409
  "minItems": 1,
160390
- "maxItems": 49,
160410
+ "maxItems": 50,
160391
160411
  "type": "array",
160392
160412
  "items": {
160393
160413
  "additionalProperties": false,
@@ -161627,7 +161647,7 @@
161627
161647
  "tags": [
161628
161648
  "onboarding"
161629
161649
  ],
161630
- "description": "Idempotently records onboarding completion time and optional wizard duration for the current user session.",
161650
+ "description": "Sole writer of the \"wizard completed\" fact: sets onboarding_state.wizard_completed and, on the first call only, the completion timestamp and the optional wizard duration, in one atomic statement. Later calls return already_completed: true and never move the first completion time.",
161631
161651
  "requestBody": {
161632
161652
  "required": true,
161633
161653
  "content": {
@@ -161706,6 +161726,69 @@
161706
161726
  }
161707
161727
  }
161708
161728
  },
161729
+ "/api/v1/onboarding/wizard-reset": {
161730
+ "post": {
161731
+ "operationId": "postApiV1OnboardingWizardReset",
161732
+ "summary": "Reopen the onboarding wizard for the current user (PRD-37)",
161733
+ "tags": [
161734
+ "onboarding"
161735
+ ],
161736
+ "description": "Clears onboarding_state.wizard_completed so the wizard can be taken again. The first-completion timestamp (onboarding_completed_at) and the recorded duration are preserved.",
161737
+ "security": [
161738
+ {
161739
+ "bearerAuth": []
161740
+ }
161741
+ ],
161742
+ "responses": {
161743
+ "200": {
161744
+ "description": "Successful response",
161745
+ "content": {
161746
+ "application/json": {
161747
+ "schema": {
161748
+ "type": "object",
161749
+ "required": [
161750
+ "wizard_completed"
161751
+ ],
161752
+ "properties": {
161753
+ "wizard_completed": {
161754
+ "type": "boolean"
161755
+ }
161756
+ }
161757
+ }
161758
+ }
161759
+ }
161760
+ },
161761
+ "401": {
161762
+ "description": "Unauthorized - missing or invalid bearer token",
161763
+ "content": {
161764
+ "application/json": {
161765
+ "schema": {
161766
+ "$ref": "#/components/schemas/ErrorResponse"
161767
+ }
161768
+ }
161769
+ }
161770
+ },
161771
+ "500": {
161772
+ "description": "Internal server error",
161773
+ "content": {
161774
+ "application/json": {
161775
+ "schema": {
161776
+ "type": "object",
161777
+ "required": [
161778
+ "error"
161779
+ ],
161780
+ "properties": {
161781
+ "error": {
161782
+ "type": "string"
161783
+ }
161784
+ }
161785
+ }
161786
+ }
161787
+ }
161788
+ }
161789
+ }
161790
+ }
161791
+ },
161709
161792
  "/api/v1/onboarding/launch-progress": {
161710
161793
  "get": {
161711
161794
  "operationId": "getApiV1OnboardingLaunchProgress",
@@ -166877,13 +166960,16 @@
166877
166960
  },
166878
166961
  "public_profile": {
166879
166962
  "additionalProperties": false,
166880
- "description": "Profilo pubblico del partner: è il gate dell’identità reciproca.",
166963
+ "description": "Profilo pubblico del partner: è il gate dell’identità reciproca, e da qui il partner scopre a che punto è la sua revisione.",
166881
166964
  "type": "object",
166882
166965
  "required": [
166883
166966
  "approved",
166884
166967
  "avatar_url",
166885
166968
  "display_name",
166886
166969
  "handle",
166970
+ "rejected_at",
166971
+ "rejection_code",
166972
+ "review_state",
166887
166973
  "tagline"
166888
166974
  ],
166889
166975
  "properties": {
@@ -166924,6 +167010,52 @@
166924
167010
  }
166925
167011
  ]
166926
167012
  },
167013
+ "rejected_at": {
167014
+ "description": "Quando il profilo è stato rimandato indietro. Valorizzato solo insieme a `rejection_code`, cioè solo con `review_state: rejected`.",
167015
+ "anyOf": [
167016
+ {
167017
+ "format": "date-time",
167018
+ "type": "string"
167019
+ },
167020
+ {
167021
+ "type": "null"
167022
+ }
167023
+ ]
167024
+ },
167025
+ "rejection_code": {
167026
+ "description": "Il CODICE del motivo per cui il profilo è stato rimandato indietro (enum chiuso, `lib/partner-reason-codes.ts`), oppure `null`. ★ È un codice e non una frase perché la lingua la sceglie il client: il pannello lo traduce in due frasi — cosa non va, e cosa cambiare. La nota interna scritta dall’operatore NON esiste su questa superficie e non è ottenibile da qui. Non è mai valorizzato fuori da `review_state: rejected`, nemmeno su un profilo tornato in attesa dopo una modifica del partner.",
167027
+ "anyOf": [
167028
+ {
167029
+ "type": "string"
167030
+ },
167031
+ {
167032
+ "type": "null"
167033
+ }
167034
+ ]
167035
+ },
167036
+ "review_state": {
167037
+ "description": "Il verdetto della revisione del profilo pubblico. ★ Esiste perché `approved: false` collassava tre situazioni in una — «non l’ho mai mandato», «lo stanno guardando», «me l’hanno rimandato indietro» — e chi era stato rifiutato si trovava davanti un interruttore fermo, senza sapere se ci fosse qualcosa da correggere.",
167038
+ "anyOf": [
167039
+ {
167040
+ "type": "string",
167041
+ "enum": [
167042
+ "approved"
167043
+ ]
167044
+ },
167045
+ {
167046
+ "type": "string",
167047
+ "enum": [
167048
+ "pending"
167049
+ ]
167050
+ },
167051
+ {
167052
+ "type": "string",
167053
+ "enum": [
167054
+ "rejected"
167055
+ ]
167056
+ }
167057
+ ]
167058
+ },
166927
167059
  "tagline": {
166928
167060
  "description": "Una riga di presentazione.",
166929
167061
  "anyOf": [
@@ -167428,7 +167560,7 @@
167428
167560
  ],
167429
167561
  "properties": {
167430
167562
  "active_customers": {
167431
- "description": "Clienti paganti attivi nella finestra.",
167563
+ "description": "Clienti DIVENTATI paganti nella finestra (`became_customer_at` caduto nel periodo), non clienti attivi a fine periodo. Il contatore è una transizione sul giorno civile di Roma (`services/partner/partner-rollup.service.ts`), esattamente come il gemello `lost_customers`.",
167432
167564
  "minimum": 0,
167433
167565
  "type": "integer"
167434
167566
  },
@@ -168287,18 +168419,21 @@
168287
168419
  ],
168288
168420
  "responses": {
168289
168421
  "200": {
168290
- "description": "Profilo pubblico del partner: è il gate dell’identità reciproca.",
168422
+ "description": "Profilo pubblico del partner: è il gate dell’identità reciproca, e da qui il partner scopre a che punto è la sua revisione.",
168291
168423
  "content": {
168292
168424
  "application/json": {
168293
168425
  "schema": {
168294
168426
  "additionalProperties": false,
168295
- "description": "Profilo pubblico del partner: è il gate dell’identità reciproca.",
168427
+ "description": "Profilo pubblico del partner: è il gate dell’identità reciproca, e da qui il partner scopre a che punto è la sua revisione.",
168296
168428
  "type": "object",
168297
168429
  "required": [
168298
168430
  "approved",
168299
168431
  "avatar_url",
168300
168432
  "display_name",
168301
168433
  "handle",
168434
+ "rejected_at",
168435
+ "rejection_code",
168436
+ "review_state",
168302
168437
  "tagline"
168303
168438
  ],
168304
168439
  "properties": {
@@ -168339,6 +168474,52 @@
168339
168474
  }
168340
168475
  ]
168341
168476
  },
168477
+ "rejected_at": {
168478
+ "description": "Quando il profilo è stato rimandato indietro. Valorizzato solo insieme a `rejection_code`, cioè solo con `review_state: rejected`.",
168479
+ "anyOf": [
168480
+ {
168481
+ "format": "date-time",
168482
+ "type": "string"
168483
+ },
168484
+ {
168485
+ "type": "null"
168486
+ }
168487
+ ]
168488
+ },
168489
+ "rejection_code": {
168490
+ "description": "Il CODICE del motivo per cui il profilo è stato rimandato indietro (enum chiuso, `lib/partner-reason-codes.ts`), oppure `null`. ★ È un codice e non una frase perché la lingua la sceglie il client: il pannello lo traduce in due frasi — cosa non va, e cosa cambiare. La nota interna scritta dall’operatore NON esiste su questa superficie e non è ottenibile da qui. Non è mai valorizzato fuori da `review_state: rejected`, nemmeno su un profilo tornato in attesa dopo una modifica del partner.",
168491
+ "anyOf": [
168492
+ {
168493
+ "type": "string"
168494
+ },
168495
+ {
168496
+ "type": "null"
168497
+ }
168498
+ ]
168499
+ },
168500
+ "review_state": {
168501
+ "description": "Il verdetto della revisione del profilo pubblico. ★ Esiste perché `approved: false` collassava tre situazioni in una — «non l’ho mai mandato», «lo stanno guardando», «me l’hanno rimandato indietro» — e chi era stato rifiutato si trovava davanti un interruttore fermo, senza sapere se ci fosse qualcosa da correggere.",
168502
+ "anyOf": [
168503
+ {
168504
+ "type": "string",
168505
+ "enum": [
168506
+ "approved"
168507
+ ]
168508
+ },
168509
+ {
168510
+ "type": "string",
168511
+ "enum": [
168512
+ "pending"
168513
+ ]
168514
+ },
168515
+ {
168516
+ "type": "string",
168517
+ "enum": [
168518
+ "rejected"
168519
+ ]
168520
+ }
168521
+ ]
168522
+ },
168342
168523
  "tagline": {
168343
168524
  "description": "Una riga di presentazione.",
168344
168525
  "anyOf": [
@@ -171973,7 +172154,7 @@
171973
172154
  ],
171974
172155
  "properties": {
171975
172156
  "active_customers": {
171976
- "description": "Clienti paganti attribuiti a questa variante.",
172157
+ "description": "Clienti DIVENTATI paganti nella finestra e attribuiti a questa variante: è la transizione (`became_customer_at` caduto nel periodo), non lo stato a fine periodo.",
171977
172158
  "minimum": 0,
171978
172159
  "type": "integer"
171979
172160
  },
@@ -172137,7 +172318,7 @@
172137
172318
  "tags": [
172138
172319
  "partner"
172139
172320
  ],
172140
- "description": "Serie per giorno dei click (dal rollup) e ripartizione per paese (on-the-fly su `partner_click`, k≥5). Il giorno corrente è parziale e va etichettato come tale. La ripartizione paese è un istogramma aggregato: sotto 5 click un paese confluisce in `altro`, così un click singolo non identifica nessuno.",
172321
+ "description": "Serie per giorno dei click (dal rollup) e ripartizione per paese (on-the-fly su `partner_click`, k≥5). Il giorno corrente è parziale e va etichettato come tale. Le due letture hanno finestre DIVERSE per costruzione: `days` segue `from`/`to`, mentre `countries` guarda sempre gli ultimi `countries_window_days` giorni civili di Roma — se seguisse la richiesta, due letture annidate ricostruirebbero per differenza i conteggi sotto soglia. Sotto i 5 click un paese confluisce in `altro`, e se anche `altro` resta sotto 5 il residuo non compare affatto. ⚠️ La stessa leva resta APERTA su `GET /unattributed`, che questa modifica non tocca: là le classi sono codici di qualità del click (`invalid_reason`), non geografia di una persona, ed è una decisione a parte.",
172141
172322
  "parameters": [
172142
172323
  {
172143
172324
  "schema": {
@@ -172179,6 +172360,7 @@
172179
172360
  "required": [
172180
172361
  "as_of",
172181
172362
  "countries",
172363
+ "countries_window_days",
172182
172364
  "days",
172183
172365
  "partial_today"
172184
172366
  ],
@@ -172189,7 +172371,7 @@
172189
172371
  "type": "string"
172190
172372
  },
172191
172373
  "countries": {
172192
- "description": "Ripartizione dei click validi per paese, calcolata on-the-fly su `partner_click`. Un paese con meno di 5 click confluisce in `altro`: è un istogramma aggregato, mai la geo di riga di un referito (§4.4).",
172374
+ "description": "Ripartizione dei click validi per paese, calcolata on-the-fly su `partner_click`. La finestra è FISSA — gli ultimi `countries_window_days` giorni civili di Roma, oggi incluso — e NON segue `from`/`to`: se la scegliesse il chiamante, due letture annidate si sottrarrebbero e ricostruirebbero per differenza i conteggi sotto soglia, rendendo decorativo il k≥5. Un paese sotto i 5 click non esce col proprio nome ma confluisce in `altro`; se anche `altro` resta sotto 5, il residuo non compare in nessuna riga e nessun campo lo dichiara. Conseguenza da tenere presente: con una finestra chiesta più stretta di quella fissa, la somma di `countries` NON è confrontabile con la somma di `days[].clicks_valid`. È un istogramma aggregato, mai la geo di riga di un referito (§4.4).",
172193
172375
  "type": "array",
172194
172376
  "items": {
172195
172377
  "additionalProperties": false,
@@ -172200,7 +172382,7 @@
172200
172382
  ],
172201
172383
  "properties": {
172202
172384
  "clicks": {
172203
- "description": "Click validi dal paese nella finestra.",
172385
+ "description": "Click validi dal paese nella finestra FISSA dei paesi (`countries_window_days`), non nella finestra chiesta con `from`/`to`.",
172204
172386
  "minimum": 0,
172205
172387
  "type": "integer"
172206
172388
  },
@@ -172211,6 +172393,11 @@
172211
172393
  }
172212
172394
  }
172213
172395
  },
172396
+ "countries_window_days": {
172397
+ "description": "Ampiezza, in giorni civili di Roma e con oggi incluso, della finestra su cui `countries` è contata. È fissa e indipendente da `from`/`to`: la risposta la dichiara perché il chiamante non può dedurla dalla richiesta. Due letture a un giorno di distanza differiscono quindi di un giorno di dati, ed è una differenza fra due istogrammi lunghi, non un conteggio giornaliero.",
172398
+ "minimum": 1,
172399
+ "type": "integer"
172400
+ },
172214
172401
  "days": {
172215
172402
  "description": "Serie per giorno, ordinata dal più vecchio al più recente. Solo i giorni con traffico.",
172216
172403
  "type": "array",
@@ -172247,7 +172434,7 @@
172247
172434
  "type": "string"
172248
172435
  },
172249
172436
  "signups": {
172250
- "description": "Iscritti attribuiti al giorno.",
172437
+ "description": "Iscritti attribuiti al giorno, a grana UNO. ★ Il k≥5 NON si applica qui, ed è una scelta: la data di iscrizione della singola persona è già pubblicata riga per riga da `GET /referrals` (`signed_up_on`) e dal suo export CSV, quindi nascondere l’aggregato rovinerebbe un numero legittimo senza proteggere nulla che non sia già esportabile.",
172251
172438
  "minimum": 0,
172252
172439
  "type": "integer"
172253
172440
  }
@@ -172469,7 +172656,7 @@
172469
172656
  ],
172470
172657
  "properties": {
172471
172658
  "active_customers": {
172472
- "description": "Clienti paganti.",
172659
+ "description": "Clienti DIVENTATI paganti nella finestra (transizione `became_customer_at`), non attivi a fine periodo.",
172473
172660
  "minimum": 0,
172474
172661
  "type": "integer"
172475
172662
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wevion/cli",
3
- "version": "1.0.3584",
3
+ "version": "1.0.3602",
4
4
  "description": "Wevion API command-line interface — generated from the public OpenAPI spec",
5
5
  "type": "module",
6
6
  "bin": {