dub 0.31.0__py3-none-any.whl → 0.33.0__py3-none-any.whl

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 (68) hide show
  1. dub/_version.py +3 -3
  2. dub/analytics.py +6 -6
  3. dub/commissions.py +12 -12
  4. dub/customers.py +24 -321
  5. dub/domains.py +34 -38
  6. dub/embed_tokens.py +6 -6
  7. dub/events.py +6 -6
  8. dub/folders.py +24 -28
  9. dub/links.py +58 -74
  10. dub/models/components/__init__.py +38 -6
  11. dub/models/components/analyticstopurls.py +2 -2
  12. dub/models/components/clickevent.py +10 -9
  13. dub/models/components/commissioncreatedevent.py +5 -2
  14. dub/models/components/folderschema.py +6 -1
  15. dub/models/components/leadcreatedevent.py +15 -11
  16. dub/models/components/leadevent.py +10 -9
  17. dub/models/components/linkclickedevent.py +10 -9
  18. dub/models/components/linkschema.py +9 -3
  19. dub/models/components/{tagschema.py → linktagschema.py} +2 -2
  20. dub/models/components/linkwebhookevent.py +10 -9
  21. dub/models/components/partnerapplicationsubmittedevent.py +269 -0
  22. dub/models/components/partnerenrolledevent.py +93 -29
  23. dub/models/components/salecreatedevent.py +15 -11
  24. dub/models/components/saleevent.py +10 -9
  25. dub/models/components/webhookevent.py +6 -0
  26. dub/models/components/workspaceschema.py +11 -0
  27. dub/models/errors/badrequest.py +1 -1
  28. dub/models/errors/conflict.py +1 -1
  29. dub/models/errors/duberror.py +1 -1
  30. dub/models/errors/forbidden.py +1 -1
  31. dub/models/errors/internalservererror.py +1 -1
  32. dub/models/errors/inviteexpired.py +1 -1
  33. dub/models/errors/no_response_error.py +1 -1
  34. dub/models/errors/notfound.py +1 -1
  35. dub/models/errors/ratelimitexceeded.py +1 -1
  36. dub/models/errors/responsevalidationerror.py +1 -1
  37. dub/models/errors/sdkerror.py +1 -1
  38. dub/models/errors/unauthorized.py +1 -1
  39. dub/models/errors/unprocessableentity.py +1 -1
  40. dub/models/operations/__init__.py +17 -35
  41. dub/models/operations/banpartner.py +83 -0
  42. dub/models/operations/bulkcreatelinks.py +2 -2
  43. dub/models/operations/createfolder.py +8 -3
  44. dub/models/operations/createlink.py +2 -2
  45. dub/models/operations/createpartner.py +93 -29
  46. dub/models/operations/listcommissions.py +13 -2
  47. dub/models/operations/listevents.py +10 -0
  48. dub/models/operations/listpartners.py +107 -47
  49. dub/models/operations/retrieveanalytics.py +16 -1
  50. dub/models/operations/retrievelinks.py +42 -7
  51. dub/models/operations/retrievepartneranalytics.py +51 -11
  52. dub/models/operations/tracklead.py +2 -2
  53. dub/models/operations/updatecommission.py +7 -2
  54. dub/models/operations/updatefolder.py +8 -3
  55. dub/models/operations/updatelink.py +2 -2
  56. dub/models/operations/upsertlink.py +2 -2
  57. dub/partners.py +310 -36
  58. dub/qr_codes.py +4 -4
  59. dub/tags.py +24 -32
  60. dub/track.py +12 -20
  61. dub/utils/retries.py +69 -5
  62. dub/utils/unmarshal_json_response.py +15 -1
  63. dub/workspaces.py +12 -20
  64. {dub-0.31.0.dist-info → dub-0.33.0.dist-info}/METADATA +2 -21
  65. {dub-0.31.0.dist-info → dub-0.33.0.dist-info}/RECORD +67 -66
  66. dub/models/operations/createcustomer.py +0 -382
  67. {dub-0.31.0.dist-info → dub-0.33.0.dist-info}/WHEEL +0 -0
  68. {dub-0.31.0.dist-info → dub-0.33.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .tagschema import TagSchema, TagSchemaTypedDict
4
+ from .linktagschema import LinkTagSchema, LinkTagSchemaTypedDict
5
5
  from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
6
  from enum import Enum
7
7
  import pydantic
@@ -125,6 +125,7 @@ class LinkTypedDict(TypedDict):
125
125
  archived: bool
126
126
  expires_at: str
127
127
  expired_url: Nullable[str]
128
+ disabled_at: str
128
129
  password: Nullable[str]
129
130
  r"""The password required to access the destination URL of the short link."""
130
131
  proxy: bool
@@ -145,7 +146,7 @@ class LinkTypedDict(TypedDict):
145
146
  geo: Nullable[Dict[str, str]]
146
147
  r"""Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information."""
147
148
  public_stats: bool
148
- tags: Nullable[List[TagSchemaTypedDict]]
149
+ tags: Nullable[List[LinkTagSchemaTypedDict]]
149
150
  r"""The tags assigned to the short link."""
150
151
  folder_id: Nullable[str]
151
152
  r"""The unique ID of the folder assigned to the short link."""
@@ -167,8 +168,8 @@ class LinkTypedDict(TypedDict):
167
168
  r"""The UTM term of the short link."""
168
169
  utm_content: Nullable[str]
169
170
  r"""The UTM content of the short link."""
170
- test_started_at: Nullable[str]
171
- test_completed_at: Nullable[str]
171
+ test_started_at: str
172
+ test_completed_at: str
172
173
  user_id: Nullable[str]
173
174
  workspace_id: str
174
175
  r"""The workspace ID of the short link."""
@@ -225,6 +226,8 @@ class Link(BaseModel):
225
226
 
226
227
  expired_url: Annotated[Nullable[str], pydantic.Field(alias="expiredUrl")]
227
228
 
229
+ disabled_at: Annotated[str, pydantic.Field(alias="disabledAt")]
230
+
228
231
  password: Nullable[str]
229
232
  r"""The password required to access the destination URL of the short link."""
230
233
 
@@ -257,7 +260,7 @@ class Link(BaseModel):
257
260
 
258
261
  public_stats: Annotated[bool, pydantic.Field(alias="publicStats")]
259
262
 
260
- tags: Nullable[List[TagSchema]]
263
+ tags: Nullable[List[LinkTagSchema]]
261
264
  r"""The tags assigned to the short link."""
262
265
 
263
266
  folder_id: Annotated[Nullable[str], pydantic.Field(alias="folderId")]
@@ -290,9 +293,9 @@ class Link(BaseModel):
290
293
  utm_content: Nullable[str]
291
294
  r"""The UTM content of the short link."""
292
295
 
293
- test_started_at: Annotated[Nullable[str], pydantic.Field(alias="testStartedAt")]
296
+ test_started_at: Annotated[str, pydantic.Field(alias="testStartedAt")]
294
297
 
295
- test_completed_at: Annotated[Nullable[str], pydantic.Field(alias="testCompletedAt")]
298
+ test_completed_at: Annotated[str, pydantic.Field(alias="testCompletedAt")]
296
299
 
297
300
  user_id: Annotated[Nullable[str], pydantic.Field(alias="userId")]
298
301
 
@@ -377,8 +380,6 @@ class Link(BaseModel):
377
380
  "utm_term",
378
381
  "utm_content",
379
382
  "testVariants",
380
- "testStartedAt",
381
- "testCompletedAt",
382
383
  "userId",
383
384
  "tagId",
384
385
  ]
