@wevion/cli 1.0.3772 → 1.0.3774

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 +420 -0
  2. package/package.json +1 -1
package/openapi.json CHANGED
@@ -171086,6 +171086,139 @@
171086
171086
  }
171087
171087
  }
171088
171088
  },
171089
+ "/api/v1/referral/offer": {
171090
+ "get": {
171091
+ "operationId": "getReferralOffer",
171092
+ "summary": "L’offerta che mi aspetta al primo checkout",
171093
+ "tags": [
171094
+ "partner"
171095
+ ],
171096
+ "description": "L’offerta del programma partner che aspetta il richiedente al suo primo checkout, per mostrarla PRIMA di Stripe (pagina piani, onboarding). 204 quando non ce n’e’ una: il richiedente non e’ un referito tracciato, il vantaggio e’ gia’ stato erogato, il programma e’ spento o congelato, oppure il catalogo del livello non e’ seminato (nessuna riga attiva: la promessa non potrebbe essere mantenuta al checkout). Non e’ un errore e non distingue i casi: la superficie mostra i prezzi pieni, come oggi.",
171097
+ "security": [
171098
+ {
171099
+ "bearerAuth": []
171100
+ }
171101
+ ],
171102
+ "responses": {
171103
+ "200": {
171104
+ "description": "L’offerta del programma partner che verra’ applicata al PRIMO checkout del richiedente. E’ la stessa risoluzione che il checkout esegue (`resolveRefereeLevel`), e risponde solo se il catalogo del livello ha almeno una riga attiva: se qui c’e’, al checkout il coupon entra in `discounts[]`, salvo una riga mancante per il singolo piano, intervallo o valuta scelti, che e’ un seed interrotto.",
171105
+ "content": {
171106
+ "application/json": {
171107
+ "schema": {
171108
+ "additionalProperties": false,
171109
+ "description": "L’offerta del programma partner che verra’ applicata al PRIMO checkout del richiedente. E’ la stessa risoluzione che il checkout esegue (`resolveRefereeLevel`), e risponde solo se il catalogo del livello ha almeno una riga attiva: se qui c’e’, al checkout il coupon entra in `discounts[]`, salvo una riga mancante per il singolo piano, intervallo o valuta scelti, che e’ un seed interrotto.",
171110
+ "type": "object",
171111
+ "required": [
171112
+ "cap_minor",
171113
+ "discount_bp",
171114
+ "duration",
171115
+ "duration_in_months",
171116
+ "level"
171117
+ ],
171118
+ "properties": {
171119
+ "cap_minor": {
171120
+ "description": "Tetto dello sconto in minor units NELLA valuta di fatturazione, come stringa (bigint).",
171121
+ "anyOf": [
171122
+ {
171123
+ "type": "string"
171124
+ },
171125
+ {
171126
+ "type": "null"
171127
+ }
171128
+ ]
171129
+ },
171130
+ "discount_bp": {
171131
+ "description": "Sconto in basis point (3000 = 30%).",
171132
+ "anyOf": [
171133
+ {
171134
+ "type": "integer"
171135
+ },
171136
+ {
171137
+ "type": "null"
171138
+ }
171139
+ ]
171140
+ },
171141
+ "duration": {
171142
+ "description": "`once` = sulla prima fattura · `repeating` = per `duration_in_months` mesi.",
171143
+ "anyOf": [
171144
+ {
171145
+ "type": "string",
171146
+ "enum": [
171147
+ "once"
171148
+ ]
171149
+ },
171150
+ {
171151
+ "type": "string",
171152
+ "enum": [
171153
+ "repeating"
171154
+ ]
171155
+ },
171156
+ {
171157
+ "type": "null"
171158
+ }
171159
+ ]
171160
+ },
171161
+ "duration_in_months": {
171162
+ "description": "Mesi di validita’ quando `duration` e’ `repeating`.",
171163
+ "anyOf": [
171164
+ {
171165
+ "type": "integer"
171166
+ },
171167
+ {
171168
+ "type": "null"
171169
+ }
171170
+ ]
171171
+ },
171172
+ "level": {
171173
+ "description": "Livello di catalogo (`partner_coupon.catalog_level`) che scattera’ al checkout.",
171174
+ "type": "string"
171175
+ }
171176
+ }
171177
+ }
171178
+ }
171179
+ }
171180
+ },
171181
+ "204": {
171182
+ "description": "Nessuna offerta in attesa per il richiedente."
171183
+ },
171184
+ "401": {
171185
+ "description": "Errore standard del backend.",
171186
+ "content": {
171187
+ "application/json": {
171188
+ "schema": {
171189
+ "additionalProperties": false,
171190
+ "description": "Errore standard del backend.",
171191
+ "type": "object",
171192
+ "required": [
171193
+ "error",
171194
+ "message",
171195
+ "statusCode"
171196
+ ],
171197
+ "properties": {
171198
+ "code": {
171199
+ "description": "Codice macchina dell’errore, quando disponibile.",
171200
+ "type": "string"
171201
+ },
171202
+ "error": {
171203
+ "description": "Etichetta breve dell’errore.",
171204
+ "type": "string"
171205
+ },
171206
+ "message": {
171207
+ "description": "Messaggio leggibile.",
171208
+ "type": "string"
171209
+ },
171210
+ "statusCode": {
171211
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
171212
+ "type": "integer"
171213
+ }
171214
+ }
171215
+ }
171216
+ }
171217
+ }
171218
+ }
171219
+ }
171220
+ }
171221
+ },
171089
171222
  "/api/v1/referral/disclosure": {
171090
171223
  "put": {
171091
171224
  "operationId": "setReferralDisclosure",
@@ -182419,6 +182552,293 @@
182419
182552
  }
182420
182553
  }
