@test-glide/payment-react-native 0.1.0 → 0.1.2

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.
@@ -19,7 +19,7 @@ export const BivoTextInput = ({
19
19
  const [value, setValue] = useState("");
20
20
  const handleChange = text => {
21
21
  let updatedValue;
22
- if (fieldName === "expiryDate") {
22
+ if (fieldName === "exp") {
23
23
  updatedValue = formatExpiry(text);
24
24
  } else {
25
25
  updatedValue = text;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","View","TextInput","Text","StyleSheet","Image","Icons","formatExpiry","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","BivoTextInput","collector","fieldName","placeholder","onStateChange","required","regex","errorMsg","containerStyle","textStyle","value","setValue","handleChange","text","updatedValue","setField","handleBlur","error","errors","style","styles","container","children","onChangeText","onBlur","input","borderColor","errorContainer","source","alert","errorIcon","opacity","create","marginVertical","borderWidth","borderRadius","padding","flexDirection","alignItems","marginTop","minHeight","width","height","marginRight","color","fontSize"],"sourceRoot":"../../../src","sources":["components/BivoTextInput.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","View","TextInput","Text","StyleSheet","Image","Icons","formatExpiry","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","BivoTextInput","collector","fieldName","placeholder","onStateChange","required","regex","errorMsg","containerStyle","textStyle","value","setValue","handleChange","text","updatedValue","setField","handleBlur","error","errors","style","styles","container","children","onChangeText","onBlur","input","borderColor","errorContainer","source","alert","errorIcon","opacity","create","marginVertical","borderWidth","borderRadius","padding","flexDirection","alignItems","marginTop","minHeight","width","height","marginRight","color","fontSize"],"sourceRoot":"../../../src","sources":["components/BivoTextInput.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ import { fetchData } from "../utils/fetch.js";
3
4
  import { formatCardYear, formatString } from "../utils/utils.js";
4
5
  export class BivoCollect {
5
6
  form = {};
@@ -39,20 +40,20 @@ export class BivoCollect {
39
40
 
40
41
  // Default validations
41
42
  switch (fieldName) {
42
- case "cardNumber":
43
+ case "card":
43
44
  {
44
45
  const digits = trimmedValue.replace(/\D/g, "");
45
46
  if (digits.length < 12) return "Invalid card number";
46
47
  break;
47
48
  }
48
- case "cvc":
49
+ case "cvv":
49
50
  {
50
51
  if (!/^\d{3,4}$/.test(trimmedValue)) {
51
- return "Invalid CVC";
52
+ return "Invalid CVV";
52
53
  }
53
54
  break;
54
55
  }
55
- case "expiryDate":
56
+ case "exp":
56
57
  {
57
58
  // Format check MM/YY
58
59
  if (!/^\d{2}\/\d{2}$/.test(trimmedValue)) {
@@ -91,26 +92,35 @@ export class BivoCollect {
91
92
  });
92
93
  }
93
94
  async submit(endpoint, token) {
94
- console.log("Submitting form:", this.form, this.errors);
95
+ // console.log("Submitting form:", this.form, this.errors);
95
96
  const expiry = this.form.expiryDate?.split("/") || [];
96
- const payload = {
97
- token,
98
- pan: formatString(this.form.cardNumber || ""),
99
- expiry_month: Number(expiry[0] || 0),
100
- expiry_year: formatCardYear(expiry[1] || ""),
101
- cvv: this.form.cvc ? formatString(this.form.cvc) : null,
102
- name: this.form.cardHolderName || null
103
- };
104
97
 
105
98
  // Replace fetchData with your API call
106
- const response = await fetch(endpoint, {
99
+ const response = await fetchData(endpoint, {
107
100
  method: "POST",
108
- headers: {
109
- "Content-Type": "application/json"
110
- },
111
- body: JSON.stringify(payload)
101
+ body: {
102
+ token,
103
+ pan: formatString(this.form.cardNumber || ""),
104
+ expiry_month: Number(expiry[0] || 0) || null,
105
+ expiry_year: formatCardYear(expiry[1] || "") || null,
106
+ cvv: this.form.cvc ? formatString(this.form.cvc) : null,
107
+ address: {
108
+ postal_code: this.form.zipCode ? formatString(this.form.zipCode) : null
109
+ }
110
+ }
112
111
  });
113
- return response.json();
112
+ if (response.error) {
113
+ return {
114
+ success: false,
115
+ error: response.error
116
+ };
117
+ } else {
118
+ return {
119
+ success: true,
120
+ data: response.data
121
+ };
122
+ }
123
+ // return response.json();
114
124
  }
115
125
  }
116
126
  //# sourceMappingURL=Collector.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["formatCardYear","formatString","BivoCollect","form","errors","fieldConfig","constructor","vaultId","environment","setField","fieldName","value","onStateChange","required","regex","errorMsg","error","validateField","trimmedValue","trim","test","digits","replace","length","monthStr","yearStr","split","month","parseInt","year","fullYear","now","Date","currentMonth","getMonth","currentYear","getFullYear","isSubmitDisabled","fieldNames","some","submit","endpoint","token","console","log","expiry","expiryDate","payload","pan","cardNumber","expiry_month","Number","expiry_year","cvv","cvc","name","cardHolderName","response","fetch","method","headers","body","JSON","stringify","json"],"sourceRoot":"../../../src","sources":["core/Collector.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["fetchData","formatCardYear","formatString","BivoCollect","form","errors","fieldConfig","constructor","vaultId","environment","setField","fieldName","value","onStateChange","required","regex","errorMsg","error","validateField","trimmedValue","trim","test","digits","replace","length","monthStr","yearStr","split","month","parseInt","year","fullYear","now","Date","currentMonth","getMonth","currentYear","getFullYear","isSubmitDisabled","fieldNames","some","submit","endpoint","token","expiry","expiryDate","response","method","body","pan","cardNumber","expiry_month","Number","expiry_year","cvv","cvc","address","postal_code","zipCode","success","data"],"sourceRoot":"../../../src","sources":["core/Collector.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ export const fetchData = async (url, payload = {}) => {
4
+ const {
5
+ method = "GET",
6
+ headers = {},
7
+ body = null,
8
+ ...options
9
+ } = payload;
10
+ try {
11
+ const config = {
12
+ method,
13
+ headers: {
14
+ Accept: "*/*",
15
+ "Content-Type": "application/json",
16
+ ...headers
17
+ },
18
+ ...options
19
+ };
20
+ if (body && ["POST", "PUT", "PATCH", "DELETE"].includes(method.toUpperCase())) {
21
+ config.body = typeof body === "string" ? body : JSON.stringify(body);
22
+ }
23
+ const response = await fetch(url, config);
24
+ const contentType = response.headers.get("content-type");
25
+ let responseData;
26
+ if (contentType?.includes("application/json")) {
27
+ responseData = await response.json();
28
+ } else {
29
+ responseData = await response.text();
30
+ }
31
+ if (!response.ok) {
32
+ const errData = responseData;
33
+ throw new Error(errData?.message || `HTTP error! status: ${response.status}`);
34
+ }
35
+ return {
36
+ data: responseData,
37
+ error: null
38
+ };
39
+ } catch (err) {
40
+ const errorMessage = err instanceof Error ? err.message : "An error occurred";
41
+ return {
42
+ data: null,
43
+ error: errorMessage
44
+ };
45
+ }
46
+ };
47
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fetchData","url","payload","method","headers","body","options","config","Accept","includes","toUpperCase","JSON","stringify","response","fetch","contentType","get","responseData","json","text","ok","errData","Error","message","status","data","error","err","errorMessage"],"sourceRoot":"../../../src","sources":["utils/fetch.ts"],"mappings":";;AAaA,OAAO,MAAMA,SAAS,GAAG,MAAAA,CACvBC,GAAW,EACXC,OAAqB,GAAG,CAAC,CAAC,KACE;EAC5B,MAAM;IAAEC,MAAM,GAAG,KAAK;IAAEC,OAAO,GAAG,CAAC,CAAC;IAAEC,IAAI,GAAG,IAAI;IAAE,GAAGC;EAAQ,CAAC,GAAGJ,OAAO;EAEzE,IAAI;IACF,MAAMK,MAAmB,GAAG;MAC1BJ,MAAM;MACNC,OAAO,EAAE;QACPI,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,kBAAkB;QAClC,GAAGJ;MACL,CAAC;MACD,GAAGE;IACL,CAAC;IAED,IAAID,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAACI,QAAQ,CAACN,MAAM,CAACO,WAAW,CAAC,CAAC,CAAC,EAAE;MAC7EH,MAAM,CAACF,IAAI,GAAG,OAAOA,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGM,IAAI,CAACC,SAAS,CAACP,IAAI,CAAC;IACtE;IAEA,MAAMQ,QAAQ,GAAG,MAAMC,KAAK,CAACb,GAAG,EAAEM,MAAM,CAAC;IAEzC,MAAMQ,WAAW,GAAGF,QAAQ,CAACT,OAAO,CAACY,GAAG,CAAC,cAAc,CAAC;IACxD,IAAIC,YAAe;IAEnB,IAAIF,WAAW,EAAEN,QAAQ,CAAC,kBAAkB,CAAC,EAAE;MAC7CQ,YAAY,GAAG,MAAMJ,QAAQ,CAACK,IAAI,CAAC,CAAM;IAC3C,CAAC,MAAM;MACLD,YAAY,GAAG,MAAMJ,QAAQ,CAACM,IAAI,CAAC,CAAM;IAC3C;IAEA,IAAI,CAACN,QAAQ,CAACO,EAAE,EAAE;MAChB,MAAMC,OAAO,GAAGJ,YAAuC;MACvD,MAAM,IAAIK,KAAK,CACZD,OAAO,EAAEE,OAAO,IAAe,uBAAuBV,QAAQ,CAACW,MAAM,EACxE,CAAC;IACH;IAEA,OAAO;MAAEC,IAAI,EAAER,YAAY;MAAES,KAAK,EAAE;IAAK,CAAC;EAC5C,CAAC,CAAC,OAAOC,GAAG,EAAE;IACZ,MAAMC,YAAY,GAAGD,GAAG,YAAYL,KAAK,GAAGK,GAAG,CAACJ,OAAO,GAAG,mBAAmB;IAC7E,OAAO;MAAEE,IAAI,EAAE,IAAI;MAAEC,KAAK,EAAEE;IAAa,CAAC;EAC5C;AACF,CAAC","ignoreList":[]}
@@ -16,7 +16,15 @@ export declare class BivoCollect {
16
16
  setField(fieldName: string, value: string, onStateChange?: (state: FieldState) => void, required?: boolean, regex?: RegExp, errorMsg?: string): void;
17
17
  validateField(fieldName: string, value: string, required?: boolean, regex?: RegExp, errorMsg?: string): string;
18
18
  isSubmitDisabled(fieldNames: string[]): boolean;
19
- submit(endpoint: string, token: string): Promise<any>;
19
+ submit(endpoint: string, token: string): Promise<{
20
+ success: boolean;
21
+ error: string;
22
+ data?: undefined;
23
+ } | {
24
+ success: boolean;
25
+ data: unknown;
26
+ error?: undefined;
27
+ }>;
20
28
  }
21
29
  export {};
22
30
  //# sourceMappingURL=Collector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Collector.d.ts","sourceRoot":"","sources":["../../../../src/core/Collector.ts"],"names":[],"mappings":"AAGA,KAAK,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,qBAAa,WAAW;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IACpC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;gBAEhF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,GAAG,MAAM;IAK5D,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EAAE,QAAQ,GAAE,OAAe,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAUpJ,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAoErG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE;IAQ/B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAoB7C"}
1
+ {"version":3,"file":"Collector.d.ts","sourceRoot":"","sources":["../../../../src/core/Collector.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,qBAAa,WAAW;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IACpC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;gBAEhF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,GAAG,MAAM;IAK5D,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EAAE,QAAQ,GAAE,OAAe,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAUpJ,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAoErG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE;IAQ/B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;;;;;;CAyB7C"}
@@ -0,0 +1,13 @@
1
+ type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
2
+ interface FetchPayload extends Omit<RequestInit, "method" | "headers" | "body"> {
3
+ method?: HttpMethod;
4
+ headers?: Record<string, string>;
5
+ body?: Record<string, unknown> | string | null;
6
+ }
7
+ interface FetchResult<T> {
8
+ data: T | null;
9
+ error: string | null;
10
+ }
11
+ export declare const fetchData: <T = unknown>(url: string, payload?: FetchPayload) => Promise<FetchResult<T>>;
12
+ export {};
13
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9D,UAAU,YAAa,SAAQ,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC7E,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;CAChD;AAED,UAAU,WAAW,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,SAAS,GAAU,CAAC,GAAG,OAAO,EACzC,KAAK,MAAM,EACX,UAAS,YAAiB,KACzB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAyCxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@test-glide/payment-react-native",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "bivo payment",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -33,7 +33,7 @@ export const BivoTextInput: React.FC<Props> = ({
33
33
 
34
34
  const handleChange = (text: string) => {
35
35
  let updatedValue;
36
- if (fieldName === "expiryDate") {
36
+ if (fieldName === "exp") {
37
37
  updatedValue = formatExpiry(text);
38
38
  } else {
39
39
  updatedValue = text;
@@ -1,3 +1,4 @@
1
+ import { fetchData } from "../utils/fetch";
1
2
  import { formatCardYear, formatString } from "../utils/utils";
2
3
 
3
4
 
@@ -41,20 +42,20 @@ export class BivoCollect {
41
42
 
42
43
  // Default validations
43
44
  switch (fieldName) {
44
- case "cardNumber": {
45
+ case "card": {
45
46
  const digits = trimmedValue.replace(/\D/g, "");
46
47
  if (digits.length < 12) return "Invalid card number";
47
48
  break;
48
49
  }
49
50
 
50
- case "cvc": {
51
+ case "cvv": {
51
52
  if (!/^\d{3,4}$/.test(trimmedValue)) {
52
- return "Invalid CVC";
53
+ return "Invalid CVV";
53
54
  }
54
55
  break;
55
56
  }
56
57
 
57
- case "expiryDate": {
58
+ case "exp": {
58
59
  // Format check MM/YY
59
60
  if (!/^\d{2}\/\d{2}$/.test(trimmedValue)) {
60
61
  return "Invalid expiry";
@@ -102,23 +103,28 @@ export class BivoCollect {
102
103
  }
103
104
 
104
105
  async submit(endpoint: string, token: string) {
105
- console.log("Submitting form:", this.form, this.errors);
106
+ // console.log("Submitting form:", this.form, this.errors);
106
107
  const expiry = this.form.expiryDate?.split("/") || [];
107
- const payload = {
108
- token,
109
- pan: formatString(this.form.cardNumber || ""),
110
- expiry_month: Number(expiry[0] || 0),
111
- expiry_year: formatCardYear(expiry[1] || ""),
112
- cvv: this.form.cvc ? formatString(this.form.cvc) : null,
113
- name: this.form.cardHolderName || null,
114
- };
115
108
 
116
109
  // Replace fetchData with your API call
117
- const response = await fetch(endpoint, {
110
+ const response = await fetchData(endpoint, {
118
111
  method: "POST",
119
- headers: { "Content-Type": "application/json" },
120
- body: JSON.stringify(payload),
112
+ body: {
113
+ token,
114
+ pan:formatString(this.form.cardNumber || ""),
115
+ expiry_month: Number(expiry[0] || 0) || null,
116
+ expiry_year: formatCardYear(expiry[1] || "") || null,
117
+ cvv: this.form.cvc ? formatString(this.form.cvc) : null,
118
+ address: {
119
+ postal_code: this.form.zipCode ? formatString(this.form.zipCode) : null,
120
+ },
121
+ },
121
122
  });
122
- return response.json();
123
+ if (response.error) {
124
+ return{ success: false, error: response.error };
125
+ } else {
126
+ return{ success: true, data: response.data };
127
+ }
128
+ // return response.json();
123
129
  }
124
130
  }
@@ -0,0 +1,58 @@
1
+ type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
2
+
3
+ interface FetchPayload extends Omit<RequestInit, "method" | "headers" | "body"> {
4
+ method?: HttpMethod;
5
+ headers?: Record<string, string>;
6
+ body?: Record<string, unknown> | string | null;
7
+ }
8
+
9
+ interface FetchResult<T> {
10
+ data: T | null;
11
+ error: string | null;
12
+ }
13
+
14
+ export const fetchData = async <T = unknown>(
15
+ url: string,
16
+ payload: FetchPayload = {}
17
+ ): Promise<FetchResult<T>> => {
18
+ const { method = "GET", headers = {}, body = null, ...options } = payload;
19
+
20
+ try {
21
+ const config: RequestInit = {
22
+ method,
23
+ headers: {
24
+ Accept: "*/*",
25
+ "Content-Type": "application/json",
26
+ ...headers,
27
+ },
28
+ ...options,
29
+ };
30
+
31
+ if (body && ["POST", "PUT", "PATCH", "DELETE"].includes(method.toUpperCase())) {
32
+ config.body = typeof body === "string" ? body : JSON.stringify(body);
33
+ }
34
+
35
+ const response = await fetch(url, config);
36
+
37
+ const contentType = response.headers.get("content-type");
38
+ let responseData: T;
39
+
40
+ if (contentType?.includes("application/json")) {
41
+ responseData = await response.json() as T;
42
+ } else {
43
+ responseData = await response.text() as T;
44
+ }
45
+
46
+ if (!response.ok) {
47
+ const errData = responseData as Record<string, unknown>;
48
+ throw new Error(
49
+ (errData?.message as string) || `HTTP error! status: ${response.status}`
50
+ );
51
+ }
52
+
53
+ return { data: responseData, error: null };
54
+ } catch (err) {
55
+ const errorMessage = err instanceof Error ? err.message : "An error occurred";
56
+ return { data: null, error: errorMessage };
57
+ }
58
+ };