@@ -49,6 +49,7 @@ class CommissionCreatedEventPartnerTypedDict(TypedDict):
49
49
  total_sales: float
50
50
  total_sale_amount: float
51
51
  total_commissions: float
52
+ group_id: NotRequired[Nullable[str]]
52
53
 
53
54
 
54
55
  class CommissionCreatedEventPartner(BaseModel):
@@ -84,10 +85,12 @@ class CommissionCreatedEventPartner(BaseModel):
84
85
 
85
86
  total_commissions: Annotated[float, pydantic.Field(alias="totalCommissions")]
86
87
 
88
+ group_id: Annotated[OptionalNullable[str], pydantic.Field(alias="groupId")] = UNSET
89
+
87
90
  @model_serializer(mode="wrap")
88
91
  def serialize_model(self, handler):
89
- optional_fields = []
90
- nullable_fields = ["email", "image", "payoutsEnabledAt", "country"]
92
+ optional_fields = ["groupId"]
93
+ nullable_fields = ["email", "image", "payoutsEnabledAt", "country", "groupId"]
91
94
  null_default_fields = []
92
95
 
93
96
  serialized = handler(self)
@@ -25,6 +25,8 @@ class FolderSchemaTypedDict(TypedDict):
25
25
  r"""The unique ID of the folder."""
