@busha/commerce-js 1.0.0

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/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # Busha commerce-js
2
+
3
+ Receive crypto payments with busha commerce js
4
+
5
+  
6
+
7
+ # Installation
8
+
9
+ Browser
10
+
11
+ ```
12
+ <script src="https://www.unpkg.com/@busha/commerce-js/dist/index.min.js"></script>
13
+
14
+ <script>
15
+ const BushaCommerce = window.BushaCommerce
16
+ </script>
17
+ ```
18
+
19
+ Node
20
+
21
+ ```
22
+ yarn add @busha/commerce-js
23
+
24
+ # OR
25
+
26
+ npm i @busha/commerce-js
27
+ ```
28
+
29
+ ```
30
+ import BushaCommerce from "@busha/commerce-js";
31
+ ```
32
+ &nbsp;
33
+
34
+ # Usage
35
+
36
+ ```
37
+ const payload = {
38
+ reference: `Demo_ref_${new Date().getTime()}`,
39
+ business_id: "[YOUR BUSINESS ID]",
40
+ local_amount: 2000,
41
+ local_currency: "NGN", // "USD"
42
+ mode: "test", // "test" | "live", // defaults to live
43
+ meta: {email: "email@example.com", name: "Busha" } // optional customer info
44
+ onClose: (d) => {
45
+ console.log("Payment cancelled!", d);
46
+ },
47
+ onSuccess: (d) => {
48
+ console.log(d);
49
+ }
50
+ }
51
+
52
+ BushaCommerce(payload)
53
+ ```
@@ -0,0 +1 @@
1
+ export declare const dark = "#000639";
@@ -0,0 +1 @@
1
+ export declare const close = "<svg width=\"40\" height=\"41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 10.5C0 4.977 4.477.5 10 .5h20c5.523 0 10 4.477 10 10v20c0 5.523-4.477 10-10 10H10c-5.523 0-10-4.477-10-10v-20Z\" fill=\"#F1F1F1\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.927 15.78a.75.75 0 1 0-1.06-1.06l-4.793 4.793-4.793-4.793a.75.75 0 0 0-1.061 1.06l4.793 4.793-4.793 4.793a.75.75 0 1 0 1.06 1.061l4.794-4.793 4.793 4.793a.75.75 0 0 0 1.06-1.06l-4.793-4.794 4.793-4.793Z\" fill=\"#000639\"/></svg>";
@@ -0,0 +1,8 @@
1
+ export declare const CONTAINER_ID = "busha-commerce-container";
2
+ export declare const LOADER_ID = "busha-commerce-loader";
3
+ export declare const STYLESHEET_ID = "busha-commerce-styles";
4
+ export declare const CLOSE_BUTTON_ID = "busha-commerce-close-btn";
5
+ export declare const PAY_UI: string | undefined;
6
+ export declare const INITIALIZED_STATUS = "INITIALIZED";
7
+ export declare const CANCELLED_STATUS = "CANCELLED";
8
+ export declare const COMPLETED_STATUS = "COMPLETED";
@@ -0,0 +1 @@
1
+ export declare const dark = "#000639";
@@ -0,0 +1 @@
1
+ export declare const close = "<svg width=\"40\" height=\"41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 10.5C0 4.977 4.477.5 10 .5h20c5.523 0 10 4.477 10 10v20c0 5.523-4.477 10-10 10H10c-5.523 0-10-4.477-10-10v-20Z\" fill=\"#F1F1F1\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.927 15.78a.75.75 0 1 0-1.06-1.06l-4.793 4.793-4.793-4.793a.75.75 0 0 0-1.061 1.06l4.793 4.793-4.793 4.793a.75.75 0 1 0 1.06 1.061l4.794-4.793 4.793 4.793a.75.75 0 0 0 1.06-1.06l-4.793-4.794 4.793-4.793Z\" fill=\"#000639\"/></svg>";
@@ -0,0 +1,8 @@
1
+ export declare const CONTAINER_ID = "busha-commerce-container";
2
+ export declare const LOADER_ID = "busha-commerce-loader";
3
+ export declare const STYLESHEET_ID = "busha-commerce-styles";
4
+ export declare const CLOSE_BUTTON_ID = "busha-commerce-close-btn";
5
+ export declare const PAY_UI: string | undefined;
6
+ export declare const INITIALIZED_STATUS = "INITIALIZED";
7
+ export declare const CANCELLED_STATUS = "CANCELLED";
8
+ export declare const COMPLETED_STATUS = "COMPLETED";
@@ -0,0 +1,21 @@
1
+ import { BushaCommercePayload } from "./types";
2
+ export declare function injectGlobalStyles(): void;
3
+ export declare function validatePayload(p: BushaCommercePayload): {
4
+ callback_url?: string | undefined;
5
+ mode?: string | undefined;
6
+ meta: {
7
+ email: string;
8
+ name: string;
9
+ };
10
+ local_amount: number;
11
+ local_currency: string;
12
+ business_id: string;
13
+ reference: string;
14
+ };
15
+ export declare function createContainerEl(): HTMLDivElement;
16
+ export declare function createCloseBtnEl(): HTMLButtonElement;
17
+ export declare function createSpinnerEl(): HTMLDivElement;
18
+ export declare function createIframeEl(): HTMLIFrameElement;
19
+ type FormPayload = Omit<BushaCommercePayload, "onClose" | "onSuccess">;
20
+ export declare function createFormEl(payload: FormPayload): HTMLFormElement;
21
+ export {};
@@ -0,0 +1,2 @@
1
+ import { BushaCommercePayload } from "./types";
2
+ export default function BushaCommerce(p: BushaCommercePayload): void;
@@ -0,0 +1,18 @@
1
+ export type MessageType = {
2
+ status: string;
3
+ data?: any;
4
+ };
5
+ export interface BushaCommercePayload {
6
+ local_amount: number;
7
+ local_currency: string;
8
+ meta?: {
9
+ email?: string;
10
+ name?: string;
11
+ };
12
+ business_id: string;
13
+ reference: string;
14
+ callback_url: string;
15
+ mode?: "test" | "live";
16
+ onClose?: (d?: any) => void;
17
+ onSuccess: (d?: any) => void;
18
+ }
@@ -0,0 +1,21 @@
1
+ import { BushaCommercePayload } from "./types";
2
+ export declare function injectGlobalStyles(): void;
3
+ export declare function validatePayload(p: BushaCommercePayload): {
4
+ callback_url?: string | undefined;
5
+ mode?: string | undefined;
6
+ meta: {
7
+ email: string;
8
+ name: string;
9
+ };
10
+ local_amount: number;
11
+ local_currency: string;
12
+ business_id: string;
13
+ reference: string;
14
+ };
15
+ export declare function createContainerEl(): HTMLDivElement;
16
+ export declare function createCloseBtnEl(): HTMLButtonElement;
17
+ export declare function createSpinnerEl(): HTMLDivElement;
18
+ export declare function createIframeEl(): HTMLIFrameElement;
19
+ type FormPayload = Omit<BushaCommercePayload, "onClose" | "onSuccess">;
20
+ export declare function createFormEl(payload: FormPayload): HTMLFormElement;
21
+ export {};
@@ -0,0 +1,2 @@
1
+ import { BushaCommercePayload } from "./types";
2
+ export default function BushaCommerce(p: BushaCommercePayload): void;
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ const e="busha-commerce-container",t="busha-commerce-loader",s="busha-commerce-styles",n="busha-commerce-close-btn",r="https://staging.pay.busha.co/pay";function i(e){this._maxSize=e,this.clear()}i.prototype.clear=function(){this._size=0,this._values=Object.create(null)},i.prototype.get=function(e){return this._values[e]},i.prototype.set=function(e,t){return this._size>=this._maxSize&&this.clear(),e in this._values||this._size++,this._values[e]=t};var a=/[^.^\]^[]+|(?=\[\]|\.\.)/g,o=/^\d+$/,u=/^\d/,l=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,c=/^\s*(['"]?)(.*?)(\1)\s*$/,h=new i(512),f=new i(512),d=new i(512),p={Cache:i,split:y,normalizePath:m,setter:function(e){var t=m(e);return f.get(e)||f.set(e,(function(e,s){for(var n=0,r=t.length,i=e;n<r-1;){var a=t[n];if("__proto__"===a||"constructor"===a||"prototype"===a)return e;i=i[t[n++]]}i[t[n]]=s}))},getter:function(e,t){var s=m(e);return d.get(e)||d.set(e,(function(e){for(var n=0,r=s.length;n<r;){if(null==e&&t)return;e=e[s[n++]]}return e}))},join:function(e){return e.reduce((function(e,t){return e+(g(t)||o.test(t)?"["+t+"]":(e?".":"")+t)}),"")},forEach:function(e,t,s){!function(e,t,s){var n,r,i,a,o=e.length;for(r=0;r<o;r++)(n=e[r])&&(v(n)&&(n='"'+n+'"'),i=!(a=g(n))&&/^\d+$/.test(n),t.call(s,n,a,i,r,e))}(Array.isArray(e)?e:y(e),t,s)}};function m(e){return h.get(e)||h.set(e,y(e).map((function(e){return e.replace(c,"$2")})))}function y(e){return e.match(a)||[""]}function g(e){return"string"==typeof e&&e&&-1!==["'",'"'].indexOf(e.charAt(0))}function v(e){return!g(e)&&(function(e){return e.match(u)&&!e.match(o)}(e)||function(e){return l.test(e)}(e))}const b=/[A-Z\xc0-\xd6\xd8-\xde]?[a-z\xdf-\xf6\xf8-\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde]|$)|(?:[A-Z\xc0-\xd6\xd8-\xde]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde](?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])|$)|[A-Z\xc0-\xd6\xd8-\xde]?(?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\xc0-\xd6\xd8-\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\d*(?:1ST|2ND|3RD|(?![123])\dTH)(?=\b|[a-z_])|\d*(?:1st|2nd|3rd|(?![123])\dth)(?=\b|[A-Z_])|\d+|(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?)*/g,x=e=>e.match(b)||[],w=(e,t)=>x(e).join(t).toLowerCase(),F=e=>x(e).reduce(((e,t)=>`${e}${e?t[0].toUpperCase()+t.slice(1).toLowerCase():t.toLowerCase()}`),"");var E=F,_=e=>w(e,"_"),O={};function $(e,t){var s=e.length,n=new Array(s),r={},i=s,a=function(e){for(var t=new Map,s=0,n=e.length;s<n;s++){var r=e[s];t.has(r[0])||t.set(r[0],new Set),t.has(r[1])||t.set(r[1],new Set),t.get(r[0]).add(r[1])}return t}(t),o=function(e){for(var t=new Map,s=0,n=e.length;s<n;s++)t.set(e[s],s);return t}(e);for(t.forEach((function(e){if(!o.has(e[0])||!o.has(e[1]))throw new Error("Unknown node. There is an unknown node in the supplied edges.")}));i--;)r[i]||u(e[i],i,new Set);return n;function u(e,t,i){if(i.has(e)){var l;try{l=", node was:"+JSON.stringify(e)}catch(e){l=""}throw new Error("Cyclic dependency"+l)}if(!o.has(e))throw new Error("Found unknown node. Make sure to provided all involved nodes. Unknown node: "+JSON.stringify(e));if(!r[t]){r[t]=!0;var c=a.get(e)||new Set;if(t=(c=Array.from(c)).length){i.add(e);do{var h=c[--t];u(h,o.get(h),i)}while(t);i.delete(e)}n[--s]=e}}}({get exports(){return O},set exports(e){O=e}}).exports=function(e){return $(function(e){for(var t=new Set,s=0,n=e.length;s<n;s++){var r=e[s];t.add(r[0]),t.add(r[1])}return Array.from(t)}(e),e)},O.array=$;const k=Object.prototype.toString,T=Error.prototype.toString,A=RegExp.prototype.toString,D="undefined"!=typeof Symbol?Symbol.prototype.toString:()=>"",S=/^Symbol\((.*)\)(.*)$/;function j(e,t=!1){if(null==e||!0===e||!1===e)return""+e;const s=typeof e;if("number"===s)return function(e){return e!=+e?"NaN":0===e&&1/e<0?"-0":""+e}(e);if("string"===s)return t?`"${e}"`:e;if("function"===s)return"[Function "+(e.name||"anonymous")+"]";if("symbol"===s)return D.call(e).replace(S,"Symbol($1)");const n=k.call(e).slice(8,-1);return"Date"===n?isNaN(e.getTime())?""+e:e.toISOString(e):"Error"===n||e instanceof Error?"["+T.call(e)+"]":"RegExp"===n?A.call(e):null}function C(e,t){let s=j(e,t);return null!==s?s:JSON.stringify(e,(function(e,s){let n=j(this[e],t);return null!==n?n:s}),2)}function N(e){return null==e?[]:[].concat(e)}let z=/\$\{\s*(\w+)\s*\}/g;class I extends Error{static formatError(e,t){const s=t.label||t.path||"this";return s!==t.path&&(t=Object.assign({},t,{path:s})),"string"==typeof e?e.replace(z,((e,s)=>C(t[s]))):"function"==typeof e?e(t):e}static isError(e){return e&&"ValidationError"===e.name}constructor(e,t,s,n){super(),this.value=void 0,this.path=void 0,this.type=void 0,this.errors=void 0,this.params=void 0,this.inner=void 0,this.name="ValidationError",this.value=t,this.path=s,this.type=n,this.errors=[],this.inner=[],N(e).forEach((e=>{I.isError(e)?(this.errors.push(...e.errors),this.inner=this.inner.concat(e.inner.length?e.inner:e)):this.errors.push(e)})),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,I)}}let P={default:"${path} is invalid",required:"${path} is a required field",defined:"${path} must be defined",notNull:"${path} cannot be null",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:e,type:t,value:s,originalValue:n})=>{const r=null!=n&&n!==s?` (cast from the value \`${C(n,!0)}\`).`:".";return"mixed"!==t?`${e} must be a \`${t}\` type, but the final value was: \`${C(s,!0)}\``+r:`${e} must match the configured type. The validated value was: \`${C(s,!0)}\``+r}},V={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"},M={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"},L={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"},q={noUnknown:"${path} field has unspecified keys: ${unknown}"};Object.assign(Object.create(null),{mixed:P,string:V,number:M,date:L,object:q,array:{min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must have ${length} items"},boolean:{isValue:"${path} field must be ${value}"}});const R=e=>e&&e.__isYupSchema__;class Z{static fromOptions(e,t){if(!t.then&&!t.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:s,then:n,otherwise:r}=t,i="function"==typeof s?s:(...e)=>e.every((e=>e===s));return new Z(e,((e,t)=>{var s;let a=i(...e)?n:r;return null!=(s=null==a?void 0:a(t))?s:t}))}constructor(e,t){this.fn=void 0,this.refs=e,this.refs=e,this.fn=t}resolve(e,t){let s=this.refs.map((e=>e.getValue(null==t?void 0:t.value,null==t?void 0:t.parent,null==t?void 0:t.context))),n=this.fn(s,e,t);if(void 0===n||n===e)return e;if(!R(n))throw new TypeError("conditions must return a schema object");return n.resolve(t)}}const U="$",Y=".";class B{constructor(e,t={}){if(this.key=void 0,this.isContext=void 0,this.isValue=void 0,this.isSibling=void 0,this.path=void 0,this.getter=void 0,this.map=void 0,"string"!=typeof e)throw new TypeError("ref must be a string, got: "+e);if(this.key=e.trim(),""===e)throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===U,this.isValue=this.key[0]===Y,this.isSibling=!this.isContext&&!this.isValue;let s=this.isContext?U:this.isValue?Y:"";this.path=this.key.slice(s.length),this.getter=this.path&&p.getter(this.path,!0),this.map=t.map}getValue(e,t,s){let n=this.isContext?s:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,null==t?void 0:t.parent,null==t?void 0:t.context)}resolve(){return this}describe(){return{type:"ref",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}}B.prototype.__isYupRef=!0;const J=e=>null==e;function K(e){function t({value:t,path:s="",options:n,originalValue:r,schema:i},a,o){const{name:u,test:l,params:c,message:h,skipAbsent:f}=e;let{parent:d,context:p,abortEarly:m=i.spec.abortEarly}=n;function y(e){return B.isRef(e)?e.getValue(t,d,p):e}function g(e={}){const n=Object.assign({value:t,originalValue:r,label:i.spec.label,path:e.path||s,spec:i.spec},c,e.params);for(const e of Object.keys(n))n[e]=y(n[e]);const a=new I(I.formatError(e.message||h,n),t,n.path,e.type||u);return a.params=n,a}const v=m?a:o;let b={path:s,parent:d,type:u,from:n.from,createError:g,resolve:y,options:n,originalValue:r,schema:i};const x=e=>{I.isError(e)?v(e):e?o(null):v(g())},w=e=>{I.isError(e)?v(e):a(e)},F=f&&J(t);if(!n.sync){try{Promise.resolve(!!F||l.call(b,t,b)).then(x,w)}catch(e){w(e)}return}let E;try{var _;if(E=!!F||l.call(b,t,b),"function"==typeof(null==(_=E)?void 0:_.then))throw new Error(`Validation test of type: "${b.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(e){return void w(e)}x(E)}return t.OPTIONS=e,t}function H(e,t,s,n=s){let r,i,a;return t?(p.forEach(t,((o,u,l)=>{let c=u?o.slice(1,o.length-1):o,h="tuple"===(e=e.resolve({context:n,parent:r,value:s})).type,f=l?parseInt(c,10):0;if(e.innerType||h){if(h&&!l)throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part "${a}" must contain an index to the tuple element, e.g. "${a}[0]"`);if(s&&f>=s.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${o}, in the path: ${t}. because there is no value at that index. `);r=s,s=s&&s[f],e=h?e.spec.types[f]:e.innerType}if(!l){if(!e.fields||!e.fields[c])throw new Error(`The schema does not contain the path: ${t}. (failed at: ${a} which is a type: "${e.type}")`);r=s,s=s&&s[c],e=e.fields[c]}i=c,a=u?"["+o+"]":"."+o})),{schema:e,parent:r,parentPath:i}):{parent:r,parentPath:t,schema:e}}class G extends Set{describe(){const e=[];for(const t of this.values())e.push(B.isRef(t)?t.describe():t);return e}resolveAll(e){let t=[];for(const s of this.values())t.push(e(s));return t}clone(){return new G(this.values())}merge(e,t){const s=this.clone();return e.forEach((e=>s.add(e))),t.forEach((e=>s.delete(e))),s}}function Q(e,t=new Map){if(R(e)||!e||"object"!=typeof e)return e;if(t.has(e))return t.get(e);let s;if(e instanceof Date)s=new Date(e.getTime()),t.set(e,s);else if(e instanceof RegExp)s=new RegExp(e),t.set(e,s);else if(Array.isArray(e)){s=new Array(e.length),t.set(e,s);for(let n=0;n<e.length;n++)s[n]=Q(e[n],t)}else if(e instanceof Map){s=new Map,t.set(e,s);for(const[n,r]of e.entries())s.set(n,Q(r,t))}else if(e instanceof Set){s=new Set,t.set(e,s);for(const n of e)s.add(Q(n,t))}else{if(!(e instanceof Object))throw Error(`Unable to clone ${e}`);s={},t.set(e,s);for(const[n,r]of Object.entries(e))s[n]=Q(r,t)}return s}class W{constructor(e){this.type=void 0,this.deps=[],this.tests=void 0,this.transforms=void 0,this.conditions=[],this._mutate=void 0,this.internalTests={},this._whitelist=new G,this._blacklist=new G,this.exclusiveTests=Object.create(null),this._typeCheck=void 0,this.spec=void 0,this.tests=[],this.transforms=[],this.withMutation((()=>{this.typeError(P.notType)})),this.type=e.type,this._typeCheck=e.check,this.spec=Object.assign({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,optional:!0,coerce:!0},null==e?void 0:e.spec),this.withMutation((e=>{e.nonNullable()}))}get _type(){return this.type}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;const t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeCheck=this._typeCheck,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.internalTests=Object.assign({},this.internalTests),t.exclusiveTests=Object.assign({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=Q(Object.assign({},this.spec,e)),t}label(e){let t=this.clone();return t.spec.label=e,t}meta(...e){if(0===e.length)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let s=e(this);return this._mutate=t,s}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&"mixed"!==this.type)throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${e.type}`);let t=this,s=e.clone();const n=Object.assign({},t.spec,s.spec);return s.spec=n,s.internalTests=Object.assign({},t.internalTests,s.internalTests),s._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),s._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),s.tests=t.tests,s.exclusiveTests=t.exclusiveTests,s.withMutation((t=>{e.tests.forEach((e=>{t.test(e.OPTIONS)}))})),s.transforms=[...t.transforms,...s.transforms],s}isType(e){return null==e?!(!this.spec.nullable||null!==e)||!(!this.spec.optional||void 0!==e):this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let s=t.conditions;t=t.clone(),t.conditions=[],t=s.reduce(((t,s)=>s.resolve(t,e)),t),t=t.resolve(e)}return t}resolveOptions(e){var t,s,n;return Object.assign({},e,{from:e.from||[],strict:null!=(t=e.strict)?t:this.spec.strict,abortEarly:null!=(s=e.abortEarly)?s:this.spec.abortEarly,recursive:null!=(n=e.recursive)?n:this.spec.recursive})}cast(e,t={}){let s=this.resolve(Object.assign({value:e},t)),n="ignore-optionality"===t.assert,r=s._cast(e,t);if(!1!==t.assert&&!s.isType(r)){if(n&&J(r))return r;let i=C(e),a=C(r);throw new TypeError(`The value of ${t.path||"field"} could not be cast to a value that satisfies the schema type: "${s.type}". \n\nattempted value: ${i} \n`+(a!==i?`result of cast: ${a}`:""))}return r}_cast(e,t){let s=void 0===e?e:this.transforms.reduce(((t,s)=>s.call(this,t,e,this)),e);return void 0===s&&(s=this.getDefault()),s}_validate(e,t={},s,n){let{path:r,originalValue:i=e,strict:a=this.spec.strict}=t,o=e;a||(o=this._cast(o,Object.assign({assert:!1},t)));let u=[];for(let e of Object.values(this.internalTests))e&&u.push(e);this.runTests({path:r,value:o,originalValue:i,options:t,tests:u},s,(e=>{if(e.length)return n(e,o);this.runTests({path:r,value:o,originalValue:i,options:t,tests:this.tests},s,n)}))}runTests(e,t,s){let n=!1,{tests:r,value:i,originalValue:a,path:o,options:u}=e,l=e=>{n||(n=!0,t(e,i))},c=e=>{n||(n=!0,s(e,i))},h=r.length,f=[];if(!h)return c([]);let d={value:i,originalValue:a,path:o,options:u,schema:this};for(let e=0;e<r.length;e++){(0,r[e])(d,l,(function(e){e&&(f=f.concat(e)),--h<=0&&c(f)}))}}asNestedTest({key:e,index:t,parent:s,parentPath:n,originalParent:r,options:i}){const a=null!=e?e:t;if(null==a)throw TypeError("Must include `key` or `index` for nested validations");const o="number"==typeof a;let u=s[a];const l=Object.assign({},i,{strict:!0,parent:s,value:u,originalValue:r[a],key:void 0,[o?"index":"key"]:a,path:o||a.includes(".")?`${n||""}[${u?a:`"${a}"`}]`:(n?`${n}.`:"")+e});return(e,t,s)=>this.resolve(l)._validate(u,l,t,s)}validate(e,t){let s=this.resolve(Object.assign({},t,{value:e}));return new Promise(((n,r)=>s._validate(e,t,((e,t)=>{I.isError(e)&&(e.value=t),r(e)}),((e,t)=>{e.length?r(new I(e,t)):n(t)}))))}validateSync(e,t){let s;return this.resolve(Object.assign({},t,{value:e}))._validate(e,Object.assign({},t,{sync:!0}),((e,t)=>{throw I.isError(e)&&(e.value=t),e}),((t,n)=>{if(t.length)throw new I(t,e);s=n})),s}isValid(e,t){return this.validate(e,t).then((()=>!0),(e=>{if(I.isError(e))return!1;throw e}))}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(e){if(I.isError(e))return!1;throw e}}_getDefault(){let e=this.spec.default;return null==e?e:"function"==typeof e?e.call(this):Q(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){if(0===arguments.length)return this._getDefault();return this.clone({default:e})}strict(e=!0){return this.clone({strict:e})}nullability(e,t){const s=this.clone({nullable:e});return s.internalTests.nullable=K({message:t,name:"nullable",test(e){return null!==e||this.schema.spec.nullable}}),s}optionality(e,t){const s=this.clone({optional:e});return s.internalTests.optionality=K({message:t,name:"optionality",test(e){return void 0!==e||this.schema.spec.optional}}),s}optional(){return this.optionality(!0)}defined(e=P.defined){return this.optionality(!1,e)}nullable(){return this.nullability(!0)}nonNullable(e=P.notNull){return this.nullability(!1,e)}required(e=P.required){return this.clone().withMutation((t=>t.nonNullable(e).defined(e)))}notRequired(){return this.clone().withMutation((e=>e.nullable().optional()))}transform(e){let t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(t=1===e.length?"function"==typeof e[0]?{test:e[0]}:e[0]:2===e.length?{name:e[0],test:e[1]}:{name:e[0],message:e[1],test:e[2]},void 0===t.message&&(t.message=P.default),"function"!=typeof t.test)throw new TypeError("`test` is a required parameters");let s=this.clone(),n=K(t),r=t.exclusive||t.name&&!0===s.exclusiveTests[t.name];if(t.exclusive&&!t.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return t.name&&(s.exclusiveTests[t.name]=!!t.exclusive),s.tests=s.tests.filter((e=>{if(e.OPTIONS.name===t.name){if(r)return!1;if(e.OPTIONS.test===n.OPTIONS.test)return!1}return!0})),s.tests.push(n),s}when(e,t){Array.isArray(e)||"string"==typeof e||(t=e,e=".");let s=this.clone(),n=N(e).map((e=>new B(e)));return n.forEach((e=>{e.isSibling&&s.deps.push(e.key)})),s.conditions.push("function"==typeof t?new Z(n,t):Z.fromOptions(n,t)),s}typeError(e){let t=this.clone();return t.internalTests.typeError=K({message:e,name:"typeError",test(e){return!(!J(e)&&!this.schema._typeCheck(e))||this.createError({params:{type:this.schema.type}})}}),t}oneOf(e,t=P.oneOf){let s=this.clone();return e.forEach((e=>{s._whitelist.add(e),s._blacklist.delete(e)})),s.internalTests.whiteList=K({message:t,name:"oneOf",skipAbsent:!0,test(e){let t=this.schema._whitelist,s=t.resolveAll(this.resolve);return!!s.includes(e)||this.createError({params:{values:Array.from(t).join(", "),resolved:s}})}}),s}notOneOf(e,t=P.notOneOf){let s=this.clone();return e.forEach((e=>{s._blacklist.add(e),s._whitelist.delete(e)})),s.internalTests.blacklist=K({message:t,name:"notOneOf",test(e){let t=this.schema._blacklist,s=t.resolveAll(this.resolve);return!s.includes(e)||this.createError({params:{values:Array.from(t).join(", "),resolved:s}})}}),s}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(e){const t=(e?this.resolve(e):this).clone(),{label:s,meta:n,optional:r,nullable:i}=t.spec;return{meta:n,label:s,optional:r,nullable:i,default:t.getDefault(e),type:t.type,oneOf:t._whitelist.describe(),notOneOf:t._blacklist.describe(),tests:t.tests.map((e=>({name:e.OPTIONS.name,params:e.OPTIONS.params}))).filter(((e,t,s)=>s.findIndex((t=>t.name===e.name))===t))}}}W.prototype.__isYupSchema__=!0;for(const e of["validate","validateSync"])W.prototype[`${e}At`]=function(t,s,n={}){const{parent:r,parentPath:i,schema:a}=H(this,t,s,n.context);return a[e](r&&r[i],Object.assign({},n,{parent:r,path:t}))};for(const e of["equals","is"])W.prototype[e]=W.prototype.oneOf;for(const e of["not","nope"])W.prototype[e]=W.prototype.notOneOf;let X=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,ee=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,te=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,se=e=>J(e)||e===e.trim(),ne={}.toString();function re(){return new ie}class ie extends W{constructor(){super({type:"string",check:e=>(e instanceof String&&(e=e.valueOf()),"string"==typeof e)}),this.withMutation((()=>{this.transform(((e,t,s)=>{if(!s.spec.coerce||s.isType(e))return e;if(Array.isArray(e))return e;const n=null!=e&&e.toString?e.toString():e;return n===ne?e:n}))}))}required(e){return super.required(e).withMutation((t=>t.test({message:e||P.required,name:"required",skipAbsent:!0,test:e=>!!e.length})))}notRequired(){return super.notRequired().withMutation((e=>(e.tests=e.tests.filter((e=>"required"!==e.OPTIONS.name)),e)))}length(e,t=V.length){return this.test({message:t,name:"length",exclusive:!0,params:{length:e},skipAbsent:!0,test(t){return t.length===this.resolve(e)}})}min(e,t=V.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(t){return t.length>=this.resolve(e)}})}max(e,t=V.max){return this.test({name:"max",exclusive:!0,message:t,params:{max:e},skipAbsent:!0,test(t){return t.length<=this.resolve(e)}})}matches(e,t){let s,n,r=!1;return t&&("object"==typeof t?({excludeEmptyString:r=!1,message:s,name:n}=t):s=t),this.test({name:n||"matches",message:s||V.matches,params:{regex:e},skipAbsent:!0,test:t=>""===t&&r||-1!==t.search(e)})}email(e=V.email){return this.matches(X,{name:"email",message:e,excludeEmptyString:!0})}url(e=V.url){return this.matches(ee,{name:"url",message:e,excludeEmptyString:!0})}uuid(e=V.uuid){return this.matches(te,{name:"uuid",message:e,excludeEmptyString:!1})}ensure(){return this.default("").transform((e=>null===e?"":e))}trim(e=V.trim){return this.transform((e=>null!=e?e.trim():e)).test({message:e,name:"trim",test:se})}lowercase(e=V.lowercase){return this.transform((e=>J(e)?e:e.toLowerCase())).test({message:e,name:"string_case",exclusive:!0,skipAbsent:!0,test:e=>J(e)||e===e.toLowerCase()})}uppercase(e=V.uppercase){return this.transform((e=>J(e)?e:e.toUpperCase())).test({message:e,name:"string_case",exclusive:!0,skipAbsent:!0,test:e=>J(e)||e===e.toUpperCase()})}}re.prototype=ie.prototype;function ae(){return new oe}class oe extends W{constructor(){super({type:"number",check:e=>(e instanceof Number&&(e=e.valueOf()),"number"==typeof e&&!(e=>e!=+e)(e))}),this.withMutation((()=>{this.transform(((e,t,s)=>{if(!s.spec.coerce)return e;let n=e;if("string"==typeof n){if(n=n.replace(/\s/g,""),""===n)return NaN;n=+n}return s.isType(n)?n:parseFloat(n)}))}))}min(e,t=M.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(t){return t>=this.resolve(e)}})}max(e,t=M.max){return this.test({message:t,name:"max",exclusive:!0,params:{max:e},skipAbsent:!0,test(t){return t<=this.resolve(e)}})}lessThan(e,t=M.lessThan){return this.test({message:t,name:"max",exclusive:!0,params:{less:e},skipAbsent:!0,test(t){return t<this.resolve(e)}})}moreThan(e,t=M.moreThan){return this.test({message:t,name:"min",exclusive:!0,params:{more:e},skipAbsent:!0,test(t){return t>this.resolve(e)}})}positive(e=M.positive){return this.moreThan(0,e)}negative(e=M.negative){return this.lessThan(0,e)}integer(e=M.integer){return this.test({name:"integer",message:e,skipAbsent:!0,test:e=>Number.isInteger(e)})}truncate(){return this.transform((e=>J(e)?e:0|e))}round(e){var t;let s=["ceil","floor","round","trunc"];if("trunc"===(e=(null==(t=e)?void 0:t.toLowerCase())||"round"))return this.truncate();if(-1===s.indexOf(e.toLowerCase()))throw new TypeError("Only valid options for round() are: "+s.join(", "));return this.transform((t=>J(t)?t:Math[e](t)))}}ae.prototype=oe.prototype;var ue=/^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/;let le=new Date("");class ce extends W{constructor(){super({type:"date",check(e){return t=e,"[object Date]"===Object.prototype.toString.call(t)&&!isNaN(e.getTime());var t}}),this.withMutation((()=>{this.transform(((e,t,s)=>!s.spec.coerce||s.isType(e)?e:(e=function(e){var t,s,n=[1,4,5,6,7,10,11],r=0;if(s=ue.exec(e)){for(var i,a=0;i=n[a];++a)s[i]=+s[i]||0;s[2]=(+s[2]||1)-1,s[3]=+s[3]||1,s[7]=s[7]?String(s[7]).substr(0,3):0,void 0!==s[8]&&""!==s[8]||void 0!==s[9]&&""!==s[9]?("Z"!==s[8]&&void 0!==s[9]&&(r=60*s[10]+s[11],"+"===s[9]&&(r=0-r)),t=Date.UTC(s[1],s[2],s[3],s[4],s[5]+r,s[6],s[7])):t=+new Date(s[1],s[2],s[3],s[4],s[5],s[6],s[7])}else t=Date.parse?Date.parse(e):NaN;return t}(e),isNaN(e)?ce.INVALID_DATE:new Date(e))))}))}prepareParam(e,t){let s;if(B.isRef(e))s=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\`${t}\` must be a Date or a value that can be \`cast()\` to a Date`);s=n}return s}min(e,t=L.min){let s=this.prepareParam(e,"min");return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(e){return e>=this.resolve(s)}})}max(e,t=L.max){let s=this.prepareParam(e,"max");return this.test({message:t,name:"max",exclusive:!0,params:{max:e},skipAbsent:!0,test(e){return e<=this.resolve(s)}})}}function he(e,t){let s=1/0;return e.some(((e,n)=>{var r;if(null!=(r=t.path)&&r.includes(e))return s=n,!0})),s}function fe(e){return(t,s)=>he(e,t)-he(e,s)}ce.INVALID_DATE=le,ce.prototype;const de=(e,t,s)=>{if("string"!=typeof e)return e;let n=e;try{n=JSON.parse(e)}catch(e){}return s.isType(n)?n:e};function pe(e){if("fields"in e){const t={};for(const[s,n]of Object.entries(e.fields))t[s]=pe(n);return e.setFields(t)}if("array"===e.type){const t=e.optional();return t.innerType&&(t.innerType=pe(t.innerType)),t}return"tuple"===e.type?e.optional().clone({types:e.spec.types.map(pe)}):"optional"in e?e.optional():e}let me=e=>"[object Object]"===Object.prototype.toString.call(e);const ye=fe([]);function ge(e){return new ve(e)}class ve extends W{constructor(e){super({type:"object",check:e=>me(e)||"function"==typeof e}),this.fields=Object.create(null),this._sortErrors=ye,this._nodes=[],this._excludedEdges=[],this.withMutation((()=>{e&&this.shape(e)}))}_cast(e,t={}){var s;let n=super._cast(e,t);if(void 0===n)return this.getDefault();if(!this._typeCheck(n))return n;let r=this.fields,i=null!=(s=t.stripUnknown)?s:this.spec.noUnknown,a=[].concat(this._nodes,Object.keys(n).filter((e=>!this._nodes.includes(e)))),o={},u=Object.assign({},t,{parent:o,__validating:t.__validating||!1}),l=!1;for(const e of a){let s=r[e],a=e in n;if(s){let r,i=n[e];u.path=(t.path?`${t.path}.`:"")+e,s=s.resolve({value:i,context:t.context,parent:o});let a=s instanceof W?s.spec:void 0,c=null==a?void 0:a.strict;if(null!=a&&a.strip){l=l||e in n;continue}r=t.__validating&&c?n[e]:s.cast(n[e],u),void 0!==r&&(o[e]=r)}else a&&!i&&(o[e]=n[e]);a===e in o&&o[e]===n[e]||(l=!0)}return l?o:n}_validate(e,t={},s,n){let{from:r=[],originalValue:i=e,recursive:a=this.spec.recursive}=t;t.from=[{schema:this,value:i},...r],t.__validating=!0,t.originalValue=i,super._validate(e,t,s,((e,r)=>{if(!a||!me(r))return void n(e,r);i=i||r;let o=[];for(let e of this._nodes){let s=this.fields[e];s&&!B.isRef(s)&&o.push(s.asNestedTest({options:t,key:e,parent:r,parentPath:t.path,originalParent:i}))}this.runTests({tests:o,value:r,originalValue:i,options:t},s,(t=>{n(t.sort(this._sortErrors).concat(e),r)}))}))}clone(e){const t=super.clone(e);return t.fields=Object.assign({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),s=t.fields;for(let[e,t]of Object.entries(this.fields)){const n=s[e];s[e]=void 0===n?t:n}return t.withMutation((e=>e.setFields(s,this._excludedEdges)))}_getDefault(){if("default"in this.spec)return super._getDefault();if(!this._nodes.length)return;let e={};return this._nodes.forEach((t=>{const s=this.fields[t];e[t]=s&&"getDefault"in s?s.getDefault():void 0})),e}setFields(e,t){let s=this.clone();return s.fields=e,s._nodes=function(e,t=[]){let s=[],n=new Set,r=new Set(t.map((([e,t])=>`${e}-${t}`)));function i(e,t){let i=p.split(e)[0];n.add(i),r.has(`${t}-${i}`)||s.push([t,i])}for(const t of Object.keys(e)){let s=e[t];n.add(t),B.isRef(s)&&s.isSibling?i(s.path,t):R(s)&&"deps"in s&&s.deps.forEach((e=>i(e,t)))}return O.array(Array.from(n),s).reverse()}(e,t),s._sortErrors=fe(Object.keys(e)),t&&(s._excludedEdges=t),s}shape(e,t=[]){return this.clone().withMutation((s=>{let n=s._excludedEdges;return t.length&&(Array.isArray(t[0])||(t=[t]),n=[...s._excludedEdges,...t]),s.setFields(Object.assign(s.fields,e),n)}))}partial(){const e={};for(const[t,s]of Object.entries(this.fields))e[t]="optional"in s&&s.optional instanceof Function?s.optional():s;return this.setFields(e)}deepPartial(){return pe(this)}pick(e){const t={};for(const s of e)this.fields[s]&&(t[s]=this.fields[s]);return this.setFields(t)}omit(e){const t=Object.assign({},this.fields);for(const s of e)delete t[s];return this.setFields(t)}from(e,t,s){let n=p.getter(e,!0);return this.transform((r=>{if(!r)return r;let i=r;return((e,t)=>{const s=[...p.normalizePath(t)];if(1===s.length)return s[0]in e;let n=s.pop(),r=p.getter(p.join(s),!0)(e);return!(!r||!(n in r))})(r,e)&&(i=Object.assign({},r),s||delete i[e],i[t]=n(r)),i}))}json(){return this.transform(de)}noUnknown(e=!0,t=q.noUnknown){"boolean"!=typeof e&&(t=e,e=!0);let s=this.test({name:"noUnknown",exclusive:!0,message:t,test(t){if(null==t)return!0;const s=function(e,t){let s=Object.keys(e.fields);return Object.keys(t).filter((e=>-1===s.indexOf(e)))}(this.schema,t);return!e||0===s.length||this.createError({params:{unknown:s.join(", ")}})}});return s.spec.noUnknown=e,s}unknown(e=!0,t=q.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform((t=>{if(!t)return t;const s={};for(const n of Object.keys(t))s[e(n)]=t[n];return s}))}camelCase(){return this.transformKeys(E)}snakeCase(){return this.transformKeys(_)}constantCase(){return this.transformKeys((e=>_(e).toUpperCase()))}describe(e){let t=super.describe(e);t.fields={};for(const[n,r]of Object.entries(this.fields)){var s;let i=e;null!=(s=i)&&s.value&&(i=Object.assign({},i,{parent:i.value,value:i.value[n]})),t.fields[n]=r.describe(i)}return t}}ge.prototype=ve.prototype;const be="#000639",xe='<svg width="40" height="41" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 10.5C0 4.977 4.477.5 10 .5h20c5.523 0 10 4.477 10 10v20c0 5.523-4.477 10-10 10H10c-5.523 0-10-4.477-10-10v-20Z" fill="#F1F1F1"/><path fill-rule="evenodd" clip-rule="evenodd" d="M25.927 15.78a.75.75 0 1 0-1.06-1.06l-4.793 4.793-4.793-4.793a.75.75 0 0 0-1.061 1.06l4.793 4.793-4.793 4.793a.75.75 0 1 0 1.06 1.061l4.794-4.793 4.793 4.793a.75.75 0 0 0 1.06-1.06l-4.793-4.794 4.793-4.793Z" fill="#000639"/></svg>';let we;function Fe(i){var a;!function(){if(document.head.querySelector(`#${s}`))return;const n=document.createElement("style");n.id=s,document.head.appendChild(n),n.textContent=`\n \n #${e}, #${e} * {\n margin: 0;\n padding: 0px;\n box-sizing: border-box;\n }\n \n #${t} {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n `}(),function(e){ge({local_amount:ae().required(),local_currency:re().required(),business_id:re().required(),reference:re().required(),callback_url:re(),mode:re().matches(/(test|live)/),meta:ge({email:re().ensure().email(),name:re().ensure().min(2)}).default(void 0)}).validateSync(e)}(i),we=i;const o=function(){const t=document.createElement("div");return t.id=e,t.style.position="fixed",t.style.top="0px",t.style.left="0px",t.style.width="100%",t.style.height="100%",t.style.zIndex="999999999",t.style.backgroundColor="rgba(0, 0, 0, 0.4)",t}(),u=function(){const e=document.createElement("div");return e.id=t,e.style.width="40px",e.style.height="40px",e.style.backgroundColor="transparent",e.style.border=`2px solid ${be}`,e.style.borderLeftColor="transparent",e.style.borderBottomColor="transparent",e.style.borderRadius="100%",e.animate([{transform:"rotate(0)"},{transform:"rotate(360deg)"}],{duration:300,iterations:1/0}),e}(),l=function(){const e=document.createElement("button");return e.id=n,e.setAttribute("type","button"),e.style.width="40px",e.style.height="40px",e.style.position="absolute",e.style.right="0",e.style.zIndex="40",e.style.backgroundColor="transparent",e.style.border="none",e.innerHTML=xe,e}();l.addEventListener("click",Ee),o.appendChild(u),o.appendChild(l);const c=function(){const e=document.createElement("iframe");return e.allow="clipboard-read; clipboard-write",e.style.width="100%",e.style.height="100%",e.style.position="absolute",e.style.left="50%",e.style.top="0px",e.style.transform="translate(-50%, 0)",e.style.zIndex="20",e}();o.appendChild(c),document.body.appendChild(o);const h=function(e,t){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(s[n[r]]=e[n[r]])}return s}(i,["onClose","onSuccess"]),f=function(e){const t=document.createElement("form");t.action=r,t.method="POST",t.style.display="none",(s=>{for(const s in e){if(!e.hasOwnProperty(s))continue;const n=e[s];if("object"==typeof n)for(const e in n){if(!n.hasOwnProperty(e))continue;const r=document.createElement("input");r.name=`${s}[${e}]`,r.value=String(n[e]),t.appendChild(r)}else{const e=document.createElement("input");e.name=s,e.value=String(n),t.appendChild(e)}}})();const s=document.createElement("input");s.name="displayMode",s.value="INLINE";const n=document.createElement("input");return n.name="parentOrigin",n.value=window.location.origin,t.appendChild(s),t.appendChild(n),t}(h);null===(a=c.contentDocument)||void 0===a||a.body.appendChild(f),f.submit(),window.addEventListener("message",_e)}function Ee(){const t=document.getElementById(e),s=document.getElementById(n);null==s||s.removeEventListener("click",Ee),window.removeEventListener("message",_e),t&&document.body.removeChild(t)}const _e=s=>{const i=new URL(r);if(s.origin===i.origin&&we){if("INITIALIZED"===s.data.status){const s=document.getElementById(e),r=document.getElementById(t),i=document.getElementById(n);if(!r||!i)return;null==s||s.removeChild(r),null==s||s.removeChild(i)}"CANCELLED"===s.data.status&&(Ee(),we.onClose&&we.onClose(s.data)),"COMPLETED"===s.data.status&&(Ee(),we.onSuccess&&we.onSuccess(s.data))}};export{Fe as default};
@@ -0,0 +1 @@
1
+ var BushaCommerce=function(){"use strict";const e="busha-commerce-container",t="busha-commerce-loader",s="busha-commerce-styles",n="busha-commerce-close-btn",r="https://staging.pay.busha.co/pay";function i(e){this._maxSize=e,this.clear()}i.prototype.clear=function(){this._size=0,this._values=Object.create(null)},i.prototype.get=function(e){return this._values[e]},i.prototype.set=function(e,t){return this._size>=this._maxSize&&this.clear(),e in this._values||this._size++,this._values[e]=t};var a=/[^.^\]^[]+|(?=\[\]|\.\.)/g,o=/^\d+$/,u=/^\d/,l=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,c=/^\s*(['"]?)(.*?)(\1)\s*$/,h=new i(512),f=new i(512),d=new i(512),p={Cache:i,split:y,normalizePath:m,setter:function(e){var t=m(e);return f.get(e)||f.set(e,(function(e,s){for(var n=0,r=t.length,i=e;n<r-1;){var a=t[n];if("__proto__"===a||"constructor"===a||"prototype"===a)return e;i=i[t[n++]]}i[t[n]]=s}))},getter:function(e,t){var s=m(e);return d.get(e)||d.set(e,(function(e){for(var n=0,r=s.length;n<r;){if(null==e&&t)return;e=e[s[n++]]}return e}))},join:function(e){return e.reduce((function(e,t){return e+(g(t)||o.test(t)?"["+t+"]":(e?".":"")+t)}),"")},forEach:function(e,t,s){!function(e,t,s){var n,r,i,a,o=e.length;for(r=0;r<o;r++)(n=e[r])&&(v(n)&&(n='"'+n+'"'),i=!(a=g(n))&&/^\d+$/.test(n),t.call(s,n,a,i,r,e))}(Array.isArray(e)?e:y(e),t,s)}};function m(e){return h.get(e)||h.set(e,y(e).map((function(e){return e.replace(c,"$2")})))}function y(e){return e.match(a)||[""]}function g(e){return"string"==typeof e&&e&&-1!==["'",'"'].indexOf(e.charAt(0))}function v(e){return!g(e)&&(function(e){return e.match(u)&&!e.match(o)}(e)||function(e){return l.test(e)}(e))}const b=/[A-Z\xc0-\xd6\xd8-\xde]?[a-z\xdf-\xf6\xf8-\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde]|$)|(?:[A-Z\xc0-\xd6\xd8-\xde]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde](?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])|$)|[A-Z\xc0-\xd6\xd8-\xde]?(?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\xc0-\xd6\xd8-\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\d*(?:1ST|2ND|3RD|(?![123])\dTH)(?=\b|[a-z_])|\d*(?:1st|2nd|3rd|(?![123])\dth)(?=\b|[A-Z_])|\d+|(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?)*/g,x=e=>e.match(b)||[],w=(e,t)=>x(e).join(t).toLowerCase(),F=e=>x(e).reduce(((e,t)=>`${e}${e?t[0].toUpperCase()+t.slice(1).toLowerCase():t.toLowerCase()}`),"");var E=F,_=e=>w(e,"_"),O={};function $(e,t){var s=e.length,n=new Array(s),r={},i=s,a=function(e){for(var t=new Map,s=0,n=e.length;s<n;s++){var r=e[s];t.has(r[0])||t.set(r[0],new Set),t.has(r[1])||t.set(r[1],new Set),t.get(r[0]).add(r[1])}return t}(t),o=function(e){for(var t=new Map,s=0,n=e.length;s<n;s++)t.set(e[s],s);return t}(e);for(t.forEach((function(e){if(!o.has(e[0])||!o.has(e[1]))throw new Error("Unknown node. There is an unknown node in the supplied edges.")}));i--;)r[i]||u(e[i],i,new Set);return n;function u(e,t,i){if(i.has(e)){var l;try{l=", node was:"+JSON.stringify(e)}catch(e){l=""}throw new Error("Cyclic dependency"+l)}if(!o.has(e))throw new Error("Found unknown node. Make sure to provided all involved nodes. Unknown node: "+JSON.stringify(e));if(!r[t]){r[t]=!0;var c=a.get(e)||new Set;if(t=(c=Array.from(c)).length){i.add(e);do{var h=c[--t];u(h,o.get(h),i)}while(t);i.delete(e)}n[--s]=e}}}({get exports(){return O},set exports(e){O=e}}).exports=function(e){return $(function(e){for(var t=new Set,s=0,n=e.length;s<n;s++){var r=e[s];t.add(r[0]),t.add(r[1])}return Array.from(t)}(e),e)},O.array=$;const k=Object.prototype.toString,T=Error.prototype.toString,A=RegExp.prototype.toString,D="undefined"!=typeof Symbol?Symbol.prototype.toString:()=>"",S=/^Symbol\((.*)\)(.*)$/;function C(e,t=!1){if(null==e||!0===e||!1===e)return""+e;const s=typeof e;if("number"===s)return function(e){return e!=+e?"NaN":0===e&&1/e<0?"-0":""+e}(e);if("string"===s)return t?`"${e}"`:e;if("function"===s)return"[Function "+(e.name||"anonymous")+"]";if("symbol"===s)return D.call(e).replace(S,"Symbol($1)");const n=k.call(e).slice(8,-1);return"Date"===n?isNaN(e.getTime())?""+e:e.toISOString(e):"Error"===n||e instanceof Error?"["+T.call(e)+"]":"RegExp"===n?A.call(e):null}function j(e,t){let s=C(e,t);return null!==s?s:JSON.stringify(e,(function(e,s){let n=C(this[e],t);return null!==n?n:s}),2)}function N(e){return null==e?[]:[].concat(e)}let z=/\$\{\s*(\w+)\s*\}/g;class I extends Error{static formatError(e,t){const s=t.label||t.path||"this";return s!==t.path&&(t=Object.assign({},t,{path:s})),"string"==typeof e?e.replace(z,((e,s)=>j(t[s]))):"function"==typeof e?e(t):e}static isError(e){return e&&"ValidationError"===e.name}constructor(e,t,s,n){super(),this.value=void 0,this.path=void 0,this.type=void 0,this.errors=void 0,this.params=void 0,this.inner=void 0,this.name="ValidationError",this.value=t,this.path=s,this.type=n,this.errors=[],this.inner=[],N(e).forEach((e=>{I.isError(e)?(this.errors.push(...e.errors),this.inner=this.inner.concat(e.inner.length?e.inner:e)):this.errors.push(e)})),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,I)}}let P={default:"${path} is invalid",required:"${path} is a required field",defined:"${path} must be defined",notNull:"${path} cannot be null",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:e,type:t,value:s,originalValue:n})=>{const r=null!=n&&n!==s?` (cast from the value \`${j(n,!0)}\`).`:".";return"mixed"!==t?`${e} must be a \`${t}\` type, but the final value was: \`${j(s,!0)}\``+r:`${e} must match the configured type. The validated value was: \`${j(s,!0)}\``+r}},V={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"},M={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"},L={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"},q={noUnknown:"${path} field has unspecified keys: ${unknown}"};Object.assign(Object.create(null),{mixed:P,string:V,number:M,date:L,object:q,array:{min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must have ${length} items"},boolean:{isValue:"${path} field must be ${value}"}});const R=e=>e&&e.__isYupSchema__;class Z{static fromOptions(e,t){if(!t.then&&!t.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:s,then:n,otherwise:r}=t,i="function"==typeof s?s:(...e)=>e.every((e=>e===s));return new Z(e,((e,t)=>{var s;let a=i(...e)?n:r;return null!=(s=null==a?void 0:a(t))?s:t}))}constructor(e,t){this.fn=void 0,this.refs=e,this.refs=e,this.fn=t}resolve(e,t){let s=this.refs.map((e=>e.getValue(null==t?void 0:t.value,null==t?void 0:t.parent,null==t?void 0:t.context))),n=this.fn(s,e,t);if(void 0===n||n===e)return e;if(!R(n))throw new TypeError("conditions must return a schema object");return n.resolve(t)}}const U="$",B=".";class Y{constructor(e,t={}){if(this.key=void 0,this.isContext=void 0,this.isValue=void 0,this.isSibling=void 0,this.path=void 0,this.getter=void 0,this.map=void 0,"string"!=typeof e)throw new TypeError("ref must be a string, got: "+e);if(this.key=e.trim(),""===e)throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===U,this.isValue=this.key[0]===B,this.isSibling=!this.isContext&&!this.isValue;let s=this.isContext?U:this.isValue?B:"";this.path=this.key.slice(s.length),this.getter=this.path&&p.getter(this.path,!0),this.map=t.map}getValue(e,t,s){let n=this.isContext?s:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,null==t?void 0:t.parent,null==t?void 0:t.context)}resolve(){return this}describe(){return{type:"ref",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}}Y.prototype.__isYupRef=!0;const J=e=>null==e;function K(e){function t({value:t,path:s="",options:n,originalValue:r,schema:i},a,o){const{name:u,test:l,params:c,message:h,skipAbsent:f}=e;let{parent:d,context:p,abortEarly:m=i.spec.abortEarly}=n;function y(e){return Y.isRef(e)?e.getValue(t,d,p):e}function g(e={}){const n=Object.assign({value:t,originalValue:r,label:i.spec.label,path:e.path||s,spec:i.spec},c,e.params);for(const e of Object.keys(n))n[e]=y(n[e]);const a=new I(I.formatError(e.message||h,n),t,n.path,e.type||u);return a.params=n,a}const v=m?a:o;let b={path:s,parent:d,type:u,from:n.from,createError:g,resolve:y,options:n,originalValue:r,schema:i};const x=e=>{I.isError(e)?v(e):e?o(null):v(g())},w=e=>{I.isError(e)?v(e):a(e)},F=f&&J(t);if(!n.sync){try{Promise.resolve(!!F||l.call(b,t,b)).then(x,w)}catch(e){w(e)}return}let E;try{var _;if(E=!!F||l.call(b,t,b),"function"==typeof(null==(_=E)?void 0:_.then))throw new Error(`Validation test of type: "${b.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(e){return void w(e)}x(E)}return t.OPTIONS=e,t}function H(e,t,s,n=s){let r,i,a;return t?(p.forEach(t,((o,u,l)=>{let c=u?o.slice(1,o.length-1):o,h="tuple"===(e=e.resolve({context:n,parent:r,value:s})).type,f=l?parseInt(c,10):0;if(e.innerType||h){if(h&&!l)throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part "${a}" must contain an index to the tuple element, e.g. "${a}[0]"`);if(s&&f>=s.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${o}, in the path: ${t}. because there is no value at that index. `);r=s,s=s&&s[f],e=h?e.spec.types[f]:e.innerType}if(!l){if(!e.fields||!e.fields[c])throw new Error(`The schema does not contain the path: ${t}. (failed at: ${a} which is a type: "${e.type}")`);r=s,s=s&&s[c],e=e.fields[c]}i=c,a=u?"["+o+"]":"."+o})),{schema:e,parent:r,parentPath:i}):{parent:r,parentPath:t,schema:e}}class G extends Set{describe(){const e=[];for(const t of this.values())e.push(Y.isRef(t)?t.describe():t);return e}resolveAll(e){let t=[];for(const s of this.values())t.push(e(s));return t}clone(){return new G(this.values())}merge(e,t){const s=this.clone();return e.forEach((e=>s.add(e))),t.forEach((e=>s.delete(e))),s}}function Q(e,t=new Map){if(R(e)||!e||"object"!=typeof e)return e;if(t.has(e))return t.get(e);let s;if(e instanceof Date)s=new Date(e.getTime()),t.set(e,s);else if(e instanceof RegExp)s=new RegExp(e),t.set(e,s);else if(Array.isArray(e)){s=new Array(e.length),t.set(e,s);for(let n=0;n<e.length;n++)s[n]=Q(e[n],t)}else if(e instanceof Map){s=new Map,t.set(e,s);for(const[n,r]of e.entries())s.set(n,Q(r,t))}else if(e instanceof Set){s=new Set,t.set(e,s);for(const n of e)s.add(Q(n,t))}else{if(!(e instanceof Object))throw Error(`Unable to clone ${e}`);s={},t.set(e,s);for(const[n,r]of Object.entries(e))s[n]=Q(r,t)}return s}class W{constructor(e){this.type=void 0,this.deps=[],this.tests=void 0,this.transforms=void 0,this.conditions=[],this._mutate=void 0,this.internalTests={},this._whitelist=new G,this._blacklist=new G,this.exclusiveTests=Object.create(null),this._typeCheck=void 0,this.spec=void 0,this.tests=[],this.transforms=[],this.withMutation((()=>{this.typeError(P.notType)})),this.type=e.type,this._typeCheck=e.check,this.spec=Object.assign({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,optional:!0,coerce:!0},null==e?void 0:e.spec),this.withMutation((e=>{e.nonNullable()}))}get _type(){return this.type}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;const t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeCheck=this._typeCheck,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.internalTests=Object.assign({},this.internalTests),t.exclusiveTests=Object.assign({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=Q(Object.assign({},this.spec,e)),t}label(e){let t=this.clone();return t.spec.label=e,t}meta(...e){if(0===e.length)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let s=e(this);return this._mutate=t,s}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&"mixed"!==this.type)throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${e.type}`);let t=this,s=e.clone();const n=Object.assign({},t.spec,s.spec);return s.spec=n,s.internalTests=Object.assign({},t.internalTests,s.internalTests),s._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),s._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),s.tests=t.tests,s.exclusiveTests=t.exclusiveTests,s.withMutation((t=>{e.tests.forEach((e=>{t.test(e.OPTIONS)}))})),s.transforms=[...t.transforms,...s.transforms],s}isType(e){return null==e?!(!this.spec.nullable||null!==e)||!(!this.spec.optional||void 0!==e):this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let s=t.conditions;t=t.clone(),t.conditions=[],t=s.reduce(((t,s)=>s.resolve(t,e)),t),t=t.resolve(e)}return t}resolveOptions(e){var t,s,n;return Object.assign({},e,{from:e.from||[],strict:null!=(t=e.strict)?t:this.spec.strict,abortEarly:null!=(s=e.abortEarly)?s:this.spec.abortEarly,recursive:null!=(n=e.recursive)?n:this.spec.recursive})}cast(e,t={}){let s=this.resolve(Object.assign({value:e},t)),n="ignore-optionality"===t.assert,r=s._cast(e,t);if(!1!==t.assert&&!s.isType(r)){if(n&&J(r))return r;let i=j(e),a=j(r);throw new TypeError(`The value of ${t.path||"field"} could not be cast to a value that satisfies the schema type: "${s.type}". \n\nattempted value: ${i} \n`+(a!==i?`result of cast: ${a}`:""))}return r}_cast(e,t){let s=void 0===e?e:this.transforms.reduce(((t,s)=>s.call(this,t,e,this)),e);return void 0===s&&(s=this.getDefault()),s}_validate(e,t={},s,n){let{path:r,originalValue:i=e,strict:a=this.spec.strict}=t,o=e;a||(o=this._cast(o,Object.assign({assert:!1},t)));let u=[];for(let e of Object.values(this.internalTests))e&&u.push(e);this.runTests({path:r,value:o,originalValue:i,options:t,tests:u},s,(e=>{if(e.length)return n(e,o);this.runTests({path:r,value:o,originalValue:i,options:t,tests:this.tests},s,n)}))}runTests(e,t,s){let n=!1,{tests:r,value:i,originalValue:a,path:o,options:u}=e,l=e=>{n||(n=!0,t(e,i))},c=e=>{n||(n=!0,s(e,i))},h=r.length,f=[];if(!h)return c([]);let d={value:i,originalValue:a,path:o,options:u,schema:this};for(let e=0;e<r.length;e++){(0,r[e])(d,l,(function(e){e&&(f=f.concat(e)),--h<=0&&c(f)}))}}asNestedTest({key:e,index:t,parent:s,parentPath:n,originalParent:r,options:i}){const a=null!=e?e:t;if(null==a)throw TypeError("Must include `key` or `index` for nested validations");const o="number"==typeof a;let u=s[a];const l=Object.assign({},i,{strict:!0,parent:s,value:u,originalValue:r[a],key:void 0,[o?"index":"key"]:a,path:o||a.includes(".")?`${n||""}[${u?a:`"${a}"`}]`:(n?`${n}.`:"")+e});return(e,t,s)=>this.resolve(l)._validate(u,l,t,s)}validate(e,t){let s=this.resolve(Object.assign({},t,{value:e}));return new Promise(((n,r)=>s._validate(e,t,((e,t)=>{I.isError(e)&&(e.value=t),r(e)}),((e,t)=>{e.length?r(new I(e,t)):n(t)}))))}validateSync(e,t){let s;return this.resolve(Object.assign({},t,{value:e}))._validate(e,Object.assign({},t,{sync:!0}),((e,t)=>{throw I.isError(e)&&(e.value=t),e}),((t,n)=>{if(t.length)throw new I(t,e);s=n})),s}isValid(e,t){return this.validate(e,t).then((()=>!0),(e=>{if(I.isError(e))return!1;throw e}))}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(e){if(I.isError(e))return!1;throw e}}_getDefault(){let e=this.spec.default;return null==e?e:"function"==typeof e?e.call(this):Q(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){if(0===arguments.length)return this._getDefault();return this.clone({default:e})}strict(e=!0){return this.clone({strict:e})}nullability(e,t){const s=this.clone({nullable:e});return s.internalTests.nullable=K({message:t,name:"nullable",test(e){return null!==e||this.schema.spec.nullable}}),s}optionality(e,t){const s=this.clone({optional:e});return s.internalTests.optionality=K({message:t,name:"optionality",test(e){return void 0!==e||this.schema.spec.optional}}),s}optional(){return this.optionality(!0)}defined(e=P.defined){return this.optionality(!1,e)}nullable(){return this.nullability(!0)}nonNullable(e=P.notNull){return this.nullability(!1,e)}required(e=P.required){return this.clone().withMutation((t=>t.nonNullable(e).defined(e)))}notRequired(){return this.clone().withMutation((e=>e.nullable().optional()))}transform(e){let t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(t=1===e.length?"function"==typeof e[0]?{test:e[0]}:e[0]:2===e.length?{name:e[0],test:e[1]}:{name:e[0],message:e[1],test:e[2]},void 0===t.message&&(t.message=P.default),"function"!=typeof t.test)throw new TypeError("`test` is a required parameters");let s=this.clone(),n=K(t),r=t.exclusive||t.name&&!0===s.exclusiveTests[t.name];if(t.exclusive&&!t.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return t.name&&(s.exclusiveTests[t.name]=!!t.exclusive),s.tests=s.tests.filter((e=>{if(e.OPTIONS.name===t.name){if(r)return!1;if(e.OPTIONS.test===n.OPTIONS.test)return!1}return!0})),s.tests.push(n),s}when(e,t){Array.isArray(e)||"string"==typeof e||(t=e,e=".");let s=this.clone(),n=N(e).map((e=>new Y(e)));return n.forEach((e=>{e.isSibling&&s.deps.push(e.key)})),s.conditions.push("function"==typeof t?new Z(n,t):Z.fromOptions(n,t)),s}typeError(e){let t=this.clone();return t.internalTests.typeError=K({message:e,name:"typeError",test(e){return!(!J(e)&&!this.schema._typeCheck(e))||this.createError({params:{type:this.schema.type}})}}),t}oneOf(e,t=P.oneOf){let s=this.clone();return e.forEach((e=>{s._whitelist.add(e),s._blacklist.delete(e)})),s.internalTests.whiteList=K({message:t,name:"oneOf",skipAbsent:!0,test(e){let t=this.schema._whitelist,s=t.resolveAll(this.resolve);return!!s.includes(e)||this.createError({params:{values:Array.from(t).join(", "),resolved:s}})}}),s}notOneOf(e,t=P.notOneOf){let s=this.clone();return e.forEach((e=>{s._blacklist.add(e),s._whitelist.delete(e)})),s.internalTests.blacklist=K({message:t,name:"notOneOf",test(e){let t=this.schema._blacklist,s=t.resolveAll(this.resolve);return!s.includes(e)||this.createError({params:{values:Array.from(t).join(", "),resolved:s}})}}),s}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(e){const t=(e?this.resolve(e):this).clone(),{label:s,meta:n,optional:r,nullable:i}=t.spec;return{meta:n,label:s,optional:r,nullable:i,default:t.getDefault(e),type:t.type,oneOf:t._whitelist.describe(),notOneOf:t._blacklist.describe(),tests:t.tests.map((e=>({name:e.OPTIONS.name,params:e.OPTIONS.params}))).filter(((e,t,s)=>s.findIndex((t=>t.name===e.name))===t))}}}W.prototype.__isYupSchema__=!0;for(const e of["validate","validateSync"])W.prototype[`${e}At`]=function(t,s,n={}){const{parent:r,parentPath:i,schema:a}=H(this,t,s,n.context);return a[e](r&&r[i],Object.assign({},n,{parent:r,path:t}))};for(const e of["equals","is"])W.prototype[e]=W.prototype.oneOf;for(const e of["not","nope"])W.prototype[e]=W.prototype.notOneOf;let X=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,ee=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,te=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,se=e=>J(e)||e===e.trim(),ne={}.toString();function re(){return new ie}class ie extends W{constructor(){super({type:"string",check:e=>(e instanceof String&&(e=e.valueOf()),"string"==typeof e)}),this.withMutation((()=>{this.transform(((e,t,s)=>{if(!s.spec.coerce||s.isType(e))return e;if(Array.isArray(e))return e;const n=null!=e&&e.toString?e.toString():e;return n===ne?e:n}))}))}required(e){return super.required(e).withMutation((t=>t.test({message:e||P.required,name:"required",skipAbsent:!0,test:e=>!!e.length})))}notRequired(){return super.notRequired().withMutation((e=>(e.tests=e.tests.filter((e=>"required"!==e.OPTIONS.name)),e)))}length(e,t=V.length){return this.test({message:t,name:"length",exclusive:!0,params:{length:e},skipAbsent:!0,test(t){return t.length===this.resolve(e)}})}min(e,t=V.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(t){return t.length>=this.resolve(e)}})}max(e,t=V.max){return this.test({name:"max",exclusive:!0,message:t,params:{max:e},skipAbsent:!0,test(t){return t.length<=this.resolve(e)}})}matches(e,t){let s,n,r=!1;return t&&("object"==typeof t?({excludeEmptyString:r=!1,message:s,name:n}=t):s=t),this.test({name:n||"matches",message:s||V.matches,params:{regex:e},skipAbsent:!0,test:t=>""===t&&r||-1!==t.search(e)})}email(e=V.email){return this.matches(X,{name:"email",message:e,excludeEmptyString:!0})}url(e=V.url){return this.matches(ee,{name:"url",message:e,excludeEmptyString:!0})}uuid(e=V.uuid){return this.matches(te,{name:"uuid",message:e,excludeEmptyString:!1})}ensure(){return this.default("").transform((e=>null===e?"":e))}trim(e=V.trim){return this.transform((e=>null!=e?e.trim():e)).test({message:e,name:"trim",test:se})}lowercase(e=V.lowercase){return this.transform((e=>J(e)?e:e.toLowerCase())).test({message:e,name:"string_case",exclusive:!0,skipAbsent:!0,test:e=>J(e)||e===e.toLowerCase()})}uppercase(e=V.uppercase){return this.transform((e=>J(e)?e:e.toUpperCase())).test({message:e,name:"string_case",exclusive:!0,skipAbsent:!0,test:e=>J(e)||e===e.toUpperCase()})}}re.prototype=ie.prototype;function ae(){return new oe}class oe extends W{constructor(){super({type:"number",check:e=>(e instanceof Number&&(e=e.valueOf()),"number"==typeof e&&!(e=>e!=+e)(e))}),this.withMutation((()=>{this.transform(((e,t,s)=>{if(!s.spec.coerce)return e;let n=e;if("string"==typeof n){if(n=n.replace(/\s/g,""),""===n)return NaN;n=+n}return s.isType(n)?n:parseFloat(n)}))}))}min(e,t=M.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(t){return t>=this.resolve(e)}})}max(e,t=M.max){return this.test({message:t,name:"max",exclusive:!0,params:{max:e},skipAbsent:!0,test(t){return t<=this.resolve(e)}})}lessThan(e,t=M.lessThan){return this.test({message:t,name:"max",exclusive:!0,params:{less:e},skipAbsent:!0,test(t){return t<this.resolve(e)}})}moreThan(e,t=M.moreThan){return this.test({message:t,name:"min",exclusive:!0,params:{more:e},skipAbsent:!0,test(t){return t>this.resolve(e)}})}positive(e=M.positive){return this.moreThan(0,e)}negative(e=M.negative){return this.lessThan(0,e)}integer(e=M.integer){return this.test({name:"integer",message:e,skipAbsent:!0,test:e=>Number.isInteger(e)})}truncate(){return this.transform((e=>J(e)?e:0|e))}round(e){var t;let s=["ceil","floor","round","trunc"];if("trunc"===(e=(null==(t=e)?void 0:t.toLowerCase())||"round"))return this.truncate();if(-1===s.indexOf(e.toLowerCase()))throw new TypeError("Only valid options for round() are: "+s.join(", "));return this.transform((t=>J(t)?t:Math[e](t)))}}ae.prototype=oe.prototype;var ue=/^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/;let le=new Date("");class ce extends W{constructor(){super({type:"date",check(e){return t=e,"[object Date]"===Object.prototype.toString.call(t)&&!isNaN(e.getTime());var t}}),this.withMutation((()=>{this.transform(((e,t,s)=>!s.spec.coerce||s.isType(e)?e:(e=function(e){var t,s,n=[1,4,5,6,7,10,11],r=0;if(s=ue.exec(e)){for(var i,a=0;i=n[a];++a)s[i]=+s[i]||0;s[2]=(+s[2]||1)-1,s[3]=+s[3]||1,s[7]=s[7]?String(s[7]).substr(0,3):0,void 0!==s[8]&&""!==s[8]||void 0!==s[9]&&""!==s[9]?("Z"!==s[8]&&void 0!==s[9]&&(r=60*s[10]+s[11],"+"===s[9]&&(r=0-r)),t=Date.UTC(s[1],s[2],s[3],s[4],s[5]+r,s[6],s[7])):t=+new Date(s[1],s[2],s[3],s[4],s[5],s[6],s[7])}else t=Date.parse?Date.parse(e):NaN;return t}(e),isNaN(e)?ce.INVALID_DATE:new Date(e))))}))}prepareParam(e,t){let s;if(Y.isRef(e))s=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\`${t}\` must be a Date or a value that can be \`cast()\` to a Date`);s=n}return s}min(e,t=L.min){let s=this.prepareParam(e,"min");return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(e){return e>=this.resolve(s)}})}max(e,t=L.max){let s=this.prepareParam(e,"max");return this.test({message:t,name:"max",exclusive:!0,params:{max:e},skipAbsent:!0,test(e){return e<=this.resolve(s)}})}}function he(e,t){let s=1/0;return e.some(((e,n)=>{var r;if(null!=(r=t.path)&&r.includes(e))return s=n,!0})),s}function fe(e){return(t,s)=>he(e,t)-he(e,s)}ce.INVALID_DATE=le,ce.prototype;const de=(e,t,s)=>{if("string"!=typeof e)return e;let n=e;try{n=JSON.parse(e)}catch(e){}return s.isType(n)?n:e};function pe(e){if("fields"in e){const t={};for(const[s,n]of Object.entries(e.fields))t[s]=pe(n);return e.setFields(t)}if("array"===e.type){const t=e.optional();return t.innerType&&(t.innerType=pe(t.innerType)),t}return"tuple"===e.type?e.optional().clone({types:e.spec.types.map(pe)}):"optional"in e?e.optional():e}let me=e=>"[object Object]"===Object.prototype.toString.call(e);const ye=fe([]);function ge(e){return new ve(e)}class ve extends W{constructor(e){super({type:"object",check:e=>me(e)||"function"==typeof e}),this.fields=Object.create(null),this._sortErrors=ye,this._nodes=[],this._excludedEdges=[],this.withMutation((()=>{e&&this.shape(e)}))}_cast(e,t={}){var s;let n=super._cast(e,t);if(void 0===n)return this.getDefault();if(!this._typeCheck(n))return n;let r=this.fields,i=null!=(s=t.stripUnknown)?s:this.spec.noUnknown,a=[].concat(this._nodes,Object.keys(n).filter((e=>!this._nodes.includes(e)))),o={},u=Object.assign({},t,{parent:o,__validating:t.__validating||!1}),l=!1;for(const e of a){let s=r[e],a=e in n;if(s){let r,i=n[e];u.path=(t.path?`${t.path}.`:"")+e,s=s.resolve({value:i,context:t.context,parent:o});let a=s instanceof W?s.spec:void 0,c=null==a?void 0:a.strict;if(null!=a&&a.strip){l=l||e in n;continue}r=t.__validating&&c?n[e]:s.cast(n[e],u),void 0!==r&&(o[e]=r)}else a&&!i&&(o[e]=n[e]);a===e in o&&o[e]===n[e]||(l=!0)}return l?o:n}_validate(e,t={},s,n){let{from:r=[],originalValue:i=e,recursive:a=this.spec.recursive}=t;t.from=[{schema:this,value:i},...r],t.__validating=!0,t.originalValue=i,super._validate(e,t,s,((e,r)=>{if(!a||!me(r))return void n(e,r);i=i||r;let o=[];for(let e of this._nodes){let s=this.fields[e];s&&!Y.isRef(s)&&o.push(s.asNestedTest({options:t,key:e,parent:r,parentPath:t.path,originalParent:i}))}this.runTests({tests:o,value:r,originalValue:i,options:t},s,(t=>{n(t.sort(this._sortErrors).concat(e),r)}))}))}clone(e){const t=super.clone(e);return t.fields=Object.assign({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),s=t.fields;for(let[e,t]of Object.entries(this.fields)){const n=s[e];s[e]=void 0===n?t:n}return t.withMutation((e=>e.setFields(s,this._excludedEdges)))}_getDefault(){if("default"in this.spec)return super._getDefault();if(!this._nodes.length)return;let e={};return this._nodes.forEach((t=>{const s=this.fields[t];e[t]=s&&"getDefault"in s?s.getDefault():void 0})),e}setFields(e,t){let s=this.clone();return s.fields=e,s._nodes=function(e,t=[]){let s=[],n=new Set,r=new Set(t.map((([e,t])=>`${e}-${t}`)));function i(e,t){let i=p.split(e)[0];n.add(i),r.has(`${t}-${i}`)||s.push([t,i])}for(const t of Object.keys(e)){let s=e[t];n.add(t),Y.isRef(s)&&s.isSibling?i(s.path,t):R(s)&&"deps"in s&&s.deps.forEach((e=>i(e,t)))}return O.array(Array.from(n),s).reverse()}(e,t),s._sortErrors=fe(Object.keys(e)),t&&(s._excludedEdges=t),s}shape(e,t=[]){return this.clone().withMutation((s=>{let n=s._excludedEdges;return t.length&&(Array.isArray(t[0])||(t=[t]),n=[...s._excludedEdges,...t]),s.setFields(Object.assign(s.fields,e),n)}))}partial(){const e={};for(const[t,s]of Object.entries(this.fields))e[t]="optional"in s&&s.optional instanceof Function?s.optional():s;return this.setFields(e)}deepPartial(){return pe(this)}pick(e){const t={};for(const s of e)this.fields[s]&&(t[s]=this.fields[s]);return this.setFields(t)}omit(e){const t=Object.assign({},this.fields);for(const s of e)delete t[s];return this.setFields(t)}from(e,t,s){let n=p.getter(e,!0);return this.transform((r=>{if(!r)return r;let i=r;return((e,t)=>{const s=[...p.normalizePath(t)];if(1===s.length)return s[0]in e;let n=s.pop(),r=p.getter(p.join(s),!0)(e);return!(!r||!(n in r))})(r,e)&&(i=Object.assign({},r),s||delete i[e],i[t]=n(r)),i}))}json(){return this.transform(de)}noUnknown(e=!0,t=q.noUnknown){"boolean"!=typeof e&&(t=e,e=!0);let s=this.test({name:"noUnknown",exclusive:!0,message:t,test(t){if(null==t)return!0;const s=function(e,t){let s=Object.keys(e.fields);return Object.keys(t).filter((e=>-1===s.indexOf(e)))}(this.schema,t);return!e||0===s.length||this.createError({params:{unknown:s.join(", ")}})}});return s.spec.noUnknown=e,s}unknown(e=!0,t=q.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform((t=>{if(!t)return t;const s={};for(const n of Object.keys(t))s[e(n)]=t[n];return s}))}camelCase(){return this.transformKeys(E)}snakeCase(){return this.transformKeys(_)}constantCase(){return this.transformKeys((e=>_(e).toUpperCase()))}describe(e){let t=super.describe(e);t.fields={};for(const[n,r]of Object.entries(this.fields)){var s;let i=e;null!=(s=i)&&s.value&&(i=Object.assign({},i,{parent:i.value,value:i.value[n]})),t.fields[n]=r.describe(i)}return t}}ge.prototype=ve.prototype;const be="#000639",xe='<svg width="40" height="41" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 10.5C0 4.977 4.477.5 10 .5h20c5.523 0 10 4.477 10 10v20c0 5.523-4.477 10-10 10H10c-5.523 0-10-4.477-10-10v-20Z" fill="#F1F1F1"/><path fill-rule="evenodd" clip-rule="evenodd" d="M25.927 15.78a.75.75 0 1 0-1.06-1.06l-4.793 4.793-4.793-4.793a.75.75 0 0 0-1.061 1.06l4.793 4.793-4.793 4.793a.75.75 0 1 0 1.06 1.061l4.794-4.793 4.793 4.793a.75.75 0 0 0 1.06-1.06l-4.793-4.794 4.793-4.793Z" fill="#000639"/></svg>';let we;function Fe(){const t=document.getElementById(e),s=document.getElementById(n);null==s||s.removeEventListener("click",Fe),window.removeEventListener("message",Ee),t&&document.body.removeChild(t)}const Ee=s=>{const i=new URL(r);if(s.origin===i.origin&&we){if("INITIALIZED"===s.data.status){const s=document.getElementById(e),r=document.getElementById(t),i=document.getElementById(n);if(!r||!i)return;null==s||s.removeChild(r),null==s||s.removeChild(i)}"CANCELLED"===s.data.status&&(Fe(),we.onClose&&we.onClose(s.data)),"COMPLETED"===s.data.status&&(Fe(),we.onSuccess&&we.onSuccess(s.data))}};return function(i){var a;!function(){if(document.head.querySelector(`#${s}`))return;const n=document.createElement("style");n.id=s,document.head.appendChild(n),n.textContent=`\n \n #${e}, #${e} * {\n margin: 0;\n padding: 0px;\n box-sizing: border-box;\n }\n \n #${t} {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n `}(),function(e){ge({local_amount:ae().required(),local_currency:re().required(),business_id:re().required(),reference:re().required(),callback_url:re(),mode:re().matches(/(test|live)/),meta:ge({email:re().ensure().email(),name:re().ensure().min(2)}).default(void 0)}).validateSync(e)}(i),we=i;const o=function(){const t=document.createElement("div");return t.id=e,t.style.position="fixed",t.style.top="0px",t.style.left="0px",t.style.width="100%",t.style.height="100%",t.style.zIndex="999999999",t.style.backgroundColor="rgba(0, 0, 0, 0.4)",t}(),u=function(){const e=document.createElement("div");return e.id=t,e.style.width="40px",e.style.height="40px",e.style.backgroundColor="transparent",e.style.border=`2px solid ${be}`,e.style.borderLeftColor="transparent",e.style.borderBottomColor="transparent",e.style.borderRadius="100%",e.animate([{transform:"rotate(0)"},{transform:"rotate(360deg)"}],{duration:300,iterations:1/0}),e}(),l=function(){const e=document.createElement("button");return e.id=n,e.setAttribute("type","button"),e.style.width="40px",e.style.height="40px",e.style.position="absolute",e.style.right="0",e.style.zIndex="40",e.style.backgroundColor="transparent",e.style.border="none",e.innerHTML=xe,e}();l.addEventListener("click",Fe),o.appendChild(u),o.appendChild(l);const c=function(){const e=document.createElement("iframe");return e.allow="clipboard-read; clipboard-write",e.style.width="100%",e.style.height="100%",e.style.position="absolute",e.style.left="50%",e.style.top="0px",e.style.transform="translate(-50%, 0)",e.style.zIndex="20",e}();o.appendChild(c),document.body.appendChild(o);const h=function(e){const t=document.createElement("form");t.action=r,t.method="POST",t.style.display="none",(s=>{for(const s in e){if(!e.hasOwnProperty(s))continue;const n=e[s];if("object"==typeof n)for(const e in n){if(!n.hasOwnProperty(e))continue;const r=document.createElement("input");r.name=`${s}[${e}]`,r.value=String(n[e]),t.appendChild(r)}else{const e=document.createElement("input");e.name=s,e.value=String(n),t.appendChild(e)}}})();const s=document.createElement("input");s.name="displayMode",s.value="INLINE";const n=document.createElement("input");return n.name="parentOrigin",n.value=window.location.origin,t.appendChild(s),t.appendChild(n),t}(function(e,t){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(s[n[r]]=e[n[r]])}return s}(i,["onClose","onSuccess"]));null===(a=c.contentDocument)||void 0===a||a.body.appendChild(h),h.submit(),window.addEventListener("message",Ee)}}();
@@ -0,0 +1,18 @@
1
+ export type MessageType = {
2
+ status: string;
3
+ data?: any;
4
+ };
5
+ export interface BushaCommercePayload {
6
+ local_amount: number;
7
+ local_currency: string;
8
+ meta?: {
9
+ email?: string;
10
+ name?: string;
11
+ };
12
+ business_id: string;
13
+ reference: string;
14
+ callback_url: string;
15
+ mode?: "test" | "live";
16
+ onClose?: (d?: any) => void;
17
+ onSuccess: (d?: any) => void;
18
+ }
@@ -0,0 +1,238 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>Busha Commerce - Demo Basic</title>
9
+
10
+ <script src="https://cdn.tailwindcss.com"></script>
11
+
12
+ <style>
13
+ @font-face {
14
+ font-family: "Roobert";
15
+ src: url("https://res.cloudinary.com/busha-inc/raw/upload/v1651833681/fonts/Roobert/Roobert-Light.otf");
16
+ font-weight: 300;
17
+ }
18
+
19
+ @font-face {
20
+ font-family: "Roobert";
21
+ src: url("https://res.cloudinary.com/busha-inc/raw/upload/v1651833681/fonts/Roobert/Roobert-Regular.otf");
22
+ font-weight: normal;
23
+ }
24
+
25
+ @font-face {
26
+ font-family: "Roobert";
27
+ src: url("https://res.cloudinary.com/busha-inc/raw/upload/v1651833681/fonts/Roobert/Roobert-Medium.otf");
28
+ font-weight: 500;
29
+ }
30
+
31
+ @font-face {
32
+ font-family: "Roobert";
33
+ src: url("https://res.cloudinary.com/busha-inc/raw/upload/v1651833681/fonts/Roobert/Roobert-SemiBold.otf");
34
+ font-weight: 600;
35
+ }
36
+
37
+ @font-face {
38
+ font-family: "Roobert";
39
+ src: url("https://res.cloudinary.com/busha-inc/raw/upload/v1651833681/fonts/Roobert/Roobert-Bold.otf");
40
+ font-weight: bold;
41
+ }
42
+
43
+ @font-face {
44
+ font-family: "Roobert";
45
+ src: url("https://res.cloudinary.com/busha-inc/raw/upload/v1651833681/fonts/Roobert/Roobert-Heavy.otf");
46
+ font-weight: 900;
47
+ }
48
+
49
+ * {
50
+ margin: 0;
51
+ padding: 0px;
52
+ box-sizing: border-box;
53
+ }
54
+
55
+ html {
56
+ font-size: 10px;
57
+ }
58
+
59
+ html,
60
+ body,
61
+ button {
62
+ margin: 0;
63
+ font-family: "Roobert", -apple-system, BlinkMacSystemFont, "Segoe UI",
64
+ "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans",
65
+ "Helvetica Neue", sans-serif;
66
+ }
67
+
68
+ body {
69
+ -webkit-font-smoothing: antialiased;
70
+ -moz-osx-font-smoothing: grayscale;
71
+ font-size: 1rem;
72
+
73
+ color: #000639;
74
+ }
75
+
76
+ button,
77
+ a {
78
+ cursor: pointer;
79
+ }
80
+
81
+ code {
82
+ font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
83
+ monospace;
84
+ }
85
+ </style>
86
+
87
+ <style>
88
+ h1 {
89
+ font-size: 2rem !important;
90
+ margin-bottom: 20px !important;
91
+ }
92
+
93
+ form {
94
+ width: 50%;
95
+ gap: 24px;
96
+ }
97
+
98
+ label {
99
+ font-size: 1.4rem;
100
+ margin-bottom: 8px;
101
+ }
102
+
103
+ input,
104
+ select {
105
+ height: 40px;
106
+ border-radius: 4px;
107
+ font-size: 1.4rem !important;
108
+ padding: 0px 10px !important;
109
+ }
110
+
111
+ button[type="submit"] {
112
+ border-radius: 20px;
113
+ font-size: 1.4rem;
114
+ height: 40px;
115
+ font-weight: 500;
116
+ }
117
+ </style>
118
+ </head>
119
+
120
+ <body>
121
+
122
+ <main class="w-full min-h-screen">
123
+ <h1 class="text-center font-medium">Demo Payment Page</h1>
124
+
125
+ <form class="w-[50%] mx-auto flex flex-col gap-[24px]" id="form">
126
+
127
+ <div class="flex flex-col">
128
+ <label for="local_amount">Amount</label>
129
+ <input type="text" name="local_amount" id="local_amount" placeholder="0" value="20000"
130
+ class="block border">
131
+ </div>
132
+
133
+
134
+ <div class="flex flex-col">
135
+ <label>Currency</label>
136
+ <input type="text" name="local_currency" id="local_currency" placeholder="NGN" value="NGN"
137
+ class="block border">
138
+
139
+ </div>
140
+
141
+ <div class="flex flex-col">
142
+ <label>Business ID</label>
143
+ <input type="text" name="business_id" id="business_id" placeholder="1234" value="" class="block border">
144
+ </div>
145
+
146
+ <div class="flex flex-col">
147
+ <label>Customer email</label>
148
+ <input type="text" name="meta[email]" id="email" placeholder="bolaji@busha.co" value="bolaji@busha.co"
149
+ class="block border">
150
+ </div>
151
+
152
+ <div class="flex flex-col">
153
+ <label>Customer name</label>
154
+ <input type="text" name="meta[name]" id="name" placeholder="Abolaji Bisiriyu" value="Abolaji Bisiriyu"
155
+ class="block border">
156
+ </div>
157
+
158
+
159
+ <div class="flex flex-col">
160
+ <label>Reference</label>
161
+ <input type="text" name="reference" id="reference" placeholder="charge reference" value=""
162
+ class="block border">
163
+ </div>
164
+
165
+ <div class="flex flex-col">
166
+ <label>Mode</label>
167
+ <select type="text" name="mode" id="mode" value="test" class="block border">
168
+ <option value="test">Test</option>
169
+ <option value="live">Live</option>
170
+ </select>
171
+ </div>
172
+
173
+ <button type="submit" class="bg-green-900 text-white">Pay</button>
174
+
175
+ </form>
176
+ </main>
177
+
178
+ <script src="../../dist/index.min.js"></script>
179
+
180
+
181
+
182
+ <script>
183
+ (function () {
184
+
185
+ const form = document.getElementById("form");
186
+
187
+ form.addEventListener("submit", (e) => {
188
+ e.preventDefault();
189
+
190
+ const BushaCommerce = window.BushaCommerce;
191
+
192
+ if (BushaCommerce) {
193
+ console.log("up and runinng!");
194
+
195
+ const name = document.getElementById("name").value
196
+ const email = document.getElementById("email").value
197
+
198
+ const payload = {
199
+ reference: document.getElementById("reference").value || `Demo_ref_${new Date().getTime()}`,
200
+ business_id: document.getElementById("business_id").value,
201
+ local_amount: Number(document.getElementById("local_amount").value),
202
+ local_currency: document.getElementById("local_currency").value,
203
+ mode: document.getElementById("mode").value,
204
+ onClose: () => {
205
+ console.log("Payment cancelled!");
206
+ document.getElementById("reference").value = `Demo_ref_${new Date().getTime()}`
207
+ },
208
+ onSuccess: (d) => {
209
+ console.log(d);
210
+ }
211
+ }
212
+
213
+ if (name || email) {
214
+ payload.meta = {}
215
+
216
+ if (name) {
217
+ payload.meta.name = name;
218
+ }
219
+
220
+ if (email) {
221
+ payload.meta.email = email;
222
+ }
223
+ }
224
+
225
+ BushaCommerce(payload)
226
+
227
+ // console.log(res);
228
+ }
229
+ })
230
+
231
+
232
+ }())
233
+ </script>
234
+
235
+
236
+ </body>
237
+
238
+ </html>
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "devDependencies": {
3
+ "@rollup/plugin-commonjs": "^24.0.1",
4
+ "@rollup/plugin-node-resolve": "^15.0.1",
5
+ "@rollup/plugin-replace": "^5.0.2",
6
+ "@rollup/plugin-terser": "^0.4.0",
7
+ "@rollup/plugin-typescript": "^11.0.0",
8
+ "@types/node": "^18.14.0",
9
+ "rollup": "^3.17.2",
10
+ "tslib": "^2.5.0"
11
+ },
12
+ "scripts": {
13
+ "build": "rollup -c rollup.config.ts --configPlugin typescript",
14
+ "start": "rollup -w -c rollup.config.ts --configPlugin typescript"
15
+ },
16
+ "dependencies": {
17
+ "dotenv": "^16.0.3",
18
+ "typescript": "^4.9.5",
19
+ "yup": "^1.0.0"
20
+ },
21
+ "name": "@busha/commerce-js",
22
+ "description": "Busha commerce js library",
23
+ "version": "1.0.0",
24
+ "main": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "directories": {
27
+ "example": "example"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/bushaHQ/commerce-js.git"
32
+ },
33
+ "keywords": [
34
+ "Busha",
35
+ "BushaCommerce.js"
36
+ ],
37
+ "author": "Busha (https://busha.co)",
38
+ "license": "MIT",
39
+ "bugs": {
40
+ "url": "https://github.com/bushaHQ/commerce-js/issues"
41
+ },
42
+ "homepage": "https://github.com/bushaHQ/commerce-js#readme"
43
+ }
@@ -0,0 +1,40 @@
1
+ import type { RollupOptions } from "rollup";
2
+ import typescript from "@rollup/plugin-typescript";
3
+ import terser from "@rollup/plugin-terser";
4
+ import { nodeResolve } from "@rollup/plugin-node-resolve";
5
+ import commonjs from "@rollup/plugin-commonjs";
6
+ import * as dotenv from "dotenv";
7
+ import replace from "@rollup/plugin-replace";
8
+
9
+ dotenv.config();
10
+
11
+ const config: RollupOptions = {
12
+ input: "src/index.ts",
13
+ output: [
14
+ {
15
+ dir: "dist",
16
+ },
17
+ {
18
+ file: "dist/index.min.js",
19
+ name: "BushaCommerce",
20
+ format: "iife",
21
+ },
22
+ ],
23
+
24
+ plugins: [
25
+ replace({
26
+ "process.env.PAYMENT_UI": JSON.stringify(process.env.PAYMENT_UI),
27
+ preventAssignment: true,
28
+ }),
29
+ typescript({
30
+ declaration: true,
31
+ declarationDir: "dist",
32
+ rootDir: "src",
33
+ }),
34
+ terser(),
35
+ nodeResolve(),
36
+ commonjs(),
37
+ ],
38
+ };
39
+
40
+ export default config;
@@ -0,0 +1 @@
1
+ export const dark = "#000639";
@@ -0,0 +1 @@
1
+ export const close = `<svg width="40" height="41" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 10.5C0 4.977 4.477.5 10 .5h20c5.523 0 10 4.477 10 10v20c0 5.523-4.477 10-10 10H10c-5.523 0-10-4.477-10-10v-20Z" fill="#F1F1F1"/><path fill-rule="evenodd" clip-rule="evenodd" d="M25.927 15.78a.75.75 0 1 0-1.06-1.06l-4.793 4.793-4.793-4.793a.75.75 0 0 0-1.061 1.06l4.793 4.793-4.793 4.793a.75.75 0 1 0 1.06 1.061l4.794-4.793 4.793 4.793a.75.75 0 0 0 1.06-1.06l-4.793-4.794 4.793-4.793Z" fill="#000639"/></svg>`;
@@ -0,0 +1,12 @@
1
+ export const CONTAINER_ID = "busha-commerce-container";
2
+ export const LOADER_ID = "busha-commerce-loader";
3
+ export const STYLESHEET_ID = "busha-commerce-styles";
4
+ export const CLOSE_BUTTON_ID = "busha-commerce-close-btn";
5
+
6
+ export const PAY_UI = process.env.PAYMENT_UI;
7
+
8
+ export const INITIALIZED_STATUS = "INITIALIZED";
9
+
10
+ export const CANCELLED_STATUS = "CANCELLED";
11
+
12
+ export const COMPLETED_STATUS = "COMPLETED";
package/src/helper.ts ADDED
@@ -0,0 +1,177 @@
1
+ import { object, number, string } from "yup";
2
+
3
+ import { dark } from "./constants/colors";
4
+ import {
5
+ STYLESHEET_ID,
6
+ CONTAINER_ID,
7
+ LOADER_ID,
8
+ CLOSE_BUTTON_ID,
9
+ PAY_UI,
10
+ } from "./constants/variables";
11
+ import { BushaCommercePayload } from "./types";
12
+ import { close } from "./constants/icons";
13
+
14
+ export function injectGlobalStyles() {
15
+ const sheet = document.head.querySelector(`#${STYLESHEET_ID}`);
16
+
17
+ if (sheet) return;
18
+
19
+ const styleEl = document.createElement("style");
20
+ styleEl.id = STYLESHEET_ID;
21
+
22
+ document.head.appendChild(styleEl);
23
+
24
+ styleEl.textContent = `
25
+
26
+ #${CONTAINER_ID}, #${CONTAINER_ID} * {
27
+ margin: 0;
28
+ padding: 0px;
29
+ box-sizing: border-box;
30
+ }
31
+
32
+ #${LOADER_ID} {
33
+ position: absolute;
34
+ top: 50%;
35
+ left: 50%;
36
+ transform: translate(-50%, -50%);
37
+ }
38
+ `;
39
+
40
+ // return styleEl;
41
+ }
42
+
43
+ export function validatePayload(p: BushaCommercePayload) {
44
+ const chargePayloadSchema = object({
45
+ local_amount: number().required(),
46
+ local_currency: string().required(),
47
+ business_id: string().required(),
48
+ reference: string().required(),
49
+ callback_url: string(), //.required(),
50
+ mode: string().matches(/(test|live)/),
51
+ meta: object({
52
+ email: string().ensure().email(),
53
+ name: string().ensure().min(2),
54
+ }).default(undefined),
55
+ });
56
+
57
+ return chargePayloadSchema.validateSync(p);
58
+ }
59
+
60
+ export function createContainerEl() {
61
+ const containerEl = document.createElement("div");
62
+ containerEl.id = CONTAINER_ID;
63
+ containerEl.style.position = "fixed";
64
+ containerEl.style.top = "0px";
65
+ containerEl.style.left = "0px";
66
+ containerEl.style.width = "100%";
67
+ containerEl.style.height = "100%";
68
+ containerEl.style.zIndex = "999999999";
69
+ containerEl.style.backgroundColor = "rgba(0, 0, 0, 0.4)";
70
+
71
+ return containerEl;
72
+ }
73
+
74
+ export function createCloseBtnEl() {
75
+ const closeBtnEl = document.createElement("button");
76
+ closeBtnEl.id = CLOSE_BUTTON_ID;
77
+ closeBtnEl.setAttribute("type", "button");
78
+ closeBtnEl.style.width = "40px";
79
+ closeBtnEl.style.height = "40px";
80
+ closeBtnEl.style.position = "absolute";
81
+ closeBtnEl.style.right = "0";
82
+ closeBtnEl.style.zIndex = "40";
83
+ closeBtnEl.style.backgroundColor = "transparent";
84
+ closeBtnEl.style.border = "none";
85
+ closeBtnEl.innerHTML = close;
86
+
87
+ return closeBtnEl;
88
+ }
89
+
90
+ export function createSpinnerEl() {
91
+ const spinnerEl = document.createElement("div");
92
+ spinnerEl.id = LOADER_ID;
93
+ spinnerEl.style.width = "40px";
94
+ spinnerEl.style.height = "40px";
95
+ spinnerEl.style.backgroundColor = "transparent";
96
+ spinnerEl.style.border = `2px solid ${dark}`;
97
+ spinnerEl.style.borderLeftColor = "transparent";
98
+ spinnerEl.style.borderBottomColor = "transparent";
99
+ spinnerEl.style.borderRadius = "100%";
100
+ spinnerEl.animate(
101
+ [{ transform: "rotate(0)" }, { transform: "rotate(360deg)" }],
102
+ {
103
+ duration: 300,
104
+ iterations: Infinity,
105
+ }
106
+ );
107
+
108
+ return spinnerEl;
109
+ }
110
+
111
+ export function createIframeEl() {
112
+ const iframeEl = document.createElement("iframe");
113
+ iframeEl.allow = "clipboard-read; clipboard-write";
114
+ iframeEl.style.width = "100%";
115
+ // iframeEl.style.maxWidth = "100%";
116
+ iframeEl.style.height = "100%";
117
+ // iframeEl.style.border = "red";
118
+ iframeEl.style.position = "absolute";
119
+ iframeEl.style.left = "50%";
120
+ iframeEl.style.top = "0px";
121
+ iframeEl.style.transform = "translate(-50%, 0)";
122
+ iframeEl.style.zIndex = "20";
123
+
124
+ return iframeEl;
125
+ }
126
+
127
+ type FormPayload = Omit<BushaCommercePayload, "onClose" | "onSuccess">;
128
+
129
+ export function createFormEl(payload: FormPayload) {
130
+ const formEl = document.createElement("form");
131
+ formEl.action = PAY_UI ?? "";
132
+ formEl.method = "POST";
133
+ formEl.style.display = "none";
134
+
135
+ const parsePayload = (p: FormPayload) => {
136
+ for (const key in payload) {
137
+ if (!payload.hasOwnProperty(key)) continue;
138
+
139
+ const paymentParamValue = payload[key as keyof FormPayload];
140
+
141
+ if (typeof paymentParamValue === "object") {
142
+ for (const _key in paymentParamValue) {
143
+ if (!paymentParamValue.hasOwnProperty(_key)) continue;
144
+
145
+ const inputEl = document.createElement("input");
146
+ inputEl.name = `${key}[${_key}]`;
147
+ inputEl.value = String((paymentParamValue as any)[_key]);
148
+
149
+ formEl.appendChild(inputEl);
150
+ }
151
+ } else {
152
+ const inputEl = document.createElement("input");
153
+ inputEl.name = key;
154
+ inputEl.value = String(paymentParamValue);
155
+
156
+ formEl.appendChild(inputEl);
157
+ }
158
+ }
159
+ };
160
+
161
+ parsePayload(payload);
162
+
163
+ const displayMode = "INLINE";
164
+
165
+ const displayModeInputEl = document.createElement("input");
166
+ displayModeInputEl.name = "displayMode";
167
+ displayModeInputEl.value = displayMode;
168
+
169
+ const parentOriginInputEl = document.createElement("input");
170
+ parentOriginInputEl.name = "parentOrigin";
171
+ parentOriginInputEl.value = window.location.origin;
172
+
173
+ formEl.appendChild(displayModeInputEl);
174
+ formEl.appendChild(parentOriginInputEl);
175
+
176
+ return formEl;
177
+ }
package/src/index.ts ADDED
@@ -0,0 +1,104 @@
1
+ import {
2
+ CANCELLED_STATUS,
3
+ CLOSE_BUTTON_ID,
4
+ COMPLETED_STATUS,
5
+ CONTAINER_ID,
6
+ INITIALIZED_STATUS,
7
+ LOADER_ID,
8
+ PAY_UI,
9
+ } from "./constants/variables";
10
+ import {
11
+ injectGlobalStyles,
12
+ validatePayload,
13
+ createContainerEl,
14
+ createSpinnerEl,
15
+ createCloseBtnEl,
16
+ createIframeEl,
17
+ createFormEl,
18
+ } from "./helper";
19
+ import { BushaCommercePayload, MessageType } from "./types";
20
+
21
+ let payload: BushaCommercePayload;
22
+
23
+ export default function BushaCommerce(p: BushaCommercePayload) {
24
+ injectGlobalStyles();
25
+ // console.log(p);
26
+ validatePayload(p);
27
+
28
+ payload = p;
29
+
30
+ const container = createContainerEl();
31
+
32
+ const spinner = createSpinnerEl();
33
+ const closeBtn = createCloseBtnEl();
34
+ closeBtn.addEventListener("click", cleanup);
35
+
36
+ container.appendChild(spinner);
37
+ container.appendChild(closeBtn);
38
+
39
+ const iframe = createIframeEl();
40
+ container.appendChild(iframe);
41
+
42
+ document.body.appendChild(container);
43
+
44
+ const { onClose, onSuccess, ...rest } = p;
45
+
46
+ const iframeForm = createFormEl(rest);
47
+
48
+ iframe.contentDocument?.body.appendChild(iframeForm);
49
+
50
+ iframeForm.submit();
51
+
52
+ window.addEventListener("message", onMessage);
53
+ }
54
+
55
+ function cleanup() {
56
+ const containerEl = document.getElementById(CONTAINER_ID);
57
+ const closeBtn = document.getElementById(CLOSE_BUTTON_ID);
58
+
59
+ closeBtn?.removeEventListener("click", cleanup);
60
+
61
+ window.removeEventListener("message", onMessage);
62
+
63
+ if (!containerEl) return;
64
+ document.body.removeChild(containerEl);
65
+ }
66
+
67
+ const onMessage = (e: MessageEvent<MessageType>) => {
68
+ if (!PAY_UI) return;
69
+
70
+ const payUrl = new URL(PAY_UI);
71
+
72
+ if (e.origin !== payUrl.origin) return;
73
+
74
+ if (!payload) return;
75
+
76
+ // console.log(e.data);
77
+
78
+ if (e.data.status === INITIALIZED_STATUS) {
79
+ const containerEl = document.getElementById(CONTAINER_ID);
80
+ const loader = document.getElementById(LOADER_ID);
81
+ const closeBtn = document.getElementById(CLOSE_BUTTON_ID);
82
+
83
+ if (!loader || !closeBtn) return;
84
+
85
+ containerEl?.removeChild(loader);
86
+ containerEl?.removeChild(closeBtn);
87
+ }
88
+
89
+ if (e.data.status === CANCELLED_STATUS) {
90
+ cleanup();
91
+
92
+ if (payload.onClose) {
93
+ payload.onClose(e.data);
94
+ }
95
+ }
96
+
97
+ if (e.data.status === COMPLETED_STATUS) {
98
+ cleanup();
99
+
100
+ if (payload.onSuccess) {
101
+ payload.onSuccess(e.data);
102
+ }
103
+ }
104
+ };
package/src/types.ts ADDED
@@ -0,0 +1,19 @@
1
+ export type MessageType = {
2
+ status: string;
3
+ data?: any;
4
+ };
5
+
6
+ export interface BushaCommercePayload {
7
+ local_amount: number;
8
+ local_currency: string;
9
+ meta?: {
10
+ email?: string;
11
+ name?: string;
12
+ };
13
+ business_id: string;
14
+ reference: string;
15
+ callback_url: string;
16
+ mode?: "test" | "live";
17
+ onClose?: (d?: any) => void;
18
+ onSuccess: (d?: any) => void;
19
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,104 @@
1
+ {
2
+ "compilerOptions": {
3
+ /* Visit https://aka.ms/tsconfig to read more about this file */
4
+
5
+ /* Projects */
6
+ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
7
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8
+ // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
9
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
10
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12
+
13
+ /* Language and Environment */
14
+ "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
15
+ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
17
+ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
18
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
20
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
22
+ // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
23
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25
+ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
26
+
27
+ /* Modules */
28
+ "module": "ESNext" /* Specify what module code is generated. */,
29
+ // "rootDir": "./", /* Specify the root folder within your source files. */
30
+ "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
31
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
32
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
33
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
34
+ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
35
+ // "types": [], /* Specify type package names to be included without being referenced in a source file. */
36
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
37
+ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
38
+ // "resolveJsonModule": true, /* Enable importing .json files. */
39
+ // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
40
+
41
+ /* JavaScript Support */
42
+ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
43
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
44
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
45
+
46
+ /* Emit */
47
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
48
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
49
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
50
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
51
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
52
+ // "outDir": "./", /* Specify an output folder for all emitted files. */
53
+ // "removeComments": true, /* Disable emitting comments. */
54
+ // "noEmit": true, /* Disable emitting files from a compilation. */
55
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
56
+ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
57
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
58
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
59
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
60
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
61
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
62
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
63
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
64
+ // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
65
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
66
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
67
+ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
68
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
69
+ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
70
+
71
+ /* Interop Constraints */
72
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
73
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
74
+ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
75
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
76
+ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
77
+
78
+ /* Type Checking */
79
+ "strict": true /* Enable all strict type-checking options. */,
80
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
81
+ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
82
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
83
+ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
84
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
85
+ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
86
+ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
87
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
88
+ // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
89
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
90
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
91
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
92
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
93
+ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
94
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
95
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
96
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
97
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
98
+
99
+ /* Completeness */
100
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
101
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
102
+ },
103
+ "include": ["src", "rollup.config.ts"]
104
+ }