@payark/sdk-effect 0.1.6 → 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.
package/dist/api-spec.mjs CHANGED
@@ -10,11 +10,17 @@ var UrlString = Schema.String.pipe(
10
10
  Schema.pattern(/^https?:\/\/.+/),
11
11
  Schema.brand("UrlString")
12
12
  );
13
- var MinorUnitsInt = Schema.Number.pipe(
13
+ Schema.Number.pipe(
14
14
  Schema.int(),
15
15
  Schema.greaterThan(0),
16
16
  Schema.brand("MinorUnitsInt")
17
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
+ );
18
24
 
19
25
  // src/schemas.ts
20
26
  var Id = Schema.String.pipe(Schema.brand("Id"));
@@ -26,6 +32,10 @@ var CheckoutSessionId = Schema.String.pipe(
26
32
  var SubscriptionId = Schema.String.pipe(
27
33
  Schema.brand("SubscriptionId")
28
34
  );
35
+ var MandateId = Schema.String.pipe(Schema.brand("MandateId"));
36
+ var AgentSessionId = Schema.String.pipe(
37
+ Schema.brand("AgentSessionId")
38
+ );
29
39
  var CustomerId = Schema.String.pipe(Schema.brand("CustomerId"));
30
40
  var TokenId = Schema.String.pipe(Schema.brand("TokenId"));
31
41
  var Email = Schema.String.pipe(
@@ -44,6 +54,7 @@ Schema.Struct({
44
54
  var Provider = Schema.Literal(
45
55
  "esewa",
46
56
  "khalti",
57
+ "hamropay",
47
58
  "connectips",
48
59
  "imepay",
49
60
  "fonepay",
@@ -51,12 +62,27 @@ var Provider = Schema.Literal(
51
62
  );
52
63
  var PaymentStatus = Schema.Literal("pending", "success", "failed");
53
64
  var SubscriptionStatus = Schema.Literal(
65
+ "pending_checkout",
54
66
  "active",
55
67
  "past_due",
56
68
  "canceled",
57
69
  "paused"
58
70
  );
59
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
+ );
60
86
  var Customer = Schema.Struct({
61
87
  id: CustomerId,
62
88
  merchant_customer_id: NonEmptyString,
@@ -65,12 +91,18 @@ var Customer = Schema.Struct({
65
91
  phone: Schema.NullOr(Schema.String),
66
92
  project_id: ProjectId,
67
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),
68
99
  created_at: Timestamp,
69
100
  updated_at: Schema.optional(Timestamp)
70
101
  });
71
102
  var Payment = Schema.Struct({
72
103
  id: PaymentId,
73
104
  project_id: ProjectId,
105
+ customer_id: Schema.optional(Schema.NullOr(CustomerId)),
74
106
  amount: Schema.Number,
75
107
  currency: Schema.String,
76
108
  status: PaymentStatus,
@@ -92,7 +124,9 @@ var Subscription = Schema.Struct({
92
124
  current_period_start: Timestamp,
93
125
  current_period_end: Timestamp,
94
126
  payment_link: UrlString,
127
+ customer_email: Schema.optional(Schema.NullOr(Schema.String)),
95
128
  auto_send_link: Schema.Boolean,
129
+ grace_days: Schema.optional(Schema.Number),
96
130
  metadata: Schema.optional(Schema.NullOr(Metadata)),
97
131
  canceled_at: Schema.optional(Schema.NullOr(Timestamp)),
98
132
  created_at: Timestamp,
@@ -102,6 +136,13 @@ var Project = Schema.Struct({
102
136
  id: ProjectId,
103
137
  name: NonEmptyString,
104
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)),
105
146
  created_at: Timestamp
106
147
  });
107
148
  var Token = Schema.Struct({
@@ -112,6 +153,38 @@ var Token = Schema.Struct({
112
153
  expires_at: Schema.NullOr(Timestamp),
113
154
  created_at: Timestamp
114
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
+ });
115
188
  var PaginationMeta = Schema.Struct({
116
189
  total: Schema.NullOr(Schema.Number),
117
190
  limit: Schema.Number,
@@ -125,6 +198,8 @@ var WebhookEventType = Schema.Literal(
125
198
  "payment.success",
126
199
  "payment.failed",
127
200
  "subscription.created",
201
+ "subscription.activated",
202
+ "subscription.renewed",
128
203
  "subscription.payment_succeeded",
129
204
  "subscription.payment_failed",
130
205
  "subscription.renewal_due",
@@ -149,13 +224,15 @@ Schema.Struct({
149
224
  created: Schema.optional(Schema.Number)
150
225
  });
151
226
  var CreateCheckoutParams = Schema.Struct({
152
- amount: Schema.optional(MinorUnitsInt),
227
+ amount: Schema.optional(NprAmount),
153
228
  currency: Schema.optionalWith(Schema.String, { default: () => "NPR" }),
154
229
  provider: Provider,
155
230
  returnUrl: UrlString,
156
231
  cancelUrl: Schema.optional(UrlString),
157
232
  metadata: Schema.optional(Metadata),
158
- subscriptionId: Schema.optional(SubscriptionId)
233
+ subscriptionId: Schema.optional(SubscriptionId),
234
+ customerId: Schema.optional(CustomerId),
235
+ mandate_id: Schema.optional(MandateId)
159
236
  }).pipe(
160
237
  Schema.filter((data) => {
161
238
  if (!data.subscriptionId && !data.amount) {
@@ -167,6 +244,7 @@ var CreateCheckoutParams = Schema.Struct({
167
244
  var CheckoutSession = Schema.Struct({
168
245
  id: CheckoutSessionId,
169
246
  checkout_url: UrlString,
247
+ qr_string: Schema.optional(Schema.String),
170
248
  payment_method: Schema.Struct({
171
249
  type: Provider,
172
250
  url: Schema.optional(UrlString),
@@ -200,22 +278,27 @@ var UpdateCustomerParams = Schema.Struct({
200
278
  email: Schema.optional(Email),
201
279
  name: Schema.optional(NonEmptyString),
202
280
  phone: Schema.optional(Schema.String),
281
+ tier: Schema.optional(Schema.String),
282
+ merchant_customer_id: Schema.optional(Schema.String),
203
283
  metadata: Schema.optional(Metadata)
204
284
  });
205
285
  var CreateSubscriptionParams = Schema.Struct({
206
286
  customer_id: CustomerId,
207
- amount: MinorUnitsInt,
287
+ amount: NprAmount,
208
288
  currency: Schema.optionalWith(Schema.String, { default: () => "NPR" }),
209
289
  interval: SubscriptionInterval,
210
290
  interval_count: Schema.optional(Schema.Number),
211
291
  project_id: Schema.optional(ProjectId),
292
+ customer_email: Schema.optional(Schema.String),
212
293
  auto_send_link: Schema.optional(Schema.Boolean),
213
294
  metadata: Schema.optional(Metadata)
214
295
  });
215
- var CallbackQueryParams = Schema.Struct({
296
+ Schema.Struct({
216
297
  payment_id: Schema.optional(Schema.String),
217
298
  data: Schema.optional(Schema.String),
218
- pidx: 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)
219
302
  });
220
303
  var ListSubscriptionsParams = Schema.Struct({
221
304
  limit: Schema.optional(Schema.NumberFromString),
@@ -233,7 +316,8 @@ Schema.Struct({
233
316
  baseUrl: Schema.optional(Schema.String),
234
317
  timeout: Schema.optional(Schema.Number),
235
318
  maxRetries: Schema.optional(Schema.Number),
236
- sandbox: Schema.optional(Schema.Boolean)
319
+ sandbox: Schema.optional(Schema.Boolean),
320
+ signingPrivateKey: Schema.optional(Schema.String)
237
321
  });
238
322
  Schema.Struct({
239
323
  error: Schema.String,
@@ -243,21 +327,30 @@ var IndustrialError = class extends Schema.TaggedError()(
243
327
  "IndustrialError",
244
328
  {
245
329
  error: Schema.String,
246
- details: Schema.optional(Schema.Any)
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)
247
334
  }
248
335
  ) {
249
336
  };
250
337
  var AuthenticationError = class extends Schema.TaggedError()(
251
338
  "AuthenticationError",
252
339
  {
253
- error: Schema.String
340
+ error: Schema.String,
341
+ code: Schema.optional(Schema.String),
342
+ doc_url: Schema.optional(Schema.String),
343
+ suggestion: Schema.optional(Schema.String)
254
344
  }
255
345
  ) {
256
346
  };
257
347
  var NotFoundError = class extends Schema.TaggedError()(
258
348
  "NotFoundError",
259
349
  {
260
- error: Schema.String
350
+ error: Schema.String,
351
+ code: Schema.optional(Schema.String),
352
+ doc_url: Schema.optional(Schema.String),
353
+ suggestion: Schema.optional(Schema.String)
261
354
  }
262
355
  ) {
263
356
  };
@@ -265,14 +358,43 @@ var InternalServerError = class extends Schema.TaggedError()(
265
358
  "InternalServerError",
266
359
  {
267
360
  error: Schema.String,
268
- details: Schema.optional(Schema.Any)
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)
269
365
  }
270
366
  ) {
271
367
  };
272
368
  var ConflictError = class extends Schema.TaggedError()(
273
369
  "ConflictError",
274
370
  {
275
- error: Schema.String
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)
276
398
  }
277
399
  ) {
278
400
  };
@@ -363,7 +485,22 @@ var AutomationGroup = HttpApiGroup.make("automation").add(
363
485
  HttpApiEndpoint.post("reaper", "/reaper").addSuccess(
364
486
  Schema.Struct({
365
487
  message: Schema.String,
366
- count: Schema.Number
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
367
504
  })
368
505
  ).addError(InternalServerError, { status: 500 })
369
506
  ).prefix("/v1/automation").middleware(CronSecurity);
@@ -389,10 +526,30 @@ var TokensGroup = HttpApiGroup.make("tokens").add(
389
526
  ).prefix("/v1/tokens").middleware(UserSecurity);
390
527
  var ProjectsGroup = HttpApiGroup.make("projects").add(
391
528
  HttpApiEndpoint.get("list", "/").addSuccess(Schema.Array(Project)).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
392
- ).prefix("/v1/projects").middleware(SecurityMiddleware);
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
+ });
393
543
  var CallbacksGroup = HttpApiGroup.make("callbacks").add(
394
- HttpApiEndpoint.get("handle", "/:provider").addSuccess(Schema.Any).setPath(Schema.Struct({ provider: Schema.String })).setUrlParams(CallbackQueryParams).addError(NotFoundError, { status: 404 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 })
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 })
395
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");
396
553
  var RealtimeGroup = HttpApiGroup.make("realtime").add(
397
554
  HttpApiEndpoint.get("connect", "/").addSuccess(Schema.Any).setUrlParams(Schema.Struct({ token: Schema.String })).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
398
555
  ).add(
@@ -403,8 +560,63 @@ var RealtimeGroup = HttpApiGroup.make("realtime").add(
403
560
  })
404
561
  ).setPayload(RealtimeTriggerPayload).setUrlParams(Schema.Struct({ token: Schema.optional(Schema.String) })).addError(AuthenticationError, { status: 401 }).addError(InternalServerError, { status: 500 })
405
562
  ).prefix("/v1/realtime");
406
- var PayArkApi = HttpApi.make("PayArkApi").add(CheckoutGroup).add(PaymentsGroup).add(CustomersGroup).add(SubscriptionsGroup).add(AutomationGroup).add(TokensGroup).add(ProjectsGroup).add(CallbacksGroup).add(RealtimeGroup).addError(AuthenticationError, { status: 401 }).addError(NotFoundError, { status: 404 }).addError(ConflictError, { status: 409 }).addError(InternalServerError, { status: 500 }).addError(IndustrialError, { status: 400 });
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 });
407
619
 
408
- export { AuthContext, AuthenticationError, AutomationGroup, CallbacksGroup, CheckoutGroup, ConflictError, CronSecurity, CustomersGroup, IndustrialError, InternalServerError, NotFoundError, PayArkApi, PaymentsGroup, ProjectsGroup, RealtimeGroup, SecurityMiddleware, SubscriptionsGroup, TokensGroup, UserSecurity };
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 };
409
621
  //# sourceMappingURL=api-spec.mjs.map
410
622
  //# sourceMappingURL=api-spec.mjs.map