26
26
  name: str
27
27
  r"""The name of the folder."""
28
+ description: Nullable[str]
29
+ r"""The description of the folder."""
28
30
  type: Type
29
31
  created_at: str
30
32
  r"""The date the folder was created."""
@@ -41,6 +43,9 @@ class FolderSchema(BaseModel):
41
43
  name: str
42
44
  r"""The name of the folder."""
43
45
 
46
+ description: Nullable[str]
47
+ r"""The description of the folder."""
48
+
44
49
  type: Type
45
50
 
46
51
  created_at: Annotated[str, pydantic.Field(alias="createdAt")]
@@ -57,7 +62,7 @@ class FolderSchema(BaseModel):
57
62
  @model_serializer(mode="wrap")
58
63
  def serialize_model(self, handler):
59
64
  optional_fields = ["accessLevel"]
60
- nullable_fields = ["accessLevel"]
65
+ nullable_fields = ["description", "accessLevel"]
61
66
  null_default_fields = ["accessLevel"]
62
67
 
63
68
  serialized = handler(self)
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .tagschema import TagSchema, TagSchemaTypedDict
4
+ from .linktagschema import LinkTagSchema, LinkTagSchemaTypedDict
5
5
  from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
6
  from enum import Enum
7
7
  import pydantic
@@ -207,6 +207,7 @@ class LeadCreatedEventLinkTypedDict(TypedDict):
207
207
  archived: bool
208
208
  expires_at: str
209
209
  expired_url: Nullable[str]
210
+ disabled_at: str
210
211
  password: Nullable[str]
211
212
  r"""The password required to access the destination URL of the short link."""
212
213
  proxy: bool
@@ -227,7 +228,7 @@ class LeadCreatedEventLinkTypedDict(TypedDict):
227
228
  geo: Nullable[Dict[str, str]]
228
229
  r"""Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information."""
229
230
  public_stats: bool
230
- tags: Nullable[List[TagSchemaTypedDict]]
231
+ tags: Nullable[List[LinkTagSchemaTypedDict]]
231
232
  r"""The tags assigned to the short link."""
232
233
  folder_id: Nullable[str]
233
234
  r"""The unique ID of the folder assigned to the short link."""
@@ -249,8 +250,8 @@ class LeadCreatedEventLinkTypedDict(TypedDict):
249
250
  r"""The UTM term of the short link."""
250
251
  utm_content: Nullable[str]
251
252
  r"""The UTM content of the short link."""
252
- test_started_at: Nullable[str]
253
- test_completed_at: Nullable[str]
253
+ test_started_at: str
254
+ test_completed_at: str
254
255
  user_id: Nullable[str]
255
256
  workspace_id: str
256
257
  r"""The workspace ID of the short link."""
@@ -307,6 +308,8 @@ class LeadCreatedEventLink(BaseModel):
307
308
 
308
309
  expired_url: Annotated[Nullable[str], pydantic.Field(alias="expiredUrl")]
309
310
 
311
+ disabled_at: Annotated[str, pydantic.Field(alias="disabledAt")]
312
+
310
313
  password: Nullable[str]
311
314
  r"""The password required to access the destination URL of the short link."""
312
315
 
@@ -339,7 +342,7 @@ class LeadCreatedEventLink(BaseModel):
339
342
 
340
343
  public_stats: Annotated[bool, pydantic.Field(alias="publicStats")]
341
344
 
342
- tags: Nullable[List[TagSchema]]
345
+ tags: Nullable[List[LinkTagSchema]]
343
346
  r"""The tags assigned to the short link."""