182421
182554
  },
182555
+ "/api/v1/public/contact-request": {
182556
+ "post": {
182557
+ "operationId": "createSiteContactRequest",
182558
+ "summary": "Richiesta di contatto dal sito",
182559
+ "tags": [
182560
+ "public"
182561
+ ],
182562
+ "description": "Registra una richiesta dai moduli pubblici del sito (`contact`, `get_started`) e la consegna a Customer.io attraverso l’outbox durevole. Rotta PUBBLICA: nessun login, nessuna sessione aperta. ★ Risponde SEMPRE 202 con lo stesso corpo — anche a un invio identico ripetuto entro 10 minuti e al campo trappola `website` compilato — perché la risposta non deve confermare niente su un’email. Il modulo `contact` pretende `first_name`, `company` e `topic`; `get_started` solo l’email, e rifiuta `topic`. Un campo sconosciuto è un 400. Limite: 5 invii ogni 10 minuti per IP (429).",
182563
+ "requestBody": {
182564
+ "required": true,
182565
+ "content": {
182566
+ "application/json": {
182567
+ "schema": {
182568
+ "additionalProperties": false,
182569
+ "type": "object",
182570
+ "required": [
182571
+ "email",
182572
+ "form"
182573
+ ],
182574
+ "properties": {
182575
+ "attribution": {
182576
+ "additionalProperties": false,
182577
+ "description": "Provenienza della visita: i parametri utm e il referral, mai l’URL intero.",
182578
+ "type": "object",
182579
+ "properties": {
182580
+ "ref": {
182581
+ "description": "Codice referral letto dal sito.",
182582
+ "maxLength": 64,
182583
+ "type": "string"
182584
+ },
182585
+ "utm_campaign": {
182586
+ "maxLength": 120,
182587
+ "type": "string"
182588
+ },
182589
+ "utm_content": {
182590
+ "maxLength": 120,
182591
+ "type": "string"
182592
+ },
182593
+ "utm_medium": {
182594
+ "maxLength": 120,
182595
+ "type": "string"
182596
+ },
182597
+ "utm_source": {
182598
+ "maxLength": 120,
182599
+ "type": "string"
182600
+ },
182601
+ "utm_term": {
182602
+ "maxLength": 120,
182603
+ "type": "string"
182604
+ }
182605
+ }
182606
+ },
182607
+ "company": {
182608
+ "description": "Azienda. Obbligatoria per `contact`.",
182609
+ "maxLength": 200,
182610
+ "minLength": 1,
182611
+ "type": "string"
182612
+ },
182613
+ "email": {
182614
+ "description": "Email di contatto, senza spazi intorno.",
182615
+ "format": "email",
182616
+ "maxLength": 320,
182617
+ "type": "string"
182618
+ },
182619
+ "first_name": {
182620
+ "description": "Nome. Obbligatorio per `contact`.",
182621
+ "maxLength": 100,
182622
+ "minLength": 1,
182623
+ "type": "string"
182624
+ },
182625
+ "form": {
182626
+ "description": "Il modulo di partenza: `contact` (pagina contatti) o `get_started` (pagina di prova).",
182627
+ "anyOf": [
182628
+ {
182629
+ "type": "string",
182630
+ "enum": [
182631
+ "contact"
182632
+ ]
182633
+ },
182634
+ {
182635
+ "type": "string",
182636
+ "enum": [
182637
+ "get_started"
182638
+ ]
182639
+ }
182640
+ ]
182641
+ },
182642
+ "last_name": {
182643
+ "maxLength": 100,
182644
+ "type": "string"
182645
+ },
182646
+ "locale": {
182647
+ "description": "Lingua della pagina, es. `it` o `zh-CN`.",
182648
+ "maxLength": 10,
182649
+ "pattern": "^[a-z]{2}(-[A-Z]{2})?$",
182650
+ "type": "string"
182651
+ },
182652
+ "message": {
182653
+ "maxLength": 5000,
182654
+ "type": "string"
182655
+ },
182656
+ "page_path": {
182657
+ "description": "Percorso della pagina, senza dominio né query.",
182658
+ "maxLength": 500,
182659
+ "pattern": "^/[^?#]*$",
182660
+ "type": "string"
182661
+ },
182662
+ "topic": {
182663
+ "description": "Argomento scelto nel modulo contatti. Obbligatorio per `contact`, vietato per `get_started`.",
182664
+ "anyOf": [
182665
+ {
182666
+ "type": "string",
182667
+ "enum": [
182668
+ "general_inquiry"
182669
+ ]
182670
+ },
182671
+ {
182672
+ "type": "string",
182673
+ "enum": [
182674
+ "custom_plan"
182675
+ ]
182676
+ },
182677
+ {
182678
+ "type": "string",
182679
+ "enum": [
182680
+ "product_walkthrough"
182681
+ ]
182682
+ },
182683
+ {
182684
+ "type": "string",
182685
+ "enum": [
182686
+ "founding_partner_request"
182687
+ ]
182688
+ },
182689
+ {
182690
+ "type": "string",
182691
+ "enum": [
182692
+ "partner_program"
182693
+ ]
182694
+ }
182695
+ ]
182696
+ },
182697
+ "website": {
182698
+ "description": "Campo trappola: il modulo lo nasconde agli umani. Deve arrivare vuoto o non arrivare.",
182699
+ "maxLength": 200,
182700
+ "type": "string"
182701
+ }
182702
+ }
182703
+ }
182704
+ }
182705
+ }
182706
+ },
182707
+ "responses": {
182708
+ "202": {
182709
+ "description": "Accepted - processing asynchronously",
182710
+ "content": {
182711
+ "application/json": {
182712
+ "schema": {
182713
+ "additionalProperties": false,
182714
+ "type": "object",
182715
+ "required": [
182716
+ "status"
182717
+ ],
182718
+ "properties": {
182719
+ "status": {
182720
+ "description": "Sempre `received`: la risposta non dice se l’invio era doppio, se l’email era nota o se era un bot.",
182721
+ "type": "string",
182722
+ "enum": [
182723
+ "received"
182724
+ ]
182725
+ }
182726
+ }
182727
+ }
182728
+ }
182729
+ }
182730
+ },
182731
+ "400": {
182732
+ "description": "Invalid request - schema validation failed",
182733
+ "content": {
182734
+ "application/json": {
182735
+ "schema": {
182736
+ "type": "object",
182737
+ "required": [
182738
+ "statusCode",
182739
+ "error",
182740
+ "message"
182741
+ ],
182742
+ "properties": {
182743
+ "statusCode": {
182744
+ "type": "integer"
182745
+ },
182746
+ "error": {
182747
+ "type": "string"
182748
+ },
182749
+ "message": {
182750
+ "type": "string"
182751
+ },
182752
+ "code": {
182753
+ "type": "string"
182754
+ },
182755
+ "request_id": {
182756
+ "type": "string"
182757
+ },
182758
+ "details": {
182759
+ "type": "object",
182760
+ "additionalProperties": {}
182761
+ }
182762
+ }
182763
+ }
182764
+ }
182765
+ }
182766
+ },
182767
+ "429": {
182768
+ "description": "Too many requests - rate limit exceeded",
182769
+ "content": {
182770
+ "application/json": {
182771
+ "schema": {
182772
+ "type": "object",
182773
+ "required": [
182774
+ "statusCode",
182775
+ "error",
182776
+ "message"
182777
+ ],
182778
+ "properties": {
182779
+ "statusCode": {
182780
+ "type": "integer"
182781
+ },
182782
+ "error": {
182783
+ "type": "string"
182784
+ },
182785
+ "message": {
182786
+ "type": "string"
182787
+ },
182788
+ "code": {
182789
+ "type": "string"
182790
+ },
182791
+ "request_id": {
182792
+ "type": "string"
182793
+ },
182794
+ "details": {
182795
+ "type": "object",
182796
+ "additionalProperties": {}
182797
+ }
182798
+ }
182799
+ }
182800
+ }
182801
+ }
182802
+ },
182803
+ "500": {
182804
+ "description": "Internal server error",
182805
+ "content": {
182806
+ "application/json": {
182807
+ "schema": {
182808
+ "type": "object",
182809
+ "required": [
182810
+ "statusCode",
182811
+ "error",
182812
+ "message"
182813
+ ],
182814
+ "properties": {
182815
+ "statusCode": {
182816
+ "type": "integer"
182817
+ },
182818
+ "error": {
182819
+ "type": "string"
182820
+ },
182821
+ "message": {
182822
+ "type": "string"
182823
+ },
182824
+ "code": {
182825
+ "type": "string"
182826
+ },
182827
+ "request_id": {
182828
+ "type": "string"
182829
+ },
182830
+ "details": {
182831
+ "type": "object",
182832
+ "additionalProperties": {}
182833
+ }
182834
+ }
182835
+ }
182836
+ }
182837
+ }
182838
+ }
182839
+ }
182840
+ }
182841
+ },
182422
182842
  "/api/v1/public/site-config": {
182423
182843
  "get": {
182424
182844
  "operationId": "getPublicSiteConfig",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wevion/cli",
3
- "version": "1.0.3772",
3
+ "version": "1.0.3774",
4
4
  "description": "Wevion API command-line interface — generated from the public OpenAPI spec",
5
5
  "type": "module",
6
6
  "bin": {