@deiondz/better-auth-razorpay 2.0.7 → 2.0.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.
@@ -3,8 +3,8 @@ import * as _tanstack_react_query from '@tanstack/react-query';
3
3
  import { UseMutationOptions, UseQueryOptions } from '@tanstack/react-query';
4
4
  import * as react from 'react';
5
5
  import { ReactNode } from 'react';
6
- import { h as RazorpayAuthClient, d as CancelSubscriptionResponse, c as CancelSubscriptionInput, b as CreateOrUpdateSubscriptionResponse, C as CreateOrUpdateSubscriptionInput, P as PlanSummary, f as RestoreSubscriptionResponse, e as RestoreSubscriptionInput, a as ListSubscriptionsResponse, g as VerifyPaymentResponse, V as VerifyPaymentInput, L as ListSubscriptionsInput } from '../types-JYoruGio.js';
7
- export { G as GetPlansResponse, i as RazorpayApiError, R as RazorpayApiResult, j as RazorpayClientActions } from '../types-JYoruGio.js';
6
+ import { c as RazorpayAuthClient, d as CancelSubscriptionResponse, a as CancelSubscriptionInput, e as CreateOrUpdateSubscriptionResponse, C as CreateOrUpdateSubscriptionInput, P as PlanSummary, f as RestoreSubscriptionResponse, b as RestoreSubscriptionInput, g as ListSubscriptionsResponse, h as VerifyPaymentResponse, V as VerifyPaymentInput, L as ListSubscriptionsInput } from '../types-C0_Sreb6.js';
7
+ export { G as GetPlansResponse, i as RazorpayApiError, R as RazorpayApiResult, j as RazorpayClientActions } from '../types-C0_Sreb6.js';
8
8
  import 'razorpay';
9
9
 
10
10
  /** Context holding the Razorpay-capable auth client. Default is null. */
package/dist/client.d.ts CHANGED
@@ -1,8 +1,8 @@
1
+ import { S as SubscriptionRecord } from './types-B25gyPpX.js';
1
2
  import { razorpayPlugin } from './index.js';
2
- import { R as RazorpayApiResult, P as PlanSummary, L as ListSubscriptionsInput, a as ListSubscriptionsResponse, C as CreateOrUpdateSubscriptionInput, b as CreateOrUpdateSubscriptionResponse, c as CancelSubscriptionInput, d as CancelSubscriptionResponse, e as RestoreSubscriptionInput, f as RestoreSubscriptionResponse, V as VerifyPaymentInput, g as VerifyPaymentResponse } from './types-JYoruGio.js';
3
- import 'better-auth';
4
- import './types-B25gyPpX.js';
3
+ import { R as RazorpayApiResult, P as PlanSummary, L as ListSubscriptionsInput, C as CreateOrUpdateSubscriptionInput, a as CancelSubscriptionInput, b as RestoreSubscriptionInput, V as VerifyPaymentInput } from './types-C0_Sreb6.js';
5
4
  import 'razorpay';
5
+ import 'better-auth';
6
6
 