344
347
 
345
348
  folder_id: Annotated[Nullable[str], pydantic.Field(alias="folderId")]
@@ -372,9 +375,9 @@ class LeadCreatedEventLink(BaseModel):
372
375
  utm_content: Nullable[str]
373
376
  r"""The UTM content of the short link."""
374
377
 
375
- test_started_at: Annotated[Nullable[str], pydantic.Field(alias="testStartedAt")]
378
+ test_started_at: Annotated[str, pydantic.Field(alias="testStartedAt")]
376
379
 
377
- test_completed_at: Annotated[Nullable[str], pydantic.Field(alias="testCompletedAt")]
380
+ test_completed_at: Annotated[str, pydantic.Field(alias="testCompletedAt")]
378
381
 
379
382
  user_id: Annotated[Nullable[str], pydantic.Field(alias="userId")]
380
383
 
@@ -459,8 +462,6 @@ class LeadCreatedEventLink(BaseModel):
459
462
  "utm_term",
460
463
  "utm_content",
461
464
  "testVariants",
462
- "testStartedAt",
463
- "testCompletedAt",
464
465
  "userId",
465
466
  "tagId",
466
467
  ]
@@ -510,6 +511,7 @@ class PartnerTypedDict(TypedDict):
510
511
  total_sales: float
511
512
  total_sale_amount: float
512
513
  total_commissions: float
514
+ group_id: NotRequired[Nullable[str]]
513
515
 
514
516
 
515
517
  class Partner(BaseModel):
@@ -545,10 +547,12 @@ class Partner(BaseModel):
545
547
 
546
548
  total_commissions: Annotated[float, pydantic.Field(alias="totalCommissions")]
547
549
 
550
+ group_id: Annotated[OptionalNullable[str], pydantic.Field(alias="groupId")] = UNSET
551
+
548
552
  @model_serializer(mode="wrap")
549
553
  def serialize_model(self, handler):
550
- optional_fields = []
551
- nullable_fields = ["email", "image", "payoutsEnabledAt", "country"]
554
+ optional_fields = ["groupId"]
555
+ nullable_fields = ["email", "image", "payoutsEnabledAt", "country", "groupId"]
552
556
  null_default_fields = []
553
557
 
554
558
  serialized = handler(self)
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .tagschema import TagSchema, TagSchemaTypedDict
4
+ from .linktagschema import LinkTagSchema, LinkTagSchemaTypedDict
5
5
  from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
6
  from enum import Enum
7
7
  import pydantic
@@ -125,6 +125,7 @@ class LeadEventLinkTypedDict(TypedDict):
125
125
  archived: bool
126
126
  expires_at: str
127
127
  expired_url: Nullable[str]
128
+ disabled_at: str
128
129
  password: Nullable[str]
129
130
  r"""The password required to access the destination URL of the short link."""
130
131
  proxy: bool
@@ -145,7 +146,7 @@ class LeadEventLinkTypedDict(TypedDict):
145
146
  geo: Nullable[Dict[str, str]]
146
147
  r"""Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information."""
147
148
  public_stats: bool
148
- tags: Nullable[List[TagSchemaTypedDict]]
149
+ tags: Nullable[List[LinkTagSchemaTypedDict]]
149
150
  r"""The tags assigned to the short link."""
150
151
  folder_id: Nullable[str]
151
152
  r"""The unique ID of the folder assigned to the short link."""
@@ -167,8 +168,8 @@ class LeadEventLinkTypedDict(TypedDict):
167
168
  r"""The UTM term of the short link."""
168
169
  utm_content: Nullable[str]
169
170
  r"""The UTM content of the short link."""
170
- test_started_at: Nullable[str]
171
- test_completed_at: Nullable[str]
171
+ test_started_at: str
172
+ test_completed_at: str
172
173
  user_id: Nullable[str]
173
174
  workspace_id: str
174
175
  r"""The workspace ID of the short link."""
@@ -225,6 +226,8 @@ class LeadEventLink(BaseModel):
225
226
 
226
227
  expired_url: Annotated[Nullable[str], pydantic.Field(alias="expiredUrl")]
227
228
 
