@middlewr/contracts 0.0.13 → 0.0.15

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/dist/cjs/index.js CHANGED
@@ -20,10 +20,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ AnalyticsIntervalSchema: () => AnalyticsIntervalSchema,
24
+ AnalyticsOutputSchema: () => AnalyticsOutputSchema,
25
+ AnalyticsQuerySchema: () => AnalyticsQuerySchema,
23
26
  ApiKeyIdParamSchema: () => ApiKeyIdParamSchema,
24
27
  ApiKeySchema: () => ApiKeySchema,
25
28
  BillingStatusSchema: () => BillingStatusSchema,
26
29
  CheckoutSessionSchema: () => CheckoutSessionSchema,
30
+ CountByFieldSchema: () => CountByFieldSchema,
27
31
  CreateApiKeyInputSchema: () => CreateApiKeyInputSchema,
28
32
  CreateApiKeyResponseSchema: () => CreateApiKeyResponseSchema,
29
33
  CreateCheckoutInputSchema: () => CreateCheckoutInputSchema,
@@ -45,6 +49,7 @@ __export(index_exports, {
45
49
  SignInInputSchema: () => SignInInputSchema,
46
50
  TagIdParamSchema: () => TagIdParamSchema,
47
51
  TagSchema: () => TagSchema,
52
+ TimeSeriesPointSchema: () => TimeSeriesPointSchema,
48
53
  TokenParamSchema: () => TokenParamSchema,
49
54
  TransferOwnershipInputSchema: () => TransferOwnershipInputSchema,
50
55
  UpdateDomainInputSchema: () => UpdateDomainInputSchema,
@@ -62,6 +67,7 @@ __export(index_exports, {
62
67
  WorkspaceRoleSchema: () => WorkspaceRoleSchema,
63
68
  WorkspaceSchema: () => WorkspaceSchema,
64
69
  WorkspaceWithCountSchema: () => WorkspaceWithCountSchema,
70
+ analyticsContract: () => analyticsContract,
65
71
  apiKeysContract: () => apiKeysContract,
66
72
  billingContract: () => billingContract,
67
73
  contract: () => contract,
@@ -76,313 +82,343 @@ module.exports = __toCommonJS(index_exports);
76
82
  var import_contract = require("@orpc/contract");
77
83
  var import_zod10 = require("zod");
78
84
 
79
- // src/api-keys.schema.ts
85
+ // src/analytics.schema.ts
80
86
  var import_zod = require("zod");
81
- var ApiKeySchema = import_zod.z.object({
82
- id: import_zod.z.string().uuid(),
83
- user_id: import_zod.z.string().uuid(),
87
+ var AnalyticsIntervalSchema = import_zod.z.enum(["hour", "day", "week", "month"]);
88
+ var AnalyticsQuerySchema = import_zod.z.object({
89
+ start_at: import_zod.z.coerce.date(),
90
+ end_at: import_zod.z.coerce.date(),
91
+ interval: AnalyticsIntervalSchema
92
+ });
93
+ var TimeSeriesPointSchema = import_zod.z.object({
94
+ date: import_zod.z.string(),
95
+ clicks: import_zod.z.number().int(),
96
+ unique_visitors: import_zod.z.number().int()
97
+ });
98
+ var CountByFieldSchema = import_zod.z.object({
84
99
  name: import_zod.z.string(),
85
- key_prefix: import_zod.z.string(),
86
- last_used_at: import_zod.z.coerce.date().nullable(),
87
- created_at: import_zod.z.coerce.date(),
88
- updated_at: import_zod.z.coerce.date().nullable()
100
+ count: import_zod.z.number().int()
101
+ });
102
+ var AnalyticsOutputSchema = import_zod.z.object({
103
+ total_clicks: import_zod.z.number().int(),
104
+ total_unique_visitors: import_zod.z.number().int(),
105
+ timeseries: import_zod.z.array(TimeSeriesPointSchema),
106
+ referrers: import_zod.z.array(CountByFieldSchema),
107
+ devices: import_zod.z.array(CountByFieldSchema),
108
+ countries: import_zod.z.array(CountByFieldSchema),
109
+ browsers: import_zod.z.array(CountByFieldSchema),
110
+ os: import_zod.z.array(CountByFieldSchema)
111
+ });
112
+ var LinkAnalyticsQuerySchema = import_zod.z.object({
113
+ link_id: import_zod.z.string().uuid(),
114
+ from: import_zod.z.coerce.date(),
115
+ to: import_zod.z.coerce.date()
89
116
  });
90
- var CreateApiKeyInputSchema = import_zod.z.object({
91
- name: import_zod.z.string().min(1).max(255)
117
+
118
+ // src/api-keys.schema.ts
119
+ var import_zod2 = require("zod");
120
+ var ApiKeySchema = import_zod2.z.object({
121
+ id: import_zod2.z.string().uuid(),
122
+ user_id: import_zod2.z.string().uuid(),
123
+ name: import_zod2.z.string(),
124
+ key_prefix: import_zod2.z.string(),
125
+ last_used_at: import_zod2.z.coerce.date().nullable(),
126
+ created_at: import_zod2.z.coerce.date(),
127
+ updated_at: import_zod2.z.coerce.date().nullable()
128
+ });
129
+ var CreateApiKeyInputSchema = import_zod2.z.object({
130
+ name: import_zod2.z.string().min(1).max(255)
92
131
  });
93
132
  var CreateApiKeyResponseSchema = ApiKeySchema.extend({
94
- key: import_zod.z.string()
133
+ key: import_zod2.z.string()
95
134
  });
96
135
 
97
136
  // src/billing.schema.ts
98
- var import_zod2 = require("zod");
99
- var BillingStatusSchema = import_zod2.z.object({
100
- billing_plan: import_zod2.z.string(),
101
- billing_status: import_zod2.z.string(),
102
- billing_email: import_zod2.z.string().nullable(),
103
- billing_current_period_end: import_zod2.z.coerce.date().nullable(),
104
- billing_cancel_at_period_end: import_zod2.z.boolean(),
105
- billing_customer_id: import_zod2.z.string().nullable(),
106
- billing_subscription_id: import_zod2.z.string().nullable()
107
- });
108
- var CreateCheckoutInputSchema = import_zod2.z.object({
109
- plan: import_zod2.z.enum(["pro", "business"]),
110
- success_url: import_zod2.z.string().url().optional(),
111
- billing_email: import_zod2.z.string().email().optional()
112
- });
113
- var CheckoutSessionSchema = import_zod2.z.object({
114
- url: import_zod2.z.string().url()
115
- });
116
- var CustomerPortalSchema = import_zod2.z.object({
117
- url: import_zod2.z.string().url()
137
+ var import_zod3 = require("zod");
138
+ var BillingStatusSchema = import_zod3.z.object({
139
+ billing_plan: import_zod3.z.string(),
140
+ billing_status: import_zod3.z.string(),
141
+ billing_email: import_zod3.z.string().nullable(),
142
+ billing_current_period_end: import_zod3.z.coerce.date().nullable(),
143
+ billing_cancel_at_period_end: import_zod3.z.boolean(),
144
+ billing_customer_id: import_zod3.z.string().nullable(),
145
+ billing_subscription_id: import_zod3.z.string().nullable()
146
+ });
147
+ var CreateCheckoutInputSchema = import_zod3.z.object({
148
+ plan: import_zod3.z.enum(["pro", "business"]),
149
+ success_url: import_zod3.z.string().url().optional(),
150
+ billing_email: import_zod3.z.string().email().optional()
151
+ });
152
+ var CheckoutSessionSchema = import_zod3.z.object({
153
+ url: import_zod3.z.string().url()
154
+ });
155
+ var CustomerPortalSchema = import_zod3.z.object({
156
+ url: import_zod3.z.string().url()
118
157
  });
119
158
 
120
159
  // src/common.schema.ts
121
- var import_zod3 = require("zod");
122
- var WorkspaceIdParamSchema = import_zod3.z.object({
123
- workspace_id: import_zod3.z.string().uuid()
160
+ var import_zod4 = require("zod");
161
+ var WorkspaceIdParamSchema = import_zod4.z.object({
162
+ workspace_id: import_zod4.z.string().uuid()
124
163
  });
125
- var LinkIdParamSchema = import_zod3.z.object({
126
- workspace_id: import_zod3.z.string().uuid(),
127
- link_id: import_zod3.z.string().uuid()
164
+ var LinkIdParamSchema = import_zod4.z.object({
165
+ workspace_id: import_zod4.z.string().uuid(),
166
+ link_id: import_zod4.z.string().uuid()
128
167
  });
129
- var TagIdParamSchema = import_zod3.z.object({
130
- workspace_id: import_zod3.z.string().uuid(),
131
- tag_id: import_zod3.z.string().uuid()
168
+ var TagIdParamSchema = import_zod4.z.object({
169
+ workspace_id: import_zod4.z.string().uuid(),
170
+ tag_id: import_zod4.z.string().uuid()
132
171
  });
133
- var MemberIdParamSchema = import_zod3.z.object({
134
- workspace_id: import_zod3.z.string().uuid(),
135
- user_id: import_zod3.z.string().uuid()
172
+ var MemberIdParamSchema = import_zod4.z.object({
173
+ workspace_id: import_zod4.z.string().uuid(),
174
+ user_id: import_zod4.z.string().uuid()
136
175
  });
137
- var InvitationIdParamSchema = import_zod3.z.object({
138
- workspace_id: import_zod3.z.string().uuid(),
139
- invitation_id: import_zod3.z.string().uuid()
176
+ var InvitationIdParamSchema = import_zod4.z.object({
177
+ workspace_id: import_zod4.z.string().uuid(),
178
+ invitation_id: import_zod4.z.string().uuid()
140
179
  });
141
- var DomainIdParamSchema = import_zod3.z.object({
142
- workspace_id: import_zod3.z.string().uuid(),
143
- domain_id: import_zod3.z.string().uuid()
180
+ var DomainIdParamSchema = import_zod4.z.object({
181
+ workspace_id: import_zod4.z.string().uuid(),
182
+ domain_id: import_zod4.z.string().uuid()
144
183
  });
145
- var UserIdParamSchema = import_zod3.z.object({
146
- user_id: import_zod3.z.string().uuid()
184
+ var UserIdParamSchema = import_zod4.z.object({
185
+ user_id: import_zod4.z.string().uuid()
147
186
  });
148
- var ApiKeyIdParamSchema = import_zod3.z.object({
149
- api_key_id: import_zod3.z.string().uuid()
187
+ var ApiKeyIdParamSchema = import_zod4.z.object({
188
+ api_key_id: import_zod4.z.string().uuid()
150
189
  });
151
- var TokenParamSchema = import_zod3.z.object({
152
- token: import_zod3.z.string()
190
+ var TokenParamSchema = import_zod4.z.object({
191
+ token: import_zod4.z.string()
153
192
  });
154
193
 
155
194
  // src/domains.schema.ts
156
- var import_zod4 = require("zod");
157
- var DomainSchema = import_zod4.z.object({
158
- id: import_zod4.z.string().uuid(),
159
- workspace_id: import_zod4.z.string().uuid().nullable(),
160
- created_by_id: import_zod4.z.string().uuid().nullable(),
161
- domain: import_zod4.z.string(),
162
- is_verified: import_zod4.z.boolean(),
163
- cf_hostname_id: import_zod4.z.string().nullable(),
164
- cf_ssl_status: import_zod4.z.string().nullable(),
165
- cf_ownership_status: import_zod4.z.string().nullable(),
166
- cf_txt_name: import_zod4.z.string().nullable(),
167
- cf_txt_value: import_zod4.z.string().nullable(),
168
- cf_ssl_txt_name: import_zod4.z.string().nullable(),
169
- cf_ssl_txt_value: import_zod4.z.string().nullable(),
170
- cf_last_checked_at: import_zod4.z.coerce.date().nullable(),
171
- created_at: import_zod4.z.coerce.date(),
172
- updated_at: import_zod4.z.coerce.date().nullable()
173
- });
174
- var CreateDomainInputSchema = import_zod4.z.object({
175
- domain: import_zod4.z.string().min(1).max(253).regex(/^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/, {
195
+ var import_zod5 = require("zod");
196
+ var DomainSchema = import_zod5.z.object({
197
+ id: import_zod5.z.string().uuid(),
198
+ workspace_id: import_zod5.z.string().uuid().nullable(),
199
+ created_by_id: import_zod5.z.string().uuid().nullable(),
200
+ domain: import_zod5.z.string(),
201
+ is_verified: import_zod5.z.boolean(),
202
+ cf_hostname_id: import_zod5.z.string().nullable(),
203
+ cf_ssl_status: import_zod5.z.string().nullable(),
204
+ cf_ownership_status: import_zod5.z.string().nullable(),
205
+ cf_txt_name: import_zod5.z.string().nullable(),
206
+ cf_txt_value: import_zod5.z.string().nullable(),
207
+ cf_ssl_txt_name: import_zod5.z.string().nullable(),
208
+ cf_ssl_txt_value: import_zod5.z.string().nullable(),
209
+ cf_last_checked_at: import_zod5.z.coerce.date().nullable(),
210
+ created_at: import_zod5.z.coerce.date(),
211
+ updated_at: import_zod5.z.coerce.date().nullable()
212
+ });
213
+ var CreateDomainInputSchema = import_zod5.z.object({
214
+ domain: import_zod5.z.string().min(1).max(253).regex(/^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/, {
176
215
  message: "Invalid domain format"
177
216
  })
178
217
  });
179
- var UpdateDomainInputSchema = import_zod4.z.object({
180
- domain: import_zod4.z.string().min(1).max(253).regex(/^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/, {
218
+ var UpdateDomainInputSchema = import_zod5.z.object({
219
+ domain: import_zod5.z.string().min(1).max(253).regex(/^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/, {
181
220
  message: "Invalid domain format"
182
221
  }).optional()
183
222
  });
184
223
 
185
224
  // src/links.schema.ts
186
- var import_zod6 = require("zod");
225
+ var import_zod7 = require("zod");
187
226
 
188
227
  // src/tags.schema.ts
189
- var import_zod5 = require("zod");
190
- var TagSchema = import_zod5.z.object({
191
- id: import_zod5.z.string().uuid(),
192
- workspace_id: import_zod5.z.string().uuid(),
193
- name: import_zod5.z.string(),
194
- color: import_zod5.z.string().nullable(),
195
- created_at: import_zod5.z.coerce.date(),
196
- updated_at: import_zod5.z.coerce.date().nullable()
197
- });
198
- var CreateTagInputSchema = import_zod5.z.object({
199
- name: import_zod5.z.string().min(1).max(50),
200
- color: import_zod5.z.string().regex(/^#[0-9A-Fa-f]{6}$/).optional()
201
- });
202
- var UpdateTagInputSchema = import_zod5.z.object({
203
- name: import_zod5.z.string().min(1).max(50).optional(),
204
- color: import_zod5.z.string().regex(/^#[0-9A-Fa-f]{6}$/).nullable().optional()
205
- });
206
-
207
- // src/links.schema.ts
208
- var LinkSchema = import_zod6.z.object({
228
+ var import_zod6 = require("zod");
229
+ var TagSchema = import_zod6.z.object({
209
230
  id: import_zod6.z.string().uuid(),
210
231
  workspace_id: import_zod6.z.string().uuid(),
211
- domain_id: import_zod6.z.string().uuid(),
212
- created_by_id: import_zod6.z.string().uuid(),
213
- original_url: import_zod6.z.string().url(),
214
- short_code: import_zod6.z.string(),
215
- title: import_zod6.z.string().nullable(),
216
- description: import_zod6.z.string().nullable(),
217
- utm_source: import_zod6.z.string().nullable(),
218
- utm_medium: import_zod6.z.string().nullable(),
219
- utm_campaign: import_zod6.z.string().nullable(),
220
- utm_term: import_zod6.z.string().nullable(),
221
- utm_content: import_zod6.z.string().nullable(),
222
- password: import_zod6.z.string().nullable(),
223
- starts_at: import_zod6.z.coerce.date().nullable(),
224
- expires_at: import_zod6.z.coerce.date().nullable(),
225
- is_active: import_zod6.z.boolean(),
226
- redirect_type: import_zod6.z.number().int(),
227
- click_count: import_zod6.z.coerce.number().int(),
228
- click_count_updated_at: import_zod6.z.coerce.date().nullable(),
232
+ name: import_zod6.z.string(),
233
+ color: import_zod6.z.string().nullable(),
229
234
  created_at: import_zod6.z.coerce.date(),
230
- updated_at: import_zod6.z.coerce.date().nullable(),
231
- tags: import_zod6.z.array(TagSchema)
232
- });
233
- var CreateLinkInputSchema = import_zod6.z.object({
234
- original_url: import_zod6.z.string().url().max(2048),
235
- domain_id: import_zod6.z.string().uuid().optional(),
236
- short_code: import_zod6.z.string().min(3).max(50).regex(/^[a-zA-Z0-9-]+$/).optional(),
237
- title: import_zod6.z.string().max(255).optional(),
238
- description: import_zod6.z.string().max(2e3).optional(),
239
- utm_source: import_zod6.z.string().max(255).optional(),
240
- utm_medium: import_zod6.z.string().max(255).optional(),
241
- utm_campaign: import_zod6.z.string().max(255).optional(),
242
- utm_term: import_zod6.z.string().max(255).optional(),
243
- utm_content: import_zod6.z.string().max(255).optional(),
244
- password: import_zod6.z.string().min(4).max(100).optional(),
245
- starts_at: import_zod6.z.coerce.date().optional(),
246
- expires_at: import_zod6.z.coerce.date().optional(),
247
- redirect_type: import_zod6.z.coerce.number().refine((v) => [301, 302, 307, 308].includes(v)).optional(),
248
- tag_ids: import_zod6.z.array(import_zod6.z.string().uuid()).optional()
249
- });
250
- var UpdateLinkInputSchema = import_zod6.z.object({
251
- original_url: import_zod6.z.string().url().max(2048).optional(),
252
- domain_id: import_zod6.z.string().uuid().optional(),
253
- short_code: import_zod6.z.string().min(3).max(50).regex(/^[a-zA-Z0-9-]+$/).optional(),
254
- title: import_zod6.z.string().max(255).nullable().optional(),
255
- description: import_zod6.z.string().max(2e3).nullable().optional(),
256
- utm_source: import_zod6.z.string().max(255).nullable().optional(),
257
- utm_medium: import_zod6.z.string().max(255).nullable().optional(),
258
- utm_campaign: import_zod6.z.string().max(255).nullable().optional(),
259
- utm_term: import_zod6.z.string().max(255).nullable().optional(),
260
- utm_content: import_zod6.z.string().max(255).nullable().optional(),
261
- password: import_zod6.z.string().min(4).max(100).nullable().optional(),
262
- starts_at: import_zod6.z.coerce.date().nullable().optional(),
263
- expires_at: import_zod6.z.coerce.date().nullable().optional(),
264
- is_active: import_zod6.z.boolean().optional(),
265
- redirect_type: import_zod6.z.coerce.number().refine((v) => [301, 302, 307, 308].includes(v)).optional(),
266
- tag_ids: import_zod6.z.array(import_zod6.z.string().uuid()).optional()
267
- });
268
- var LinkFiltersSchema = import_zod6.z.object({
269
- search: import_zod6.z.string().optional(),
270
- domain_id: import_zod6.z.string().uuid().optional(),
271
- is_active: import_zod6.z.coerce.boolean().optional(),
272
- has_expiration: import_zod6.z.coerce.boolean().optional(),
273
- expired: import_zod6.z.coerce.boolean().optional(),
274
- created_from: import_zod6.z.coerce.date().optional(),
275
- created_to: import_zod6.z.coerce.date().optional(),
276
- expires_from: import_zod6.z.coerce.date().optional(),
277
- expires_to: import_zod6.z.coerce.date().optional(),
278
- tag_ids: import_zod6.z.array(import_zod6.z.string().uuid()).optional(),
279
- sort_by: import_zod6.z.enum(["created_at", "title", "click_count"]).default("created_at"),
280
- sort_order: import_zod6.z.enum(["asc", "desc"]).default("desc"),
281
- page: import_zod6.z.coerce.number().int().min(1).default(1),
282
- per_page: import_zod6.z.coerce.number().int().min(1).max(100).default(20)
283
- });
284
- var PaginatedLinksSchema = import_zod6.z.object({
285
- links: import_zod6.z.array(LinkSchema),
286
- total: import_zod6.z.number().int(),
287
- page: import_zod6.z.number().int(),
288
- per_page: import_zod6.z.number().int(),
289
- total_pages: import_zod6.z.number().int()
235
+ updated_at: import_zod6.z.coerce.date().nullable()
236
+ });
237
+ var CreateTagInputSchema = import_zod6.z.object({
238
+ name: import_zod6.z.string().min(1).max(50),
239
+ color: import_zod6.z.string().regex(/^#[0-9A-Fa-f]{6}$/).optional()
240
+ });
241
+ var UpdateTagInputSchema = import_zod6.z.object({
242
+ name: import_zod6.z.string().min(1).max(50).optional(),
243
+ color: import_zod6.z.string().regex(/^#[0-9A-Fa-f]{6}$/).nullable().optional()
290
244
  });
291
245
 
292
- // src/users.schema.ts
293
- var import_zod7 = require("zod");
294
- var UserSchema = import_zod7.z.object({
246
+ // src/links.schema.ts
247
+ var LinkSchema = import_zod7.z.object({
295
248
  id: import_zod7.z.string().uuid(),
296
- external_id: import_zod7.z.string(),
297
- email: import_zod7.z.string().email(),
298
- email_verified_at: import_zod7.z.coerce.date().nullable(),
299
- first_name: import_zod7.z.string().nullable(),
300
- last_name: import_zod7.z.string().nullable(),
249
+ workspace_id: import_zod7.z.string().uuid(),
250
+ domain_id: import_zod7.z.string().uuid(),
251
+ created_by_id: import_zod7.z.string().uuid(),
252
+ original_url: import_zod7.z.string().url(),
253
+ short_code: import_zod7.z.string(),
254
+ title: import_zod7.z.string().nullable(),
255
+ description: import_zod7.z.string().nullable(),
256
+ utm_source: import_zod7.z.string().nullable(),
257
+ utm_medium: import_zod7.z.string().nullable(),
258
+ utm_campaign: import_zod7.z.string().nullable(),
259
+ utm_term: import_zod7.z.string().nullable(),
260
+ utm_content: import_zod7.z.string().nullable(),
261
+ password: import_zod7.z.string().nullable(),
262
+ starts_at: import_zod7.z.coerce.date().nullable(),
263
+ expires_at: import_zod7.z.coerce.date().nullable(),
264
+ is_active: import_zod7.z.boolean(),
265
+ redirect_type: import_zod7.z.number().int(),
266
+ click_count: import_zod7.z.coerce.number().int(),
267
+ click_count_updated_at: import_zod7.z.coerce.date().nullable(),
301
268
  created_at: import_zod7.z.coerce.date(),
302
- updated_at: import_zod7.z.coerce.date().nullable()
303
- });
304
- var SignInInputSchema = import_zod7.z.object({
305
- first_name: import_zod7.z.string().min(1).max(100).optional(),
306
- last_name: import_zod7.z.string().min(1).max(100).optional()
307
- });
308
- var UpdateUserInputSchema = import_zod7.z.object({
309
- first_name: import_zod7.z.string().min(1).max(100).optional(),
310
- last_name: import_zod7.z.string().min(1).max(100).optional()
269
+ updated_at: import_zod7.z.coerce.date().nullable(),
270
+ tags: import_zod7.z.array(TagSchema)
271
+ });
272
+ var CreateLinkInputSchema = import_zod7.z.object({
273
+ original_url: import_zod7.z.string().url().max(2048),
274
+ domain_id: import_zod7.z.string().uuid().optional(),
275
+ short_code: import_zod7.z.string().min(3).max(50).regex(/^[a-zA-Z0-9-]+$/).optional(),
276
+ title: import_zod7.z.string().max(255).optional(),
277
+ description: import_zod7.z.string().max(2e3).optional(),
278
+ utm_source: import_zod7.z.string().max(255).optional(),
279
+ utm_medium: import_zod7.z.string().max(255).optional(),
280
+ utm_campaign: import_zod7.z.string().max(255).optional(),
281
+ utm_term: import_zod7.z.string().max(255).optional(),
282
+ utm_content: import_zod7.z.string().max(255).optional(),
283
+ password: import_zod7.z.string().min(4).max(100).optional(),
284
+ starts_at: import_zod7.z.coerce.date().optional(),
285
+ expires_at: import_zod7.z.coerce.date().optional(),
286
+ redirect_type: import_zod7.z.coerce.number().refine((v) => [301, 302, 307, 308].includes(v)).optional(),
287
+ tag_ids: import_zod7.z.array(import_zod7.z.string().uuid()).optional()
288
+ });
289
+ var UpdateLinkInputSchema = import_zod7.z.object({
290
+ original_url: import_zod7.z.string().url().max(2048).optional(),
291
+ domain_id: import_zod7.z.string().uuid().optional(),
292
+ short_code: import_zod7.z.string().min(3).max(50).regex(/^[a-zA-Z0-9-]+$/).optional(),
293
+ title: import_zod7.z.string().max(255).nullable().optional(),
294
+ description: import_zod7.z.string().max(2e3).nullable().optional(),
295
+ utm_source: import_zod7.z.string().max(255).nullable().optional(),
296
+ utm_medium: import_zod7.z.string().max(255).nullable().optional(),
297
+ utm_campaign: import_zod7.z.string().max(255).nullable().optional(),
298
+ utm_term: import_zod7.z.string().max(255).nullable().optional(),
299
+ utm_content: import_zod7.z.string().max(255).nullable().optional(),
300
+ password: import_zod7.z.string().min(4).max(100).nullable().optional(),
301
+ starts_at: import_zod7.z.coerce.date().nullable().optional(),
302
+ expires_at: import_zod7.z.coerce.date().nullable().optional(),
303
+ is_active: import_zod7.z.boolean().optional(),
304
+ redirect_type: import_zod7.z.coerce.number().refine((v) => [301, 302, 307, 308].includes(v)).optional(),
305
+ tag_ids: import_zod7.z.array(import_zod7.z.string().uuid()).optional()
306
+ });
307
+ var LinkFiltersSchema = import_zod7.z.object({
308
+ search: import_zod7.z.string().optional(),
309
+ domain_id: import_zod7.z.string().uuid().optional(),
310
+ is_active: import_zod7.z.coerce.boolean().optional(),
311
+ has_expiration: import_zod7.z.coerce.boolean().optional(),
312
+ expired: import_zod7.z.coerce.boolean().optional(),
313
+ created_from: import_zod7.z.coerce.date().optional(),
314
+ created_to: import_zod7.z.coerce.date().optional(),
315
+ expires_from: import_zod7.z.coerce.date().optional(),
316
+ expires_to: import_zod7.z.coerce.date().optional(),
317
+ tag_ids: import_zod7.z.array(import_zod7.z.string().uuid()).optional(),
318
+ sort_by: import_zod7.z.enum(["created_at", "title", "click_count"]).default("created_at"),
319
+ sort_order: import_zod7.z.enum(["asc", "desc"]).default("desc"),
320
+ page: import_zod7.z.coerce.number().int().min(1).default(1),
321
+ per_page: import_zod7.z.coerce.number().int().min(1).max(100).default(20)
322
+ });
323
+ var PaginatedLinksSchema = import_zod7.z.object({
324
+ links: import_zod7.z.array(LinkSchema),
325
+ total: import_zod7.z.number().int(),
326
+ page: import_zod7.z.number().int(),
327
+ per_page: import_zod7.z.number().int(),
328
+ total_pages: import_zod7.z.number().int()
311
329
  });
312
330
 
313
- // src/workspaces.schema.ts
331
+ // src/users.schema.ts
314
332
  var import_zod8 = require("zod");
315
- var WorkspaceSchema = import_zod8.z.object({
333
+ var UserSchema = import_zod8.z.object({
316
334
  id: import_zod8.z.string().uuid(),
317
- name: import_zod8.z.string(),
318
- billing_plan: import_zod8.z.string(),
319
- billing_status: import_zod8.z.string(),
320
- billing_email: import_zod8.z.string().nullable(),
321
- billing_current_period_end: import_zod8.z.coerce.date().nullable(),
322
- billing_cancel_at_period_end: import_zod8.z.boolean(),
335
+ external_id: import_zod8.z.string(),
336
+ email: import_zod8.z.string().email(),
337
+ email_verified_at: import_zod8.z.coerce.date().nullable(),
338
+ first_name: import_zod8.z.string().nullable(),
339
+ last_name: import_zod8.z.string().nullable(),
323
340
  created_at: import_zod8.z.coerce.date(),
324
341
  updated_at: import_zod8.z.coerce.date().nullable()
325
342
  });
326
- var WorkspaceWithCountSchema = WorkspaceSchema.extend({
327
- member_count: import_zod8.z.number().int()
328
- });
329
- var CreateWorkspaceInputSchema = import_zod8.z.object({
330
- name: import_zod8.z.string().min(1).max(100)
343
+ var SignInInputSchema = import_zod8.z.object({
344
+ first_name: import_zod8.z.string().min(1).max(100).optional(),
345
+ last_name: import_zod8.z.string().min(1).max(100).optional()
331
346
  });
332
- var UpdateWorkspaceInputSchema = import_zod8.z.object({
333
- name: import_zod8.z.string().min(1).max(100).optional()
347
+ var UpdateUserInputSchema = import_zod8.z.object({
348
+ first_name: import_zod8.z.string().min(1).max(100).optional(),
349
+ last_name: import_zod8.z.string().min(1).max(100).optional()
334
350
  });
335
- var TransferOwnershipInputSchema = import_zod8.z.object({
336
- to_user_id: import_zod8.z.string().uuid()
337
- });
338
- var WorkspaceMemberUserSchema = import_zod8.z.object({
339
- id: import_zod8.z.string().uuid(),
340
- email: import_zod8.z.string().email(),
341
- first_name: import_zod8.z.string().nullable(),
342
- last_name: import_zod8.z.string().nullable()
351
+
352
+ // src/workspaces.schema.ts
353
+ var import_zod9 = require("zod");
354
+ var WorkspaceSchema = import_zod9.z.object({
355
+ id: import_zod9.z.string().uuid(),
356
+ name: import_zod9.z.string(),
357
+ billing_plan: import_zod9.z.string(),
358
+ billing_status: import_zod9.z.string(),
359
+ billing_email: import_zod9.z.string().nullable(),
360
+ billing_current_period_end: import_zod9.z.coerce.date().nullable(),
361
+ billing_cancel_at_period_end: import_zod9.z.boolean(),
362
+ created_at: import_zod9.z.coerce.date(),
363
+ updated_at: import_zod9.z.coerce.date().nullable()
343
364
  });
344
- var WorkspaceMemberSchema = import_zod8.z.object({
345
- id: import_zod8.z.string().uuid(),
346
- workspace_id: import_zod8.z.string().uuid(),
347
- user_id: import_zod8.z.string().uuid(),
348
- user: WorkspaceMemberUserSchema,
349
- permissions: import_zod8.z.number().int(),
350
- joined_at: import_zod8.z.coerce.date(),
351
- created_at: import_zod8.z.coerce.date(),
352
- updated_at: import_zod8.z.coerce.date().nullable()
365
+ var WorkspaceWithCountSchema = WorkspaceSchema.extend({
366
+ member_count: import_zod9.z.number().int()
353
367
  });
354
- var UpdateMemberInputSchema = import_zod8.z.object({
355
- permissions: import_zod8.z.number().int().min(1)
368
+ var CreateWorkspaceInputSchema = import_zod9.z.object({
369
+ name: import_zod9.z.string().min(1).max(100)
356
370
  });
357
- var WorkspaceInvitationSchema = import_zod8.z.object({
358
- id: import_zod8.z.string().uuid(),
359
- workspace_id: import_zod8.z.string().uuid(),
360
- email: import_zod8.z.string().email(),
361
- token: import_zod8.z.string(),
362
- permissions: import_zod8.z.number().int(),
363
- invited_by_id: import_zod8.z.string().uuid(),
364
- expires_at: import_zod8.z.coerce.date(),
365
- created_at: import_zod8.z.coerce.date()
371
+ var UpdateWorkspaceInputSchema = import_zod9.z.object({
372
+ name: import_zod9.z.string().min(1).max(100).optional(),
373
+ billing_email: import_zod9.z.string().email().nullish()
366
374
  });
367
- var CreateInvitationInputSchema = import_zod8.z.object({
368
- email: import_zod8.z.string().email(),
369
- permissions: import_zod8.z.number().int().min(1)
375
+ var TransferOwnershipInputSchema = import_zod9.z.object({
376
+ to_user_id: import_zod9.z.string().uuid()
370
377
  });
371
- var WorkspaceRoleSchema = import_zod8.z.object({
372
- name: import_zod8.z.string(),
373
- description: import_zod8.z.string(),
374
- permissions: import_zod8.z.number().int()
378
+ var WorkspaceMemberUserSchema = import_zod9.z.object({
379
+ id: import_zod9.z.string().uuid(),
380
+ email: import_zod9.z.string().email(),
381
+ first_name: import_zod9.z.string().nullable(),
382
+ last_name: import_zod9.z.string().nullable()
375
383
  });
376
-
377
- // src/analytics.schema.ts
378
- var import_zod9 = require("zod");
379
- var LinkAnalyticsQuerySchema = import_zod9.z.object({
380
- link_id: import_zod9.z.string().uuid(),
381
- from: import_zod9.z.coerce.date(),
382
- to: import_zod9.z.coerce.date()
384
+ var WorkspaceMemberSchema = import_zod9.z.object({
385
+ id: import_zod9.z.string().uuid(),
386
+ workspace_id: import_zod9.z.string().uuid(),
387
+ user_id: import_zod9.z.string().uuid(),
388
+ user: WorkspaceMemberUserSchema,
389
+ permissions: import_zod9.z.number().int(),
390
+ joined_at: import_zod9.z.coerce.date(),
391
+ created_at: import_zod9.z.coerce.date(),
392
+ updated_at: import_zod9.z.coerce.date().nullable()
393
+ });
394
+ var UpdateMemberInputSchema = import_zod9.z.object({
395
+ permissions: import_zod9.z.number().int().min(1)
396
+ });
397
+ var WorkspaceInvitationSchema = import_zod9.z.object({
398
+ id: import_zod9.z.string().uuid(),
399
+ workspace_id: import_zod9.z.string().uuid(),
400
+ email: import_zod9.z.string().email(),
401
+ token: import_zod9.z.string(),
402
+ permissions: import_zod9.z.number().int(),
403
+ invited_by_id: import_zod9.z.string().uuid(),
404
+ expires_at: import_zod9.z.coerce.date(),
405
+ created_at: import_zod9.z.coerce.date()
406
+ });
407
+ var CreateInvitationInputSchema = import_zod9.z.object({
408
+ email: import_zod9.z.string().email(),
409
+ permissions: import_zod9.z.number().int().min(1)
410
+ });
411
+ var WorkspaceRoleSchema = import_zod9.z.object({
412
+ name: import_zod9.z.string(),
413
+ description: import_zod9.z.string(),
414
+ permissions: import_zod9.z.number().int()
383
415
  });
384
416
 
385
417
  // src/index.ts
418
+ var analyticsContract = {
419
+ workspace: import_contract.oc.route({ method: "GET", path: "/api/workspaces/{workspace_id}/analytics" }).input(WorkspaceIdParamSchema.merge(AnalyticsQuerySchema)).output(AnalyticsOutputSchema),
420
+ link: import_contract.oc.route({ method: "GET", path: "/api/workspaces/{workspace_id}/links/{link_id}/analytics" }).input(LinkIdParamSchema.merge(AnalyticsQuerySchema)).output(AnalyticsOutputSchema)
421
+ };
386
422
  var usersContract = {
387
423
  me: import_contract.oc.route({ method: "GET", path: "/api/users/me" }).output(import_zod10.z.object({ user: UserSchema })),
388
424
  signIn: import_contract.oc.route({ method: "POST", path: "/api/users" }).input(SignInInputSchema).output(import_zod10.z.object({ user: UserSchema, status: import_zod10.z.enum(["created", "existing"]) })),
@@ -443,6 +479,7 @@ var billingContract = {
443
479
  portal: import_contract.oc.route({ method: "POST", path: "/api/workspaces/{workspace_id}/billing/portal" }).input(WorkspaceIdParamSchema).output(CustomerPortalSchema)
444
480
  };
445
481
  var contract = {
482
+ analytics: analyticsContract,
446
483
  users: usersContract,
447
484
  apiKeys: apiKeysContract,
448
485
  workspaces: workspacesContract,
@@ -454,10 +491,14 @@ var contract = {
454
491
  };
455
492
  // Annotate the CommonJS export names for ESM import in node:
456
493
  0 && (module.exports = {
494
+ AnalyticsIntervalSchema,
495
+ AnalyticsOutputSchema,
496
+ AnalyticsQuerySchema,
457
497
  ApiKeyIdParamSchema,
458
498
  ApiKeySchema,
459
499
  BillingStatusSchema,
460
500
  CheckoutSessionSchema,
501
+ CountByFieldSchema,
461
502
  CreateApiKeyInputSchema,
462
503
  CreateApiKeyResponseSchema,
463
504
  CreateCheckoutInputSchema,
@@ -479,6 +520,7 @@ var contract = {
479
520
  SignInInputSchema,
480
521
  TagIdParamSchema,
481
522
  TagSchema,
523
+ TimeSeriesPointSchema,
482
524
  TokenParamSchema,
483
525
  TransferOwnershipInputSchema,
484
526
  UpdateDomainInputSchema,
@@ -496,6 +538,7 @@ var contract = {
496
538
  WorkspaceRoleSchema,
497
539
  WorkspaceSchema,
498
540
  WorkspaceWithCountSchema,
541
+ analyticsContract,
499
542
  apiKeysContract,
500
543
  billingContract,
501
544
  contract,