7
7
  type FetchFn = (path: string, options?: {
8
8
  method?: string;
@@ -12,6 +12,7 @@ type FetchFn = (path: string, options?: {
12
12
  /**
13
13
  * Razorpay client plugin for Better Auth.
14
14
  * Exposes authClient.razorpay.* so requests use the correct paths and avoid 404s from api.get/post.
15
+ * Unwraps Better Auth's { data, error } so callers get the API body shape ({ success, data } / { success: false, error }).
15
16
  * Add to createAuthClient: plugins: [razorpayClientPlugin()]
16
17
  */
17
18
  declare const razorpayClientPlugin: () => {
@@ -20,11 +21,28 @@ declare const razorpayClientPlugin: () => {
20
21
  getActions: ($fetch: FetchFn) => {
21
22
  razorpay: {
22
23
  getPlans: (fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<PlanSummary[]>>;
23
- listSubscriptions: (input?: ListSubscriptionsInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<ListSubscriptionsResponse["data"]>>;
24
- createOrUpdateSubscription: (input: CreateOrUpdateSubscriptionInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<CreateOrUpdateSubscriptionResponse["data"]>>;
25
- cancelSubscription: (input: CancelSubscriptionInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<CancelSubscriptionResponse["data"]>>;
26
- restoreSubscription: (input: RestoreSubscriptionInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<RestoreSubscriptionResponse["data"]>>;
27
- verifyPayment: (input: VerifyPaymentInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<VerifyPaymentResponse["data"]>>;
24
+ listSubscriptions: (input?: ListSubscriptionsInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<SubscriptionRecord[]>>;
25
+ createOrUpdateSubscription: (input: CreateOrUpdateSubscriptionInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<{
26
+ checkoutUrl: string;
27
+ subscriptionId: string;
28
+ razorpaySubscriptionId: string;
29
+ }>>;
30
+ cancelSubscription: (input: CancelSubscriptionInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<{
31
+ id: string;
32
+ status: string;
33
+ plan_id: string;
34
+ current_end?: number;
35
+ ended_at?: number | null;
36
+ }>>;
37
+ restoreSubscription: (input: RestoreSubscriptionInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<{
38
+ id: string;
39
+ status: string;
40
+ }>>;
41
+ verifyPayment: (input: VerifyPaymentInput, fetchOptions?: Parameters<FetchFn>[1]) => Promise<RazorpayApiResult<{
42
+ message: string;
43
+ payment_id: string;
44
+ subscription_id: string;
45
+ }>>;
28
46
  };
29
47
  };
30
48
  };
package/dist/client.js CHANGED
@@ -9,37 +9,55 @@ var PATHS = {
9
9
  restoreSubscription: "/razorpay/subscription/restore",
10
10
  verifyPayment: "/razorpay/verify-payment"
11
11
  };
12
+ function unwrapBetterFetch(res) {
13
+ if (res != null && typeof res === "object" && "data" in res && res.error == null) {
14
+ return res.data;
15
+ }
16
+ return res;
17
+ }
12
18
  var razorpayClientPlugin = () => ({
13
19
  id: "razorpay-plugin",
14
20
  $InferServerPlugin: {},
15
21
  getActions: ($fetch) => ({
16
22
  razorpay: {
17
- getPlans: (fetchOptions) => $fetch(PATHS.getPlans, { method: "GET", ...fetchOptions }),
18
- listSubscriptions: (input, fetchOptions) => $fetch(PATHS.listSubscriptions, {
19
- method: "GET",
20
- query: input?.referenceId ? { referenceId: input.referenceId } : void 0,
21
- ...fetchOptions
22
- }),
23
- createOrUpdateSubscription: (input, fetchOptions) => $fetch(PATHS.createOrUpdateSubscription, {
24
- method: "POST",
25
- body: input,
26
- ...fetchOptions
27
- }),
28
- cancelSubscription: (input, fetchOptions) => $fetch(PATHS.cancelSubscription, {
29
- method: "POST",
30
- body: input,
31
- ...fetchOptions
32
- }),
33
- restoreSubscription: (input, fetchOptions) => $fetch(PATHS.restoreSubscription, {
34
- method: "POST",
35
- body: input,
36
- ...fetchOptions
37
- }),
38
- verifyPayment: (input, fetchOptions) => $fetch(PATHS.verifyPayment, {
39
- method: "POST",
40
- body: input,
41
- ...fetchOptions
42
- })
23
+ getPlans: async (fetchOptions) => unwrapBetterFetch(
24
+ await $fetch(PATHS.getPlans, { method: "GET", ...fetchOptions })
25
+ ),
26
+ listSubscriptions: async (input, fetchOptions) => unwrapBetterFetch(
27
+ await $fetch(PATHS.listSubscriptions, {
28
+ method: "GET",
29
+ query: input?.referenceId ? { referenceId: input.referenceId } : void 0,
30
+ ...fetchOptions
31
+ })
32
+ ),
33
+ createOrUpdateSubscription: async (input, fetchOptions) => unwrapBetterFetch(
34
+ await $fetch(PATHS.createOrUpdateSubscription, {
35
+ method: "POST",
36
+ body: input,
37
+ ...fetchOptions
38
+ })
39
+ ),
40
+ cancelSubscription: async (input, fetchOptions) => unwrapBetterFetch(
41
+ await $fetch(PATHS.cancelSubscription, {
42
+ method: "POST",
43
+ body: input,
44
+ ...fetchOptions
45
+ })
46
+ ),
47
+ restoreSubscription: async (input, fetchOptions) => unwrapBetterFetch(
48
+ await $fetch(PATHS.restoreSubscription, {
49
+ method: "POST",
50
+ body: input,
51
+ ...fetchOptions
52
+ })
53
+ ),
54
+ verifyPayment: async (input, fetchOptions) => unwrapBetterFetch(
55
+ await $fetch(PATHS.verifyPayment, {
56
+ method: "POST",
57
+ body: input,
58
+ ...fetchOptions
59
+ })
60
+ )
43
61
  }
44
62
  })
45
63
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from 'better-auth/client'\r\nimport type { razorpayPlugin } from './index'\r\nimport type {\r\n PlanSummary,\r\n CreateOrUpdateSubscriptionInput,\r\n CancelSubscriptionInput,\r\n RestoreSubscriptionInput,\r\n ListSubscriptionsInput,\r\n VerifyPaymentInput,\r\n ListSubscriptionsResponse,\r\n CreateOrUpdateSubscriptionResponse,\r\n CancelSubscriptionResponse,\r\n RestoreSubscriptionResponse,\r\n VerifyPaymentResponse,\r\n RazorpayApiResult,\r\n} from './client/types'\r\n\r\ntype FetchFn = (\r\n path: string,\r\n options?: {\r\n method?: string\r\n body?: Record<string, unknown>\r\n query?: Record<string, string>\r\n }\r\n) => Promise<RazorpayApiResult<unknown>>\r\n\r\nconst PATHS = {\r\n getPlans: '/razorpay/get-plans',\r\n listSubscriptions: '/razorpay/subscription/list',\r\n createOrUpdateSubscription: '/razorpay/subscription/create-or-update',\r\n cancelSubscription: '/razorpay/subscription/cancel',\r\n restoreSubscription: '/razorpay/subscription/restore',\r\n verifyPayment: '/razorpay/verify-payment',\r\n} as const\r\n\r\n/**\r\n * Razorpay client plugin for Better Auth.\r\n * Exposes authClient.razorpay.* so requests use the correct paths and avoid 404s from api.get/post.\r\n * Add to createAuthClient: plugins: [razorpayClientPlugin()]\r\n */\r\nexport const razorpayClientPlugin = () =>\r\n ({\r\n id: 'razorpay-plugin',\r\n $InferServerPlugin: {} as ReturnType<typeof razorpayPlugin>,\r\n getActions: ($fetch: FetchFn) => ({\r\n razorpay: {\r\n getPlans: (fetchOptions?: Parameters<FetchFn>[1]) =>\r\n $fetch(PATHS.getPlans, { method: 'GET', ...fetchOptions }) as Promise<\r\n RazorpayApiResult<PlanSummary[]>\r\n >,\r\n\r\n listSubscriptions: (\r\n input?: ListSubscriptionsInput,\r\n fetchOptions?: Parameters<FetchFn>[1]\r\n ) =>\r\n $fetch(PATHS.listSubscriptions, {\r\n method: 'GET',\r\n query: input?.referenceId ? { referenceId: input.referenceId } : undefined,\r\n ...fetchOptions,\r\n }) as Promise<RazorpayApiResult<ListSubscriptionsResponse['data']>>,\r\n\r\n createOrUpdateSubscription: (\r\n input: CreateOrUpdateSubscriptionInput,\r\n fetchOptions?: Parameters<FetchFn>[1]\r\n ) =>\r\n $fetch(PATHS.createOrUpdateSubscription, {\r\n method: 'POST',\r\n body: input as unknown as Record<string, unknown>,\r\n ...fetchOptions,\r\n }) as Promise<\r\n RazorpayApiResult<CreateOrUpdateSubscriptionResponse['data']>\r\n >,\r\n\r\n cancelSubscription: (\r\n input: CancelSubscriptionInput,\r\n fetchOptions?: Parameters<FetchFn>[1]\r\n ) =>\r\n $fetch(PATHS.cancelSubscription, {\r\n method: 'POST',\r\n body: input as unknown as Record<string, unknown>,\r\n ...fetchOptions,\r\n }) as Promise<RazorpayApiResult<CancelSubscriptionResponse['data']>>,\r\n\r\n restoreSubscription: (\r\n input: RestoreSubscriptionInput,\r\n fetchOptions?: Parameters<FetchFn>[1]\r\n ) =>\r\n $fetch(PATHS.restoreSubscription, {\r\n method: 'POST',\r\n body: input as unknown as Record<string, unknown>,\r\n ...fetchOptions,\r\n }) as Promise<RazorpayApiResult<RestoreSubscriptionResponse['data']>>,\r\n\r\n verifyPayment: (\r\n input: VerifyPaymentInput,\r\n fetchOptions?: Parameters<FetchFn>[1]\r\n ) =>\r\n $fetch(PATHS.verifyPayment, {\r\n method: 'POST',\r\n body: input as unknown as Record<string, unknown>,\r\n ...fetchOptions,\r\n }) as Promise<RazorpayApiResult<VerifyPaymentResponse['data']>>,\r\n },\r\n }),\r\n }) satisfies BetterAuthClientPlugin\r\n"],"mappings":";;;AA0BA,IAAM,QAAQ;AAAA,EACZ,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,eAAe;AACjB;AAOO,IAAM,uBAAuB,OACjC;AAAA,EACC,IAAI;AAAA,EACJ,oBAAoB,CAAC;AAAA,EACrB,YAAY,CAAC,YAAqB;AAAA,IAChC,UAAU;AAAA,MACR,UAAU,CAAC,iBACT,OAAO,MAAM,UAAU,EAAE,QAAQ,OAAO,GAAG,aAAa,CAAC;AAAA,MAI3D,mBAAmB,CACjB,OACA,iBAEA,OAAO,MAAM,mBAAmB;AAAA,QAC9B,QAAQ;AAAA,QACR,OAAO,OAAO,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI;AAAA,QACjE,GAAG;AAAA,MACL,CAAC;AAAA,MAEH,4BAA4B,CAC1B,OACA,iBAEA,OAAO,MAAM,4BAA4B;AAAA,QACvC,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,GAAG;AAAA,MACL,CAAC;AAAA,MAIH,oBAAoB,CAClB,OACA,iBAEA,OAAO,MAAM,oBAAoB;AAAA,QAC/B,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,GAAG;AAAA,MACL,CAAC;AAAA,MAEH,qBAAqB,CACnB,OACA,iBAEA,OAAO,MAAM,qBAAqB;AAAA,QAChC,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,GAAG;AAAA,MACL,CAAC;AAAA,MAEH,eAAe,CACb,OACA,iBAEA,OAAO,MAAM,eAAe;AAAA,QAC1B,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,GAAG;AAAA,MACL,CAAC;AAAA,IACL;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from 'better-auth/client'\nimport type { razorpayPlugin } from './index'\nimport type {\n PlanSummary,\n CreateOrUpdateSubscriptionInput,\n CancelSubscriptionInput,\n RestoreSubscriptionInput,\n ListSubscriptionsInput,\n VerifyPaymentInput,\n ListSubscriptionsResponse,\n CreateOrUpdateSubscriptionResponse,\n CancelSubscriptionResponse,\n RestoreSubscriptionResponse,\n VerifyPaymentResponse,\n RazorpayApiResult,\n} from './client/types'\n\ntype FetchFn = (\n path: string,\n options?: {\n method?: string\n body?: Record<string, unknown>\n query?: Record<string, string>\n }\n) => Promise<RazorpayApiResult<unknown>>\n\nconst PATHS = {\n getPlans: '/razorpay/get-plans',\n listSubscriptions: '/razorpay/subscription/list',\n createOrUpdateSubscription: '/razorpay/subscription/create-or-update',\n cancelSubscription: '/razorpay/subscription/cancel',\n restoreSubscription: '/razorpay/subscription/restore',\n verifyPayment: '/razorpay/verify-payment',\n} as const\n\n/**\n * Unwrap Better Auth $fetch result { data, error } into the API body.\n * Success: return res.data (API body: { success, data }).\n * Otherwise return res so errors and non–Better Fetch responses propagate.\n */\nfunction unwrapBetterFetch<T>(res: unknown): T {\n if (\n res != null &&\n typeof res === 'object' &&\n 'data' in res &&\n (res as { error?: unknown }).error == null\n ) {\n return (res as { data: T }).data\n }\n return res as T\n}\n\n/**\n * Razorpay client plugin for Better Auth.\n * Exposes authClient.razorpay.* so requests use the correct paths and avoid 404s from api.get/post.\n * Unwraps Better Auth's { data, error } so callers get the API body shape ({ success, data } / { success: false, error }).\n * Add to createAuthClient: plugins: [razorpayClientPlugin()]\n */\nexport const razorpayClientPlugin = () =>\n ({\n id: 'razorpay-plugin',\n $InferServerPlugin: {} as ReturnType<typeof razorpayPlugin>,\n getActions: ($fetch: FetchFn) => ({\n razorpay: {\n getPlans: async (fetchOptions?: Parameters<FetchFn>[1]) =>\n unwrapBetterFetch<RazorpayApiResult<PlanSummary[]>>(\n await $fetch(PATHS.getPlans, { method: 'GET', ...fetchOptions })\n ),\n\n listSubscriptions: async (\n input?: ListSubscriptionsInput,\n fetchOptions?: Parameters<FetchFn>[1]\n ) =>\n unwrapBetterFetch<RazorpayApiResult<ListSubscriptionsResponse['data']>>(\n await $fetch(PATHS.listSubscriptions, {\n method: 'GET',\n query: input?.referenceId ? { referenceId: input.referenceId } : undefined,\n ...fetchOptions,\n })\n ),\n\n createOrUpdateSubscription: async (\n input: CreateOrUpdateSubscriptionInput,\n fetchOptions?: Parameters<FetchFn>[1]\n ) =>\n unwrapBetterFetch<\n RazorpayApiResult<CreateOrUpdateSubscriptionResponse['data']>\n >(\n await $fetch(PATHS.createOrUpdateSubscription, {\n method: 'POST',\n body: input as unknown as Record<string, unknown>,\n ...fetchOptions,\n })\n ),\n\n cancelSubscription: async (\n input: CancelSubscriptionInput,\n fetchOptions?: Parameters<FetchFn>[1]\n ) =>\n unwrapBetterFetch<RazorpayApiResult<CancelSubscriptionResponse['data']>>(\n await $fetch(PATHS.cancelSubscription, {\n method: 'POST',\n body: input as unknown as Record<string, unknown>,\n ...fetchOptions,\n })\n ),\n\n restoreSubscription: async (\n input: RestoreSubscriptionInput,\n fetchOptions?: Parameters<FetchFn>[1]\n ) =>\n unwrapBetterFetch<RazorpayApiResult<RestoreSubscriptionResponse['data']>>(\n await $fetch(PATHS.restoreSubscription, {\n method: 'POST',\n body: input as unknown as Record<string, unknown>,\n ...fetchOptions,\n })\n ),\n\n verifyPayment: async (\n input: VerifyPaymentInput,\n fetchOptions?: Parameters<FetchFn>[1]\n ) =>\n unwrapBetterFetch<RazorpayApiResult<VerifyPaymentResponse['data']>>(\n await $fetch(PATHS.verifyPayment, {\n method: 'POST',\n body: input as unknown as Record<string, unknown>,\n ...fetchOptions,\n })\n ),\n },\n }),\n }) satisfies BetterAuthClientPlugin\n"],"mappings":";;;AA0BA,IAAM,QAAQ;AAAA,EACZ,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,eAAe;AACjB;AAOA,SAAS,kBAAqB,KAAiB;AAC7C,MACE,OAAO,QACP,OAAO,QAAQ,YACf,UAAU,OACT,IAA4B,SAAS,MACtC;AACA,WAAQ,IAAoB;AAAA,EAC9B;AACA,SAAO;AACT;AAQO,IAAM,uBAAuB,OACjC;AAAA,EACC,IAAI;AAAA,EACJ,oBAAoB,CAAC;AAAA,EACrB,YAAY,CAAC,YAAqB;AAAA,IAChC,UAAU;AAAA,MACR,UAAU,OAAO,iBACf;AAAA,QACE,MAAM,OAAO,MAAM,UAAU,EAAE,QAAQ,OAAO,GAAG,aAAa,CAAC;AAAA,MACjE;AAAA,MAEF,mBAAmB,OACjB,OACA,iBAEA;AAAA,QACE,MAAM,OAAO,MAAM,mBAAmB;AAAA,UACpC,QAAQ;AAAA,UACR,OAAO,OAAO,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI;AAAA,UACjE,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,MAEF,4BAA4B,OAC1B,OACA,iBAEA;AAAA,QAGE,MAAM,OAAO,MAAM,4BAA4B;AAAA,UAC7C,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,MAEF,oBAAoB,OAClB,OACA,iBAEA;AAAA,QACE,MAAM,OAAO,MAAM,oBAAoB;AAAA,UACrC,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,MAEF,qBAAqB,OACnB,OACA,iBAEA;AAAA,QACE,MAAM,OAAO,MAAM,qBAAqB;AAAA,UACtC,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,MAEF,eAAe,OACb,OACA,iBAEA;AAAA,QACE,MAAM,OAAO,MAAM,eAAe;AAAA,UAChC,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACJ;AAAA,EACF;AACF;","names":[]}
package/dist/index.js CHANGED
@@ -4077,14 +4077,20 @@ function handleRazorpayError(error) {
4077
4077
  }
4078
4078
  };
4079
4079
  }
4080
- if ("error" in errorObj) {
4081
- const razorpayError = errorObj;
4080
+ const axiosData = errorObj.response?.data;
4081
+ const directError = "error" in errorObj ? errorObj.error : null;
4082
+ const razorpayPayload = axiosData?.error ?? directError;
4083
+ if (razorpayPayload && typeof razorpayPayload === "object") {
4084
+ const rp = razorpayPayload;
4085
+ const code = rp?.code && String(rp.code).trim() ? rp.code : "RAZORPAY_ERROR";
4086
+ const desc = rp?.description && String(rp.description).trim();
4087
+ const field = rp?.field != null && String(rp.field).trim() ? rp.field : null;
4088
+ const reason = rp?.reason && String(rp.reason).trim() ? rp.reason : null;
4089
+ const step = rp?.step && String(rp.step).trim() ? rp.step : null;
4090
+ const description = desc || (field ? `Razorpay error: ${field}` : null) || (reason ? `Razorpay: ${reason}` : null) || (step ? `Razorpay error at step: ${step}` : null) || "Razorpay request failed";
4082
4091
  return {
4083
4092
  success: false,
4084
- error: {
4085
- code: razorpayError.error?.code || "RAZORPAY_ERROR",
4086
- description: razorpayError.error?.description || razorpayError.error?.field ? `Razorpay error: ${razorpayError.error.field}` : "Razorpay request failed"
4087
- }
4093
+ error: { code, description }
4088
4094
  };
4089
4095
  }
4090
4096
  if ("message" in errorObj && typeof errorObj.message === "string") {