229
+ disabled_at: Annotated[str, pydantic.Field(alias="disabledAt")]
230
+
228
231
  password: Nullable[str]
229
232
  r"""The password required to access the destination URL of the short link."""
230
233
 
@@ -257,7 +260,7 @@ class LeadEventLink(BaseModel):
257
260
 
258
261
  public_stats: Annotated[bool, pydantic.Field(alias="publicStats")]
259
262
 
260
- tags: Nullable[List[TagSchema]]
263
+ tags: Nullable[List[LinkTagSchema]]
261
264
  r"""The tags assigned to the short link."""
262
265
 
263
266
  folder_id: Annotated[Nullable[str], pydantic.Field(alias="folderId")]
@@ -290,9 +293,9 @@ class LeadEventLink(BaseModel):
290
293
  utm_content: Nullable[str]
291
294
  r"""The UTM content of the short link."""
292
295
 
293
- test_started_at: Annotated[Nullable[str], pydantic.Field(alias="testStartedAt")]
296
+ test_started_at: Annotated[str, pydantic.Field(alias="testStartedAt")]
294
297
 
295
- test_completed_at: Annotated[Nullable[str], pydantic.Field(alias="testCompletedAt")]
298
+ test_completed_at: Annotated[str, pydantic.Field(alias="testCompletedAt")]
296
299
 
297
300
  user_id: Annotated[Nullable[str], pydantic.Field(alias="userId")]
298
301
 
@@ -377,8 +380,6 @@ class LeadEventLink(BaseModel):
377
380
  "utm_term",
378
381
  "utm_content",
379
382
  "testVariants",
380
- "testStartedAt",
381
- "testCompletedAt",
382
383
  "userId",
383
384
  "tagId",
384
385
  ]
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .tagschema import TagSchema, TagSchemaTypedDict
4
+ from .linktagschema import LinkTagSchema, LinkTagSchemaTypedDict
5
5
  from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
6
  from enum import Enum
7
7
  import pydantic
@@ -125,6 +125,7 @@ class LinkClickedEventLinkTypedDict(TypedDict):
125
125
  archived: bool
126
126
  expires_at: str
127
127
  expired_url: Nullable[str]
128
+ disabled_at: str
128
129
  password: Nullable[str]
129
130
  r"""The password required to access the destination URL of the short link."""
130
131
  proxy: bool
@@ -145,7 +146,7 @@ class LinkClickedEventLinkTypedDict(TypedDict):
145
146
  geo: Nullable[Dict[str, str]]
146
147
  r"""Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information."""
147
148
  public_stats: bool
148
- tags: Nullable[List[TagSchemaTypedDict]]
149
+ tags: Nullable[List[LinkTagSchemaTypedDict]]
149
150
  r"""The tags assigned to the short link."""
150
151
  folder_id: Nullable[str]
151
152
  r"""The unique ID of the folder assigned to the short link."""
@@ -167,8 +168,8 @@ class LinkClickedEventLinkTypedDict(TypedDict):
167
168
  r"""The UTM term of the short link."""
168
169
  utm_content: Nullable[str]
169
170
  r"""The UTM content of the short link."""
170
- test_started_at: Nullable[str]
171
- test_completed_at: Nullable[str]
171
+ test_started_at: str
172
+ test_completed_at: str
172
173
  user_id: Nullable[str]
173
174
  workspace_id: str
174
175
  r"""The workspace ID of the short link."""
@@ -225,6 +226,8 @@ class LinkClickedEventLink(BaseModel):
225
226
 
226
227
  expired_url: Annotated[Nullable[str], pydantic.Field(alias="expiredUrl")]
227
228
 
229
+ disabled_at: Annotated[str, pydantic.Field(alias="disabledAt")]
230
+
228
231
  password: Nullable[str]
229
232
  r"""The password required to access the destination URL of the short link."""
230
233
 
@@ -257,7 +260,7 @@ class LinkClickedEventLink(BaseModel):
257
260
 
258
261
  public_stats: Annotated[bool, pydantic.Field(alias="publicStats")]
259
262
 
260
- tags: Nullable[List[TagSchema]]
263
+ tags: Nullable[List[LinkTagSchema]]
261
264
  r"""The tags assigned to the short link."""
262
265
 
