@payark/sdk-effect 0.1.5 → 0.1.9

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.
@@ -0,0 +1,622 @@
1
+ import { HttpApiMiddleware, HttpApiSecurity, HttpApiGroup, HttpApiEndpoint, HttpApi } from '@effect/platform';
2
+ import { Schema, Context } from 'effect';
3
+
4
+ // src/api-spec.ts
5
+ var NonEmptyString = Schema.String.pipe(
6
+ Schema.nonEmptyString(),
7
+ Schema.brand("NonEmptyString")
8
+ );
9
+ var UrlString = Schema.String.pipe(
10
+ Schema.pattern(/^https?:\/\/.+/),
11
+ Schema.brand("UrlString")
12
+ );
13
+ Schema.Number.pipe(
14
+ Schema.int(),
15
+ Schema.greaterThan(0),
16
+ Schema.brand("MinorUnitsInt")
17
+ );
18
+ var NprAmount = Schema.Number.pipe(
19
+ Schema.filter(
20
+ (n) => Number.isFinite(n) && n > 0 && Math.round(n * 100) === n * 100
21
+ ),
22
+ Schema.brand("NprAmount")
23
+ );
24
+
25
+ // src/schemas.ts
26
+ var Id = Schema.String.pipe(Schema.brand("Id"));
27
+ var ProjectId = Schema.String.pipe(Schema.brand("ProjectId"));
28
+ var PaymentId = Schema.String.pipe(Schema.brand("PaymentId"));
29
+ var CheckoutSessionId = Schema.String.pipe(
30
+ Schema.brand("CheckoutSessionId")
31
+ );
32
+ var SubscriptionId = Schema.String.pipe(
33
+ Schema.brand("SubscriptionId")
34
+ );
35
+ var MandateId = Schema.String.pipe(Schema.brand("MandateId"));
36
+ var AgentSessionId = Schema.String.pipe(
37
+ Schema.brand("AgentSessionId")
38
+ );
39
+ var CustomerId = Schema.String.pipe(Schema.brand("CustomerId"));
40
+ var TokenId = Schema.String.pipe(Schema.brand("TokenId"));
41
+ var Email = Schema.String.pipe(
42
+ Schema.filter((s) => s.includes("@")),
43
+ Schema.brand("Email")
44
+ );
45
+ var Timestamp = Schema.String.pipe(Schema.brand("Timestamp"));
46
+ var Metadata = Schema.Record({
47
+ key: Schema.String,
48
+ value: Schema.Any
49
+ });
50
+ Schema.Struct({
51
+ created_at: Timestamp,
52
+ updated_at: Timestamp
53
+ });
54
+ var Provider = Schema.Literal(
55
+ "esewa",
56
+ "khalti",
57
+ "hamropay",
58
+ "connectips",
59
+ "imepay",
60
+ "fonepay",
61
+ "sandbox"
62
+ );
63
+ var PaymentStatus = Schema.Literal("pending", "success", "failed");
64
+ var SubscriptionStatus = Schema.Literal(
65
+ "pending_checkout",
66
+ "active",
67
+ "past_due",
68
+ "canceled",
69
+ "paused"
70
+ );
71
+ var SubscriptionInterval = Schema.Literal("month", "year", "week");
72
+ var CustomerLifecycle = Schema.Literal(
73
+ "new",
74
+ "active",
75
+ "loyal",
76
+ "at_risk",
77
+ "churned"
78
+ );
79
+ var MandateType = Schema.Literal("intent", "cart");
80
+ var MandateStatus = Schema.Literal(
81
+ "active",
82
+ "consumed",
83
+ "expired",
84
+ "violated"
85
+ );
86
+ var Customer = Schema.Struct({
87
+ id: CustomerId,
88
+ merchant_customer_id: NonEmptyString,
89
+ email: Schema.NullOr(Email),
90
+ name: Schema.NullOr(NonEmptyString),
91
+ phone: Schema.NullOr(Schema.String),
92
+ project_id: ProjectId,
93
+ metadata: Schema.NullOr(Metadata),
94
+ total_ltv: Schema.optional(Schema.Number),
95
+ is_high_value: Schema.optional(Schema.Boolean),
96
+ lifecycle_stage: Schema.optional(CustomerLifecycle),
97
+ ltv_cents: Schema.optional(Schema.Number),
98
+ tier: Schema.NullOr(Schema.String),
99
+ created_at: Timestamp,
100
+ updated_at: Schema.optional(Timestamp)
101
+ });
102
+ var Payment = Schema.Struct({
103
+ id: PaymentId,
104
+ project_id: ProjectId,
105
+ customer_id: Schema.optional(Schema.NullOr(CustomerId)),
106
+ amount: Schema.Number,
107
+ currency: Schema.String,
108
+ status: PaymentStatus,
109
+ provider_ref: Schema.optional(Schema.NullOr(Schema.String)),
110
+ metadata_json: Schema.optional(Schema.NullOr(Metadata)),
111
+ gateway_response: Schema.optional(Schema.NullOr(Schema.Any)),
112
+ created_at: Timestamp,
113
+ updated_at: Schema.optional(Timestamp)
114
+ });
115
+ var Subscription = Schema.Struct({
116
+ id: SubscriptionId,
117
+ project_id: ProjectId,
118
+ customer_id: CustomerId,
119
+ status: SubscriptionStatus,
120
+ amount: Schema.Number,
121
+ currency: Schema.String,
122
+ interval: SubscriptionInterval,
123
+ interval_count: Schema.Number,
124
+ current_period_start: Timestamp,
125
+ current_period_end: Timestamp,
126
+ payment_link: UrlString,
127
+ customer_email: Schema.optional(Schema.NullOr(Schema.String)),
128
+ auto_send_link: Schema.Boolean,
129
+ grace_days: Schema.optional(Schema.Number),
130
+ metadata: Schema.optional(Schema.NullOr(Metadata)),
131
+ canceled_at: Schema.optional(Schema.NullOr(Timestamp)),
132
+ created_at: Timestamp,
133
+ updated_at: Schema.optional(Timestamp)
134
+ });
135
+ var Project = Schema.Struct({
136
+ id: ProjectId,
137
+ name: NonEmptyString,
138
+ api_key_secret: Schema.String,
139
+ subscription_tier: Schema.optional(
140
+ Schema.Literal("free", "pro", "enterprise")
141
+ ),
142
+ subscription_status: Schema.optional(
143
+ Schema.Literal("active", "past_due", "canceled", "incomplete")
144
+ ),
145
+ expires_at: Schema.optional(Schema.NullOr(Timestamp)),
146
+ created_at: Timestamp
147
+ });
148
+ var Token = Schema.Struct({
149
+ id: TokenId,
150
+ name: NonEmptyString,
151
+ scopes: Schema.Array(Schema.String),
152
+ last_used_at: Schema.NullOr(Timestamp),
153
+ expires_at: Schema.NullOr(Timestamp),
154
+ created_at: Timestamp
155
+ });
156
+ var Mandate = Schema.Struct({
157
+ id: MandateId,
158
+ project_id: ProjectId,
159
+ customer_id: Schema.NullOr(CustomerId),
160
+ type: MandateType,
161
+ status: MandateStatus,
162
+ principal_id: Schema.String,
163
+ max_amount: Schema.Number,
164
+ currency: Schema.String,
165
+ permitted_vendors: Schema.NullOr(Schema.Array(Schema.String)),
166
+ valid_from: Timestamp,
167
+ valid_until: Timestamp,
168
+ credential_jwt: Schema.String,
169
+ public_key: Schema.String,
170
+ signature: Schema.String,
171
+ parent_mandate_id: Schema.NullOr(MandateId),
172
+ payment_id: Schema.NullOr(PaymentId),
173
+ created_at: Timestamp,
174
+ consumed_at: Schema.NullOr(Timestamp),
175
+ metadata_json: Metadata
176
+ });
177
+ Schema.Struct({
178
+ id: AgentSessionId,
179
+ project_id: ProjectId,
180
+ context_id: Schema.String,
181
+ agent_card_url: UrlString,
182
+ capabilities: Schema.Any,
183
+ auth_scheme: Schema.Literal("bearer", "mandate"),
184
+ status: Schema.String,
185
+ created_at: Timestamp,
186
+ expires_at: Timestamp
187
+ });
188
+ var PaginationMeta = Schema.Struct({
189
+ total: Schema.NullOr(Schema.Number),
190
+ limit: Schema.Number,
191
+ offset: Schema.Number
192
+ });
193
+ var PaginatedResponse = (schema) => Schema.Struct({
194
+ data: Schema.Array(schema),
195
+ meta: PaginationMeta
196
+ });
197
+ var WebhookEventType = Schema.Literal(
198
+ "payment.success",
199
+ "payment.failed",
200
+ "subscription.created",
201
+ "subscription.activated",
202
+ "subscription.renewed",
203
+ "subscription.payment_succeeded",
204
+ "subscription.payment_failed",
205
+ "subscription.renewal_due",
206
+ "subscription.canceled"
207
+ );
208
+ Schema.Struct({
209
+ type: WebhookEventType,
210
+ id: Schema.optional(Schema.String),
211
+ data: Schema.Union(
212
+ Payment,
213
+ Subscription,
214
+ Customer,
215
+ Schema.Struct({
216
+ id: Schema.String,
217
+ amount: Schema.optional(Schema.Number),
218
+ currency: Schema.optional(Schema.String),
219
+ status: Schema.String,
220
+ metadata: Schema.optional(Metadata)
221
+ })
222
+ ),
223
+ is_test: Schema.Boolean,
224
+ created: Schema.optional(Schema.Number)
225
+ });
226
+ var CreateCheckoutParams = Schema.Struct({
227
+ amount: Schema.optional(NprAmount),
228
+ currency: Schema.optionalWith(Schema.String, { default: () => "NPR" }),
229
+ provider: Provider,
230
+ returnUrl: UrlString,
231
+ cancelUrl: Schema.optional(UrlString),
232
+ metadata: Schema.optional(Metadata),
233
+ subscriptionId: Schema.optional(SubscriptionId),
234
+ customerId: Schema.optional(CustomerId),
235
+ mandate_id: Schema.optional(MandateId)
236
+ }).pipe(
237
+ Schema.filter((data) => {
238
+ if (!data.subscriptionId && !data.amount) {
239
+ return "amount is required when subscriptionId is not provided";
240
+ }
241
+ return true;
242
+ })
243
+ );
244
+ var CheckoutSession = Schema.Struct({
245
+ id: CheckoutSessionId,
246
+ checkout_url: UrlString,
247
+ qr_string: Schema.optional(Schema.String),
248
+ payment_method: Schema.Struct({
249
+ type: Provider,
250
+ url: Schema.optional(UrlString),
251
+ method: Schema.optional(Schema.Literal("GET", "POST")),
252
+ fields: Schema.optional(
253
+ Schema.Record({ key: Schema.String, value: Schema.String })
254
+ )
255
+ })
256
+ });
257
+ var CreateCustomerParams = Schema.Struct({
258
+ merchant_customer_id: NonEmptyString,
259
+ email: Schema.optional(Email),
260
+ name: Schema.optional(NonEmptyString),
261
+ phone: Schema.optional(Schema.String),
262
+ project_id: Schema.optional(ProjectId),
263
+ metadata: Schema.optional(Metadata)
264
+ });
265
+ var ListPaymentsParams = Schema.Struct({
266
+ limit: Schema.optional(Schema.NumberFromString),
267
+ offset: Schema.optional(Schema.NumberFromString),
268
+ projectId: Schema.optional(ProjectId)
269
+ });
270
+ var ListCustomersParams = Schema.Struct({
271
+ limit: Schema.optional(Schema.NumberFromString),
272
+ offset: Schema.optional(Schema.NumberFromString),
273
+ email: Schema.optional(Schema.String),
274
+ merchant_customer_id: Schema.optional(Schema.String),
275
+ projectId: Schema.optional(ProjectId)
276
+ });
277
+ var UpdateCustomerParams = Schema.Struct({
278
+ email: Schema.optional(Email),
279
+ name: Schema.optional(NonEmptyString),
280
+ phone: Schema.optional(Schema.String),
281
+ tier: Schema.optional(Schema.String),
282
+ merchant_customer_id: Schema.optional(Schema.String),
283
+ metadata: Schema.optional(Metadata)
284
+ });
285
+ var CreateSubscriptionParams = Schema.Struct({
286
+ customer_id: CustomerId,
287
+ amount: NprAmount,
288
+ currency: Schema.optionalWith(Schema.String, { default: () => "NPR" }),
289
+ interval: SubscriptionInterval,
290
+ interval_count: Schema.optional(Schema.Number),
291
+ project_id: Schema.optional(ProjectId),
292
+ customer_email: Schema.optional(Schema.String),
293
+ auto_send_link: Schema.optional(Schema.Boolean),
294
+ metadata: Schema.optional(Metadata)
295
+ });
296
+ Schema.Struct({
297
+ payment_id: Schema.optional(Schema.String),
298
+ data: Schema.optional(Schema.String),
299
+ pidx: Schema.optional(Schema.String),
300
+ /** HamroPay-specific: the gateway's own transactionId returned on callback. */
301
+ ref_id: Schema.optional(Schema.String)
302
+ });
303
+ var ListSubscriptionsParams = Schema.Struct({
304
+ limit: Schema.optional(Schema.NumberFromString),
305
+ offset: Schema.optional(Schema.NumberFromString),
306
+ projectId: Schema.optional(ProjectId),
307
+ customerId: Schema.optional(CustomerId),
308
+ status: Schema.optional(SubscriptionStatus)
309
+ });
310
+ var RealtimeTriggerPayload = Schema.Struct({
311
+ event: Schema.optional(WebhookEventType),
312
+ data: Schema.optional(Schema.Any)
313
+ });
314
+ Schema.Struct({
315
+ apiKey: Schema.String,
316
+ baseUrl: Schema.optional(Schema.String),
317
+ timeout: Schema.optional(Schema.Number),
318
+ maxRetries: Schema.optional(Schema.Number),
319
+ sandbox: Schema.optional(Schema.Boolean),
320
+ signingPrivateKey: Schema.optional(Schema.String)
321
+ });
322
+ Schema.Struct({
323
+ error: Schema.String,
324
+ details: Schema.optional(Schema.Any)
325
+ });
326
+ var IndustrialError = class extends Schema.TaggedError()(
327
+ "IndustrialError",
328
+ {
329
+ error: Schema.String,
330
+ details: Schema.optional(Schema.Any),
331
+ code: Schema.optional(Schema.String),
332
+ doc_url: Schema.optional(Schema.String),
333
+ suggestion: Schema.optional(Schema.String)
334
+ }
335
+ ) {
336
+ };
337
+ var AuthenticationError = class extends Schema.TaggedError()(
338
+ "AuthenticationError",
339
+ {
340
+ error: Schema.String,
341
+ code: Schema.optional(Schema.String),
342
+ doc_url: Schema.optional(Schema.String),
343
+ suggestion: Schema.optional(Schema.String)
344
+ }
345
+ ) {
346
+ };
347
+ var NotFoundError = class extends Schema.TaggedError()(
348
+ "NotFoundError",
349
+ {
350
+ error: Schema.String,
351
+ code: Schema.optional(Schema.String),
352
+ doc_url: Schema.optional(Schema.String),
353
+ suggestion: Schema.optional(Schema.String)
354
+ }
355
+ ) {
356
+ };
357
+ var InternalServerError = class extends Schema.TaggedError()(
358
+ "InternalServerError",
359
+ {
360
+ error: Schema.String,
361
+ details: Schema.optional(Schema.Any),
362
+ code: Schema.optional(Schema.String),
363
+ doc_url: Schema.optional(Schema.String),
364
+ suggestion: Schema.optional(Schema.String)
365
+ }
366
+ ) {
367
+ };
368
+ var ConflictError = class extends Schema.TaggedError()(
369
+ "ConflictError",
370
+ {
371
+ error: Schema.String,
372
+ code: Schema.optional(Schema.String),
373
+ doc_url: Schema.optional(Schema.String),
374
+ suggestion: Schema.optional(Schema.String)
375
+ }
376
+ ) {
377
+ };
378
+ var MandateViolationError = class extends Schema.TaggedError()(
379
+ "MandateViolationError",
380
+ {
381
+ error: Schema.String,
382
+ mandateId: Schema.optional(Schema.String),
383
+ code: Schema.optional(Schema.String),
384
+ doc_url: Schema.optional(Schema.String),
385
+ suggestion: Schema.optional(Schema.String)
386
+ }
387
+ ) {
388
+ };
389
+ var MandateExpiredError = class extends Schema.TaggedError()(
390
+ "MandateExpiredError",
391
+ {
392
+ error: Schema.String,
393
+ mandateId: MandateId,
394
+ expiredAt: Timestamp,
395
+ code: Schema.optional(Schema.String),
396
+ doc_url: Schema.optional(Schema.String),
397
+ suggestion: Schema.optional(Schema.String)
398
+ }
399
+ ) {
400
+ };
401
+ var AuthContext = Context.GenericTag(
402
+ "@payark/sdk-effect/AuthContext"
403
+ );
404
+ var SecurityMiddleware = class extends HttpApiMiddleware.Tag()(
405
+ "SecurityMiddleware",
406
+ {
407
+ security: {
408
+ bearer: HttpApiSecurity.bearer
409
+ },
410
+ provides: AuthContext,
411
+ failure: Schema.Union(AuthenticationError, IndustrialError)
412
+ }
413
+ ) {
414
+ };
415
+ var CronSecurity = class extends HttpApiMiddleware.Tag()(
416
+ "CronSecurity",
417
+ {
418
+ security: {
419
+ secret: HttpApiSecurity.apiKey({ in: "header", key: "x-cron-secret" })
420
+ },
421
+ failure: Schema.Union(AuthenticationError, IndustrialError)
422
+ }
423
+ ) {
424
+ };
425
+ var UserSecurity = class extends HttpApiMiddleware.Tag()(
426
+ "UserSecurity",
427
+ {
428
+ security: {
429
+ bearer: HttpApiSecurity.bearer
430
+ },
431
+ provides: AuthContext,
432
+ failure: Schema.Union(AuthenticationError, IndustrialError)
433
+ }
434
+ ) {
435
+ };
436
+ var CheckoutGroup = HttpApiGroup.make("checkout").add(
437
+ HttpApiEndpoint.post("create", "/").addSuccess(CheckoutSession).setPayload(CreateCheckoutParams).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
438
+ ).prefix("/v1/checkout").middleware(SecurityMiddleware);
439
+ var PaymentsGroup = HttpApiGroup.make("payments").add(
440
+ HttpApiEndpoint.get("list", "/").addSuccess(PaginatedResponse(Payment)).setUrlParams(ListPaymentsParams).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
441
+ ).add(
442
+ HttpApiEndpoint.get("retrieve", "/:id").addSuccess(Payment).setPath(Schema.Struct({ id: Id })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
443
+ ).prefix("/v1/payments").middleware(SecurityMiddleware);
444
+ var CustomersGroup = HttpApiGroup.make("customers").add(
445
+ HttpApiEndpoint.post("create", "/").addSuccess(Customer, { status: 201 }).setPayload(CreateCustomerParams).addError(AuthenticationError, { status: 401 }).addError(ConflictError, { status: 409 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
446
+ ).add(
447
+ HttpApiEndpoint.get("list", "/").addSuccess(PaginatedResponse(Customer)).setUrlParams(ListCustomersParams).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
448
+ ).add(
449
+ HttpApiEndpoint.get("retrieve", "/:id").addSuccess(Customer).setPath(Schema.Struct({ id: Id })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
450
+ ).add(
451
+ HttpApiEndpoint.patch("update", "/:id").addSuccess(Customer).setPath(Schema.Struct({ id: Id })).setPayload(UpdateCustomerParams).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(ConflictError, { status: 409 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
452
+ ).add(
453
+ HttpApiEndpoint.del("delete", "/:id").setPath(Schema.Struct({ id: Id })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(ConflictError, { status: 409 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
454
+ ).prefix("/v1/customers").middleware(SecurityMiddleware);
455
+ var SubscriptionsGroup = HttpApiGroup.make("subscriptions").add(
456
+ HttpApiEndpoint.post("create", "/").addSuccess(Subscription, { status: 201 }).setPayload(CreateSubscriptionParams).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 }).middleware(SecurityMiddleware)
457
+ ).add(
458
+ HttpApiEndpoint.get("retrieve", "/:id").addSuccess(Subscription).setPath(Schema.Struct({ id: SubscriptionId })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 }).middleware(SecurityMiddleware)
459
+ ).add(
460
+ HttpApiEndpoint.get("list", "/").addSuccess(PaginatedResponse(Subscription)).setUrlParams(ListSubscriptionsParams).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 }).middleware(SecurityMiddleware)
461
+ ).add(
462
+ HttpApiEndpoint.post("cancel", "/:id/cancel").addSuccess(Subscription).setPath(Schema.Struct({ id: SubscriptionId })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 }).middleware(SecurityMiddleware)
463
+ ).add(
464
+ HttpApiEndpoint.post("activate", "/:id/activate").addSuccess(
465
+ Schema.Struct({
466
+ checkout_url: Schema.String,
467
+ payment_id: Schema.String
468
+ })
469
+ ).setPath(Schema.Struct({ id: SubscriptionId })).setPayload(
470
+ Schema.Struct({
471
+ provider: Provider,
472
+ returnUrl: Schema.String,
473
+ cancelUrl: Schema.optional(Schema.String)
474
+ })
475
+ ).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
476
+ ).prefix("/v1/subscriptions");
477
+ var AutomationGroup = HttpApiGroup.make("automation").add(
478
+ HttpApiEndpoint.post("reminders", "/reminders").addSuccess(
479
+ Schema.Struct({
480
+ message: Schema.String,
481
+ count: Schema.Number
482
+ })
483
+ ).addError(InternalServerError, { status: 500 })
484
+ ).add(
485
+ HttpApiEndpoint.post("reaper", "/reaper").addSuccess(
486
+ Schema.Struct({
487
+ message: Schema.String,
488
+ count: Schema.Number,
489
+ purged_projects: Schema.Number
490
+ })
491
+ ).addError(InternalServerError, { status: 500 })
492
+ ).add(
493
+ HttpApiEndpoint.post("processRenewals", "/process-renewals").addSuccess(
494
+ Schema.Struct({
495
+ message: Schema.String,
496
+ emails_sent: Schema.Number
497
+ })
498
+ ).addError(InternalServerError, { status: 500 })
499
+ ).add(
500
+ HttpApiEndpoint.post("processGracePeriod", "/process-grace-period").addSuccess(
501
+ Schema.Struct({
502
+ message: Schema.String,
503
+ marked_past_due: Schema.Number
504
+ })
505
+ ).addError(InternalServerError, { status: 500 })
506
+ ).prefix("/v1/automation").middleware(CronSecurity);
507
+ var TokensGroup = HttpApiGroup.make("tokens").add(
508
+ HttpApiEndpoint.post("create", "/").addSuccess(
509
+ Schema.Struct({
510
+ ...Token.fields,
511
+ token: Schema.String
512
+ })
513
+ ).setPayload(
514
+ Schema.Struct({
515
+ name: Schema.String,
516
+ scopes: Schema.optionalWith(Schema.Array(Schema.String), {
517
+ default: () => []
518
+ }),
519
+ expires_in_days: Schema.optional(Schema.Number)
520
+ })
521
+ ).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
522
+ ).add(
523
+ HttpApiEndpoint.get("list", "/").addSuccess(Schema.Array(Token)).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
524
+ ).add(
525
+ HttpApiEndpoint.del("delete", "/:id").setPath(Schema.Struct({ id: TokenId })).addSuccess(Schema.Null).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 })
526
+ ).prefix("/v1/tokens").middleware(UserSecurity);
527
+ var ProjectsGroup = HttpApiGroup.make("projects").add(
528
+ HttpApiEndpoint.get("list", "/").addSuccess(Schema.Array(Project)).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
529
+ ).add(
530
+ HttpApiEndpoint.post("upgrade", "/:id/upgrade").addSuccess(Project).setPath(Schema.Struct({ id: ProjectId })).setPayload(Schema.Struct({ tier: Schema.Literal("pro", "enterprise") })).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
531
+ ).prefix("/v1/projects").middleware(UserSecurity);
532
+ var PaymentCallbackQueryParams = Schema.Struct({
533
+ payment_id: Schema.optional(Schema.String),
534
+ data: Schema.optional(Schema.String),
535
+ pidx: Schema.optional(Schema.String),
536
+ /** HamroPay-specific: the gateway's own transactionId returned on callback. */
537
+ ref_id: Schema.optional(Schema.String),
538
+ /** Supabase Auth: access_token and refresh_token can be in the fragment or query */
539
+ access_token: Schema.optional(Schema.String),
540
+ refresh_token: Schema.optional(Schema.String),
541
+ code: Schema.optional(Schema.String)
542
+ });
543
+ var CallbacksGroup = HttpApiGroup.make("callbacks").add(
544
+ HttpApiEndpoint.get("handle", "/:provider").addSuccess(Schema.Any).setPath(Schema.Struct({ provider: Schema.String })).setUrlParams(PaymentCallbackQueryParams).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
545
+ ).prefix("/v1/callback");
546
+ var AuthCallbackQueryParams = Schema.Struct({
547
+ code: Schema.optional(Schema.String),
548
+ next: Schema.optional(Schema.String)
549
+ });
550
+ var AuthGroup = HttpApiGroup.make("auth").add(
551
+ HttpApiEndpoint.post("callback", "/callback").addSuccess(Schema.Any).setUrlParams(AuthCallbackQueryParams).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
552
+ ).prefix("/auth");
553
+ var RealtimeGroup = HttpApiGroup.make("realtime").add(
554
+ HttpApiEndpoint.get("connect", "/").addSuccess(Schema.Any).setUrlParams(Schema.Struct({ token: Schema.String })).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
555
+ ).add(
556
+ HttpApiEndpoint.post("trigger", "/trigger").addSuccess(
557
+ Schema.Struct({
558
+ status: Schema.String,
559
+ event: Schema.optional(Schema.String)
560
+ })
561
+ ).setPayload(RealtimeTriggerPayload).setUrlParams(Schema.Struct({ token: Schema.optional(Schema.String) })).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
562
+ ).prefix("/v1/realtime");
563
+ var MandatesGroup = HttpApiGroup.make("mandates").add(
564
+ HttpApiEndpoint.post("registerIntent", "/intent").addSuccess(Mandate, { status: 201 }).setPayload(
565
+ Schema.Struct({
566
+ principal_id: Schema.String,
567
+ max_amount: Schema.Number,
568
+ currency: Schema.String,
569
+ valid_until: Timestamp,
570
+ permitted_vendors: Schema.optional(Schema.Array(Schema.String)),
571
+ credential_jwt: Schema.String,
572
+ public_key: Schema.String,
573
+ customer_id: Schema.optional(CustomerId)
574
+ })
575
+ ).addError(AuthenticationError, { status: 401 }).addError(IndustrialError, { status: 400 })
576
+ ).add(
577
+ HttpApiEndpoint.get("retrieve", "/:id").addSuccess(Mandate).setPath(Schema.Struct({ id: MandateId })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 })
578
+ ).prefix("/v1/mandates").middleware(SecurityMiddleware);
579
+ var SandboxGroup = HttpApiGroup.make("sandbox").add(
580
+ HttpApiEndpoint.post("init", "/init").addSuccess(
581
+ Schema.Struct({
582
+ projectId: Schema.String,
583
+ apiKey: Schema.optional(Schema.String),
584
+ expiresAt: Timestamp,
585
+ session: Schema.optional(
586
+ Schema.Struct({
587
+ access_token: Schema.String,
588
+ refresh_token: Schema.String
589
+ })
590
+ )
591
+ })
592
+ ).addError(InternalServerError, { status: 500 })
593
+ ).prefix("/v1/sandbox").middleware(UserSecurity);
594
+ var DiscoveryGroup = HttpApiGroup.make("discovery").add(
595
+ HttpApiEndpoint.get("agentCard", "/agent.json").addSuccess(Schema.Any).addError(InternalServerError, { status: 500 })
596
+ ).prefix("/.well-known");
597
+ var SigningKeysGroup = HttpApiGroup.make("signingKeys").add(
598
+ HttpApiEndpoint.post("generate", "/").addSuccess(
599
+ Schema.Struct({
600
+ id: Schema.String,
601
+ publicKey: Schema.String,
602
+ privateKey: Schema.String,
603
+ algorithm: Schema.String,
604
+ createdAt: Timestamp
605
+ }),
606
+ { status: 201 }
607
+ ).setPath(Schema.Struct({ id: ProjectId })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 })
608
+ ).add(
609
+ HttpApiEndpoint.get("get", "/").addSuccess(
610
+ Schema.Struct({
611
+ id: Schema.String,
612
+ publicKey: Schema.String,
613
+ algorithm: Schema.String,
614
+ createdAt: Timestamp
615
+ })
616
+ ).setPath(Schema.Struct({ id: ProjectId })).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 })
617
+ ).prefix("/v1/projects/:id/signing-keys").middleware(UserSecurity);
618
+ var PayArkApi = HttpApi.make("PayArkApi").add(CheckoutGroup).add(PaymentsGroup).add(CustomersGroup).add(SubscriptionsGroup).add(AutomationGroup).add(TokensGroup).add(ProjectsGroup).add(CallbacksGroup).add(AuthGroup).add(MandatesGroup).add(DiscoveryGroup).add(RealtimeGroup).add(SandboxGroup).add(SigningKeysGroup).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(MandateViolationError, { status: 403 }).addError(MandateExpiredError, { status: 410 }).addError(ConflictError, { status: 409 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 });
619
+
620
+ export { AuthCallbackQueryParams, AuthContext, AuthGroup, AuthenticationError, AutomationGroup, CallbacksGroup, CheckoutGroup, ConflictError, CronSecurity, CustomersGroup, DiscoveryGroup, IndustrialError, InternalServerError, MandateExpiredError, MandateViolationError, MandatesGroup, NotFoundError, PayArkApi, PaymentCallbackQueryParams, PaymentsGroup, ProjectsGroup, RealtimeGroup, SandboxGroup, SecurityMiddleware, SigningKeysGroup, SubscriptionsGroup, TokensGroup, UserSecurity };
621
+ //# sourceMappingURL=api-spec.mjs.map
622
+ //# sourceMappingURL=api-spec.mjs.map