263
266
  folder_id: Annotated[Nullable[str], pydantic.Field(alias="folderId")]
@@ -290,9 +293,9 @@ class LinkClickedEventLink(BaseModel):
290
293
  utm_content: Nullable[str]
291
294
  r"""The UTM content of the short link."""
292
295
 
293
- test_started_at: Annotated[Nullable[str], pydantic.Field(alias="testStartedAt")]
296
+ test_started_at: Annotated[str, pydantic.Field(alias="testStartedAt")]
294
297
 
295
- test_completed_at: Annotated[Nullable[str], pydantic.Field(alias="testCompletedAt")]
298
+ test_completed_at: Annotated[str, pydantic.Field(alias="testCompletedAt")]
296
299
 
297
300
  user_id: Annotated[Nullable[str], pydantic.Field(alias="userId")]
298
301
 
@@ -377,8 +380,6 @@ class LinkClickedEventLink(BaseModel):
377
380
  "utm_term",
378
381
  "utm_content",
379
382
  "testVariants",
380
- "testStartedAt",
381
- "testCompletedAt",
382
383
  "userId",
383
384
  "tagId",
384
385
  ]
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .tagschema import TagSchema, TagSchemaTypedDict
4
+ from .linktagschema import LinkTagSchema, LinkTagSchemaTypedDict
5
5
  from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
6
  import pydantic
7
7
  from pydantic import model_serializer
@@ -45,6 +45,8 @@ class LinkSchemaTypedDict(TypedDict):
45
45
  r"""The date and time when the short link will expire in ISO-8601 format."""
46
46
  expired_url: Nullable[str]
47
47
  r"""The URL to redirect to when the short link has expired."""
48
+ disabled_at: Nullable[str]
49
+ r"""The date and time when the short link was disabled. When a short link is disabled, it will redirect to its domain's not found URL, and its stats will be excluded from your overall stats."""
48
50
  password: Nullable[str]
49
51
  r"""The password required to access the destination URL of the short link."""
50
52
  title: Nullable[str]
@@ -61,7 +63,7 @@ class LinkSchemaTypedDict(TypedDict):
61
63
  r"""The Android destination URL for the short link for Android device targeting."""
62
64
  geo: Nullable[Dict[str, str]]
63
65
  r"""Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information."""
64
- tags: Nullable[List[TagSchemaTypedDict]]
66
+ tags: Nullable[List[LinkTagSchemaTypedDict]]
65
67
  r"""The tags assigned to the short link."""
66
68
  folder_id: Nullable[str]
67
69
  r"""The unique ID of the folder assigned to the short link."""
@@ -158,6 +160,9 @@ class LinkSchema(BaseModel):
158
160
  expired_url: Annotated[Nullable[str], pydantic.Field(alias="expiredUrl")]
159
161
  r"""The URL to redirect to when the short link has expired."""
160
162
 
163
+ disabled_at: Annotated[Nullable[str], pydantic.Field(alias="disabledAt")]
164
+ r"""The date and time when the short link was disabled. When a short link is disabled, it will redirect to its domain's not found URL, and its stats will be excluded from your overall stats."""
165
+
161
166
  password: Nullable[str]
162
167
  r"""The password required to access the destination URL of the short link."""
163
168
 
@@ -182,7 +187,7 @@ class LinkSchema(BaseModel):
182
187
  geo: Nullable[Dict[str, str]]
183
188
  r"""Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information."""
184
189
 
185
- tags: Nullable[List[TagSchema]]
190
+ tags: Nullable[List[LinkTagSchema]]
186
191
  r"""The tags assigned to the short link."""
187
192
 
188
193
  folder_id: Annotated[Nullable[str], pydantic.Field(alias="folderId")]
@@ -323,6 +328,7 @@ class LinkSchema(BaseModel):
323
328
  "partnerId",
324
329
  "expiresAt",
325
330
  "expiredUrl",
331
+ "disabledAt",
326
332
  "password",
327
333
  "title",
328
334
  "description",
@@ -18,7 +18,7 @@ class Color(str, Enum):
18
18
  PINK = "pink"
19
19
 
20
20
 
21
- class TagSchemaTypedDict(TypedDict):
21
+ class LinkTagSchemaTypedDict(TypedDict):
22
22
  id: str
23
23
  r"""The unique ID of the tag."""
24
24
  name: str
@@ -27,7 +27,7 @@ class TagSchemaTypedDict(TypedDict):
27
27
  r"""The color of the tag."""
28
28
 
29
29
 
30
- class TagSchema(BaseModel):
30
+ class LinkTagSchema(BaseModel):
31
31
  id: str
32
32
  r"""The unique ID of the tag."""
33
33
 
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .tagschema import TagSchema, TagSchemaTypedDict
4
+ from .linktagschema import LinkTagSchema, LinkTagSchemaTypedDict
5
5
  from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
6
  from enum import Enum
7
7
  import pydantic
@@ -61,6 +61,7 @@ class LinkWebhookEventLinkTypedDict(TypedDict):
61
61
  archived: bool
62
62
  expires_at: str
63
63
  expired_url: Nullable[str]
64
+ disabled_at: str
64
65
  password: Nullable[str]
65
66
  r"""The password required to access the destination URL of the short link."""
66
67
  proxy: bool
@@ -81,7 +82,7 @@ class LinkWebhookEventLinkTypedDict(TypedDict):
81
82
  geo: Nullable[Dict[str, str]]
82
83
  r"""Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information."""
83
84
  public_stats: bool
84
- tags: Nullable[List[TagSchemaTypedDict]]
85
+ tags: Nullable[List[LinkTagSchemaTypedDict]]
85
86
  r"""The tags assigned to the short link."""
86
87
  folder_id: Nullable[str]
87
88
  r"""The unique ID of the folder assigned to the short link."""
@@ -103,8 +104,8 @@ class LinkWebhookEventLinkTypedDict(TypedDict):
103
104
  r"""The UTM term of the short link."""
104
105
  utm_content: Nullable[str]
105
106
  r"""The UTM content of the short link."""
106
- test_started_at: Nullable[str]
107
- test_completed_at: Nullable[str]
107
+ test_started_at: str
108
+ test_completed_at: str
108
109
  user_id: Nullable[str]
109
110
  workspace_id: str
110
111
  r"""The workspace ID of the short link."""
@@ -161,6 +162,8 @@ class LinkWebhookEventLink(BaseModel):
161
162
 
162
163
  expired_url: Annotated[Nullable[str], pydantic.Field(alias="expiredUrl")]
163
164
 
165
+ disabled_at: Annotated[str, pydantic.Field(alias="disabledAt")]
166
+
164
167
  password: Nullable[str]
165
168
  r"""The password required to access the destination URL of the short link."""
166
169
 
@@ -193,7 +196,7 @@ class LinkWebhookEventLink(BaseModel):
193
196
 
194
197
  public_stats: Annotated[bool, pydantic.Field(alias="publicStats")]
195
198
 
196
- tags: Nullable[List[TagSchema]]
199
+ tags: Nullable[List[LinkTagSchema]]
197
200
  r"""The tags assigned to the short link."""
198
201
 
199
202
  folder_id: Annotated[Nullable[str], pydantic.Field(alias="folderId")]
@@ -226,9 +229,9 @@ class LinkWebhookEventLink(BaseModel):
226
229
  utm_content: Nullable[str]
227
230
  r"""The UTM content of the short link."""
228
231
 
229
- test_started_at: Annotated[Nullable[str], pydantic.Field(alias="testStartedAt")]
232
+ test_started_at: Annotated[str, pydantic.Field(alias="testStartedAt")]
230
233
 
231
- test_completed_at: Annotated[Nullable[str], pydantic.Field(alias="testCompletedAt")]
234
+ test_completed_at: Annotated[str, pydantic.Field(alias="testCompletedAt")]
232
235
 
233
236
  user_id: Annotated[Nullable[str], pydantic.Field(alias="userId")]
234
237
 
@@ -313,8 +316,6 @@ class LinkWebhookEventLink(BaseModel):
313
316
  "utm_term",
314
317
  "utm_content",
315
318
  "testVariants",
316
- "testStartedAt",
317
- "testCompletedAt",
318
319
  "userId",
319
320
  "tagId",
320
321
  ]