@quiltt/react 2.1.1 → 2.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,85 @@
1
1
  # @quiltt/react
2
2
 
3
+ ## 2.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 24f6df1: This introduces a new Javascript API that can be used instead of or with the DOM API, giving exposure to exit events. There are a few ways to use it:
8
+
9
+ ## 1. HTML5
10
+
11
+ If you're using the HTML interface, and need to upgrade to using some Javascript code, you can; but all event registrations are on a global level. This means that if you have multiple buttons, you will look at the metadata of the response to see which one you're reacting to.
12
+
13
+ ```html
14
+ <head>
15
+ <script src="https://cdn.quiltt.io/v1/connector.js"></script>
16
+ <script language="JavaScript">
17
+ Quiltt.onExitSuccess((metadata) =>
18
+ console.log("Global onExitSuccess", metadata.connectionId)
19
+ );
20
+ </script>
21
+ </head>
22
+ <body>
23
+ <button quiltt-button="<CONNECTOR_ID">Click Here!</button>
24
+ </body>
25
+ ```
26
+
27
+ ## 2. Javascript
28
+
29
+ Now if you want to do something more complex, and expect to be working with multiple buttons in different ways, then the Javascript SDK may be the way to go. With this, you can control everything in JS.
30
+
31
+ ```html
32
+ <head>
33
+ <script src="https://cdn.quiltt.io/v1/connector.js"></script>
34
+ <script language="JavaScript">
35
+ Quiltt.authenticate("<SESSION_TOKEN>");
36
+
37
+ const connector = Quiltt.connect("<CONNECTOR_ID>", {
38
+ onExitSuccess: (metadata) => {
39
+ console.log("Connector onExitSuccess", metadata.connectionId),
40
+ });
41
+
42
+ connector.open();
43
+ </script>
44
+ </head>
45
+ ```
46
+
47
+ ## 3. React
48
+
49
+ With these new hooks, the React components now support callbacks.
50
+
51
+ ```tsx
52
+ import { QuilttButton } from '@quiltt/react'
53
+
54
+ export const App = () => {
55
+ const [connectionId, setConnectionId] = useState<string>()
56
+ const handleSuccess = (metadata) => setConnectionId(metadata?.connectionId)
57
+
58
+ return (
59
+ <QuilttButton connectorId="<CONNECTOR_ID>" onExitSuccess={handleSuccess}>
60
+ Add
61
+ </QuilttButton>
62
+
63
+ <QuilttButton connectorId="<CONNECTOR_ID>" connectionId={connectionId}>
64
+ Repair
65
+ </QuilttButton>
66
+ )
67
+ }
68
+ ```
69
+
70
+ ### Patch Changes
71
+
72
+ - Updated dependencies [24f6df1]
73
+ - @quiltt/core@2.2.0
74
+
75
+ ## 2.1.2
76
+
77
+ ### Patch Changes
78
+
79
+ - 541c809: `@quiltt/react`: Add support for using a custom storage key in the `useSession` hook
80
+ - Updated dependencies [541c809]
81
+ - @quiltt/core@2.1.2
82
+
3
83
  ## 2.1.1
4
84
 
5
85
  ### Patch Changes
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) Quiltt
3
+ Copyright (c) Quiltt, Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
6
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @quiltt/react
2
2
 
3
- [![npm version](https://badge.fury.io/js/@quiltt%2Fcore.svg)](https://badge.fury.io/js/@quiltt%2Fcore)
3
+ [![npm version](https://badge.fury.io/js/@quiltt%2Freact.svg)](https://badge.fury.io/js/@quiltt%2Freact)
4
4
  [![CI](https://github.com/quiltt/quiltt-public/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/quiltt/quiltt-public/actions/workflows/ci.yml)
5
5
 
6
6
  `@quiltt/react` provides React Components and Hooks for integrating Quiltt into React-based applications.
@@ -34,14 +34,22 @@ By default, the rendered component will be a `<button>` element, but you can sup
34
34
  #### Example
35
35
 
36
36
  ```tsx
37
+ import { useState } from 'react'
37
38
  import { QuilttButton } from '@quiltt/react'
38
39
 
39
40
  export const App = () => {
41
+ const [connectionId, setConnectionId] = useState<string>()
42
+ const handleExitSuccess = (metadata) => {
43
+ setConnectionId(metadata?.connectionId)
44
+ }
45
+
40
46
  return (
41
47
  <QuilttButton
42
- connectorId="{YOUR_CONNECTOR_ID}"
48
+ connectorId="<CONNECTOR_ID>"
49
+ onExitSuccess={handleExitSuccess}
43
50
  className="my-css-class"
44
51
  styles={{ borderWidth: '2px' }}
52
+ // ... other props to pass through to the button
45
53
  >
46
54
  Add Account
47
55
  </QuilttButton>
@@ -59,14 +67,22 @@ By default, the rendered component will be a `<div>` element, but you can supply
59
67
  ##### Example
60
68
 
61
69
  ```tsx
70
+ import { useState } from 'react'
62
71
  import { QuilttContainer } from '@quiltt/react'
63
72
 
64
73
  export const App = () => {
74
+ const [connectionId, setConnectionId] = useState<string>()
75
+ const handleExitSuccess = (metadata) => {
76
+ setConnectionId(metadata?.connectionId)
77
+ }
78
+
65
79
  return (
66
80
  <QuilttContainer
67
- connectorId="{YOUR_CONNECTOR_ID}"
81
+ connectorId="<CONNECTOR_ID>"
82
+ onExitSuccess={handleExitSuccess}
68
83
  className="my-css-class"
69
84
  styles={{ height: '100%' }}
85
+ // ... other props to pass through to the container
70
86
  />
71
87
  )
72
88
  }
@@ -104,10 +120,13 @@ A hook to manage the lifecycle of [Quiltt Connector](https://www.quiltt.dev/guid
104
120
  import { useQuilttConnector } from '@quiltt/react'
105
121
 
106
122
  const App = () => {
107
- useQuilttConnector()
123
+ const { open } = useQuilttConnector('<CONNECTOR_ID>', {
124
+ onEvent: (type) => console.log(`Received Quiltt Event: ${type}`)
125
+ onExitSuccess: (metadata) => console.log("Connector onExitSuccess", metadata.connectionId),
126
+ })
108
127
 
109
- return (
110
- <button quilttButton="{MY_CONNECTOR_ID}" type="button">
128
+ return(
129
+ <button onClick={open}>
111
130
  Launch Connector
112
131
  </button>
113
132
  )
@@ -1,23 +1,28 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
3
  import { FC, Component, ComponentType } from 'react';
4
+ import { Callbacks } from '@quiltt/core';
4
5
 
5
6
  type AnyTag = string | FC<any> | (new (props: any) => Component);
6
7
  type PropsOf<Tag> = Tag extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[Tag] : Tag extends ComponentType<infer Props> ? Props & JSX.IntrinsicAttributes : never;
7
8
 
8
- declare const QuilttButton: <T extends AnyTag = "button">({ as, connectorId, connectionId, ...props }: {
9
+ declare const QuilttButton: <T extends AnyTag = "button">({ as, connectorId, connectionId, onEvent, onExit, onExitSuccess, onExitAbort, onExitError, ...props }: {
9
10
  as?: T | undefined;
10
11
  connectorId: string;
11
12
  connectionId?: string | undefined;
12
- } & {
13
+ } & Callbacks & {
13
14
  children?: react.ReactNode;
14
15
  } & PropsOf<T>) => react_jsx_runtime.JSX.Element;
15
16
 
16
- declare const QuilttContainer: <T extends AnyTag = "div">({ as, connectorId, connectionId, ...props }: {
17
+ /**
18
+ * QuilttContainer uses globally shared callbacks. It's recommended you only use
19
+ * one Container at a time.
20
+ */
21
+ declare const QuilttContainer: <T extends AnyTag = "div">({ as, connectorId, connectionId, onEvent, onExit, onExitSuccess, onExitAbort, onExitError, ...props }: {
17
22
  as?: T | undefined;
18
23
  connectorId: string;
19
24
  connectionId?: string | undefined;
20
- } & {
25
+ } & Callbacks & {
21
26
  children?: react.ReactNode;
22
27
  } & PropsOf<T>) => react_jsx_runtime.JSX.Element;
23
28
 
@@ -1,2 +1,2 @@
1
- "use strict";var Ke=Object.create;var g=Object.defineProperty;var qe=Object.getOwnPropertyDescriptor;var Ge=Object.getOwnPropertyNames,w=Object.getOwnPropertySymbols,We=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable;var ae=(e,t,n)=>t in e?g(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b=(e,t)=>{for(var n in t||(t={}))K.call(t,n)&&ae(e,n,t[n]);if(w)for(var n of w(t))ue.call(t,n)&&ae(e,n,t[n]);return e};var O=(e,t)=>{var n={};for(var r in e)K.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&w)for(var r of w(e))t.indexOf(r)<0&&ue.call(e,r)&&(n[r]=e[r]);return n};var pe=(e,t)=>{for(var n in t)g(e,n,{get:t[n],enumerable:!0})},A=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ge(t))!K.call(e,o)&&o!==n&&g(e,o,{get:()=>t[o],enumerable:!(r=qe(t,o))||r.enumerable});return e},x=(e,t,n)=>(A(e,t,"default"),n&&A(n,t,"default")),ce=(e,t,n)=>(n=e!=null?Ke(We(e)):{},A(t||!e||!e.__esModule?g(n,"default",{value:e,enumerable:!0}):n,e)),Be=e=>A(g({},"__esModule",{value:!0}),e);var l=(e,t,n)=>new Promise((r,o)=>{var i=p=>{try{u(n.next(p))}catch(h){o(h)}},s=p=>{try{u(n.throw(p))}catch(h){o(h)}},u=p=>p.done?r(p.value):Promise.resolve(p.value).then(i,s);u((n=n.apply(e,t)).next())});var at={};pe(at,{QuilttButton:()=>je,QuilttContainer:()=>Ue});module.exports=Be(at);var y={};pe(y,{QuilttAuthProvider:()=>oe,QuilttButton:()=>je,QuilttContainer:()=>Ue,QuilttProvider:()=>st,QuilttSettings:()=>V,QuilttSettingsProvider:()=>ie,useAuthenticateSession:()=>G,useEventListener:()=>He,useIdentifySession:()=>q,useImportSession:()=>W,useIsomorphicLayoutEffect:()=>le,useQuilttClient:()=>ot,useQuilttConnector:()=>E,useQuilttSession:()=>_,useQuilttSettings:()=>te,useRevokeSession:()=>B,useSession:()=>ee,useStorage:()=>Z});x(y,require("@quiltt/core"));var C=require("react");var P=require("react"),le=typeof window!="undefined"?P.useLayoutEffect:P.useEffect,fe=le;function He(e,t,n,r){let o=(0,C.useRef)(t);fe(()=>{o.current=t},[t]),(0,C.useEffect)(()=>{var u;let i=(u=n==null?void 0:n.current)!=null?u:window;if(!(i&&i.addEventListener))return;let s=p=>o.current(p);return i.addEventListener(e,s,r),()=>{i.removeEventListener(e,s,r)}},[e,n,r])}var me=require("react");var q=(e,t)=>(0,me.useCallback)((r,o)=>l(void 0,null,function*(){let i=yield e.identify(r),s=i;switch(i.status){case 201:if(t(i.data.token),o.onSuccess)return o.onSuccess();break;case 202:if(o.onChallenged)return o.onChallenged();break;case 422:if(o.onError)return o.onError(s.data);break;default:throw new Error(`Unexpected auth identify response status: ${i.status}`)}}),[e,t]);var de=require("react");var G=(e,t)=>(0,de.useCallback)((r,o)=>l(void 0,null,function*(){let i=yield e.authenticate(r);switch(i.status){case 201:if(t(i.data.token),o.onSuccess)return o.onSuccess();break;case 401:if(o.onFailure)return o.onFailure();break;case 422:if(o.onError)return o.onError(i.data);break;default:throw new Error(`Unexpected auth authenticate response status: ${i.status}`)}}),[e,t]);var ye=require("react");var W=(e,t,n)=>(0,ye.useCallback)(o=>l(void 0,null,function*(){if(!o)return!!t;if(t&&t.token==o)return!0;let i=yield e.ping(o);switch(i.status){case 200:return n(o),!0;break;case 401:return!1;default:throw new Error(`Unexpected auth ping response status: ${i.status}`)}}),[e,t,n]);var he=require("react");var B=(e,t,n)=>(0,he.useCallback)(()=>l(void 0,null,function*(){t&&(yield e.revoke(t.token),n(null))}),[e,t,n]);var H=function(e,t){return H=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},H(e,t)};function ve(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");H(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var J="Invariant Violation",be=Object.setPrototypeOf,Je=be===void 0?function(e,t){return e.__proto__=t,e}:be,Se=function(e){ve(t,e);function t(n){n===void 0&&(n=J);var r=e.call(this,typeof n=="number"?J+": "+n+" (see https://github.com/apollographql/invariant-packages)":n)||this;return r.framesToPop=1,r.name=J,Je(r,t.prototype),r}return t}(Error);function c(e,t){if(!e)throw new Se(t)}var ge=["debug","log","warn","error","silent"],Xe=ge.indexOf("log");function R(e){return function(){if(ge.indexOf(e)>=Xe){var t=console[e]||console.log;return t.apply(console,arguments)}}}(function(e){e.debug=R("debug"),e.log=R("log"),e.warn=R("warn"),e.error=R("error")})(c||(c={}));function a(e){try{return e()}catch(t){}}var L=a(function(){return globalThis})||a(function(){return window})||a(function(){return self})||a(function(){return global})||a(function(){return a.constructor("return this")()});var xe="__",Te=[xe,xe].join("DEV");function $e(){try{return!!__DEV__}catch(e){return Object.defineProperty(L,Te,{value:a(function(){return process.env.NODE_ENV})!=="production",enumerable:!1,configurable:!0,writable:!0}),L[Te]}}var N=$e();function m(e){try{return e()}catch(t){}}var X=m(function(){return globalThis})||m(function(){return window})||m(function(){return self})||m(function(){return global})||m(function(){return m.constructor("return this")()}),$=!1;function Ye(){X&&!m(function(){return process.env.NODE_ENV})&&!m(function(){return process})&&(Object.defineProperty(X,"process",{value:{env:{NODE_ENV:"production"}},configurable:!0,enumerable:!1,writable:!0}),$=!0)}Ye();function Y(){$&&(delete X.process,$=!1)}function I(e,t){if(!!!e)throw new Error(t)}function _e(e){return D(e,[])}function D(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return ze(e,t);default:return String(e)}}function ze(e,t){if(e===null)return"null";if(t.includes(e))return"[Circular]";let n=[...t,e];if(Ze(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:D(r,n)}else if(Array.isArray(e))return tt(e,n);return et(e,n)}function Ze(e){return typeof e.toJSON=="function"}function et(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>2?"["+nt(e)+"]":"{ "+n.map(([o,i])=>o+": "+D(i,t)).join(", ")+" }"}function tt(e,t){if(e.length===0)return"[]";if(t.length>2)return"[Array]";let n=Math.min(10,e.length),r=e.length-n,o=[];for(let i=0;i<n;++i)o.push(D(e[i],t));return r===1?o.push("... 1 more item"):r>1&&o.push(`... ${r} more items`),"["+o.join(", ")+"]"}function nt(e){let t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if(t==="Object"&&typeof e.constructor=="function"){let n=e.constructor.name;if(typeof n=="string"&&n!=="")return n}return t}var S=class{constructor(t,n="GraphQL request",r={line:1,column:1}){typeof t=="string"||I(!1,`Body must be a string. Received: ${_e(t)}.`),this.body=t,this.name=n,this.locationOffset=r,this.locationOffset.line>0||I(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||I(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}};function Ee(){return typeof S=="function"?Y():Y()}function rt(){__DEV__?c(typeof N=="boolean",N):c(typeof N=="boolean",39)}Ee();rt();var On=typeof WeakMap=="function"&&a(function(){return navigator.product})!=="ReactNative";var we=typeof Symbol=="function"&&typeof Symbol.for=="function";var Pn=typeof a(function(){return window.document.createElement})=="function",Cn=a(function(){return navigator.userAgent.indexOf("jsdom")>=0})||!1;var M=ce(require("react"),1);var Ae=we?Symbol.for("__APOLLO_CONTEXT__"):"__APOLLO_CONTEXT__";function d(){var e=M.createContext[Ae];return e||(Object.defineProperty(M.createContext,Ae,{value:e=M.createContext({}),enumerable:!1,writable:!1,configurable:!0}),e.displayName="ApolloContext"),e}var z=ce(require("react"),1);var Q=function(e){var t=e.client,n=e.children,r=d();return z.createElement(r.Consumer,null,function(o){return o===void 0&&(o={}),t&&o.client!==t&&(o=Object.assign({},o,{client:t})),__DEV__?c(o.client,'ApolloProvider was not passed a client instance. Make sure you pass in your client via the "client" prop.'):c(o.client,29),z.createElement(r.Provider,{value:o},n)})};var Oe=require("react");function Pe(e){var t=(0,Oe.useContext)(d()),n=e||t.client;return __DEV__?c(!!n,'Could not find "client" in the context or passed in as an option. Wrap the root component in an <ApolloProvider>, or pass an ApolloClient instance in via options.'):c(!!n,32),n}var ot=Pe;var ne=require("react");var Ne=require("react");var Le=require("react"),k=require("react"),j=require("@quiltt/core");var v=require("react"),T=require("@quiltt/core"),Z=(e,t)=>{let n=(0,v.useCallback)(()=>{let s;return(s=T.GlobalStorage.get(e))!==void 0?s:t},[e,t]),[r,o]=(0,v.useState)(n()),i=(0,v.useCallback)(s=>{let u=s instanceof Function?s(r):s;r!==u&&T.GlobalStorage.set(e,u)},[e,r]);return(0,v.useEffect)(()=>(T.GlobalStorage.subscribe(e,o),o(n()),()=>T.GlobalStorage.unsubscribe(e,o)),[]),[r,i]};var Ce=j.JsonWebTokenParse,Re=new j.Timeoutable,ee=()=>{let[e,t]=Z("session"),n=(0,Le.useMemo)(()=>Ce(e),[e]);(0,k.useEffect)(()=>{if(!n)return;let o=n.claims.exp*1e3,i=()=>t(null);if(Date.now()>=o)i();else return Re.set(i,o-Date.now()),()=>Re.clear(i)},[n,t]);let r=(0,k.useCallback)(o=>{let i=o instanceof Function?o(e):o;e!==i&&(!i||Ce(i))&&t(i)},[e,t]);return[n,r]};var Ie=require("@quiltt/core");var U=require("react");var V=(0,U.createContext)({}),te=()=>{let e=(0,U.useContext)(V);return b({},e)};var _=()=>{let{clientId:e}=te(),[t,n]=ee(),r=new Ie.AuthAPI(e),o=W(r,t,n),i=q(r,n),s=G(r,n),u=B(r,t,n),p=(0,Ne.useCallback)(h=>l(void 0,null,function*(){(!h||t&&h&&h==t.token)&&n(null)}),[t,n]);return{session:t,importSession:o,identifySession:i,authenticateSession:s,revokeSession:u,forgetSession:p}};var it=process.env.QUILTT_CDN_BASE||"https://cdn.quiltt.io",f,E=()=>{let{session:e}=_();(0,ne.useEffect)(()=>{f||(f=document.createElement("script"),f.src=`${it}/v1/connector.js`,e!=null&&e.token&&f.setAttribute("quiltt-token",e.token),document.head.appendChild(f))},[]),(0,ne.useEffect)(()=>{f&&(e!=null&&e.token&&e.token!==f.getAttribute("quiltt-token")?f.setAttribute("quiltt-token",e.token):!(e!=null&&e.token)&&f.getAttribute("quiltt-token")&&f.removeAttribute("quiltt-token"))},[e==null?void 0:e.token])};var re=require("react");var F=require("@quiltt/core");var Me=require("react/jsx-runtime"),De=new F.QuilttClient({cache:new F.InMemoryCache}),oe=({token:e,children:t})=>{let{session:n,importSession:r}=_();return(0,re.useEffect)(()=>{e&&r(e)},[e]),(0,re.useEffect)(()=>{De.resetStore()},[n]),(0,Me.jsx)(Q,{client:De,children:t})};var Qe=require("react");var ke=require("react/jsx-runtime"),ie=({clientId:e,children:t})=>{let[n]=(0,Qe.useState)(e);return(0,ke.jsx)(V.Provider,{value:{clientId:n},children:t})};var se=require("react/jsx-runtime"),st=({clientId:e,token:t,children:n})=>(0,se.jsx)(ie,{clientId:e,children:(0,se.jsx)(oe,{token:t,children:n})});var Ve=require("react/jsx-runtime"),je=o=>{var i=o,{as:e,connectorId:t,connectionId:n}=i,r=O(i,["as","connectorId","connectionId"]);return E(),(0,Ve.jsx)(e||"button",b({"quiltt-button":t,"quiltt-connection":n},r))};var Fe=require("react/jsx-runtime"),Ue=o=>{var i=o,{as:e,connectorId:t,connectionId:n}=i,r=O(i,["as","connectorId","connectionId"]);return E(),(0,Fe.jsx)(e||"div",b({"quiltt-container":t,"quiltt-connection":n},r))};0&&(module.exports={QuilttButton,QuilttContainer});
1
+ "use strict";var He=Object.create;var E=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames,C=Object.getOwnPropertySymbols,Xe=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var fe=(t,e,r)=>e in t?E(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,x=(t,e)=>{for(var r in e||(e={}))q.call(e,r)&&fe(t,r,e[r]);if(C)for(var r of C(e))pe.call(e,r)&&fe(t,r,e[r]);return t};var P=(t,e)=>{var r={};for(var o in t)q.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&C)for(var o of C(t))e.indexOf(o)<0&&pe.call(t,o)&&(r[o]=t[o]);return r};var de=(t,e)=>{for(var r in e)E(t,r,{get:e[r],enumerable:!0})},O=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $e(e))!q.call(t,n)&&n!==r&&E(t,n,{get:()=>e[n],enumerable:!(o=Je(e,n))||o.enumerable});return t},T=(t,e,r)=>(O(t,e,"default"),r&&O(r,e,"default")),me=(t,e,r)=>(r=t!=null?He(Xe(t)):{},O(e||!t||!t.__esModule?E(r,"default",{value:t,enumerable:!0}):r,t)),Ye=t=>O(E({},"__esModule",{value:!0}),t);var m=(t,e,r)=>new Promise((o,n)=>{var s=u=>{try{a(r.next(u))}catch(f){n(f)}},i=u=>{try{a(r.throw(u))}catch(f){n(f)}},a=u=>u.done?o(u.value):Promise.resolve(u.value).then(s,i);a((r=r.apply(t,e)).next())});var dt={};de(dt,{QuilttButton:()=>Ge,QuilttContainer:()=>We});module.exports=Ye(dt);var S={};de(S,{QuilttAuthProvider:()=>ae,QuilttButton:()=>Ge,QuilttContainer:()=>We,QuilttProvider:()=>pt,QuilttSettings:()=>K,QuilttSettingsProvider:()=>ue,useAuthenticateSession:()=>H,useEventListener:()=>ze,useIdentifySession:()=>B,useImportSession:()=>J,useIsomorphicLayoutEffect:()=>ye,useQuilttClient:()=>ct,useQuilttConnector:()=>w,useQuilttSession:()=>A,useQuilttSettings:()=>oe,useRevokeSession:()=>$,useSession:()=>ne,useStorage:()=>re});T(S,require("@quiltt/core"));var R=require("react");var L=require("react"),ye=typeof window!="undefined"?L.useLayoutEffect:L.useEffect,ve=ye;function ze(t,e,r,o){let n=(0,R.useRef)(e);ve(()=>{n.current=e},[e]),(0,R.useEffect)(()=>{var a;let s=(a=r==null?void 0:r.current)!=null?a:window;if(!(s&&s.addEventListener))return;let i=u=>n.current(u);return s.addEventListener(t,i,o),()=>{s.removeEventListener(t,i,o)}},[t,r,o])}var Se=require("react");var B=(t,e)=>(0,Se.useCallback)((o,n)=>m(void 0,null,function*(){let s=yield t.identify(o),i=s;switch(s.status){case 201:if(e(s.data.token),n.onSuccess)return n.onSuccess();break;case 202:if(n.onChallenged)return n.onChallenged();break;case 422:if(n.onError)return n.onError(i.data);break;default:throw new Error(`Unexpected auth identify response status: ${s.status}`)}}),[t,e]);var he=require("react");var H=(t,e)=>(0,he.useCallback)((o,n)=>m(void 0,null,function*(){let s=yield t.authenticate(o);switch(s.status){case 201:if(e(s.data.token),n.onSuccess)return n.onSuccess();break;case 401:if(n.onFailure)return n.onFailure();break;case 422:if(n.onError)return n.onError(s.data);break;default:throw new Error(`Unexpected auth authenticate response status: ${s.status}`)}}),[t,e]);var be=require("react");var J=(t,e,r)=>(0,be.useCallback)(n=>m(void 0,null,function*(){if(!n)return!!e;if(e&&e.token==n)return!0;let s=yield t.ping(n);switch(s.status){case 200:return r(n),!0;break;case 401:return!1;default:throw new Error(`Unexpected auth ping response status: ${s.status}`)}}),[t,e,r]);var xe=require("react");var $=(t,e,r)=>(0,xe.useCallback)(()=>m(void 0,null,function*(){e&&(yield t.revoke(e.token),r(null))}),[t,e,r]);var X=function(t,e){return X=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(r[n]=o[n])},X(t,e)};function ge(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");X(t,e);function r(){this.constructor=t}t.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}var Y="Invariant Violation",Ee=Object.setPrototypeOf,Ze=Ee===void 0?function(t,e){return t.__proto__=e,t}:Ee,Te=function(t){ge(e,t);function e(r){r===void 0&&(r=Y);var o=t.call(this,typeof r=="number"?Y+": "+r+" (see https://github.com/apollographql/invariant-packages)":r)||this;return o.framesToPop=1,o.name=Y,Ze(o,e.prototype),o}return e}(Error);function p(t,e){if(!t)throw new Te(e)}var _e=["debug","log","warn","error","silent"],et=_e.indexOf("log");function D(t){return function(){if(_e.indexOf(t)>=et){var e=console[t]||console.log;return e.apply(console,arguments)}}}(function(t){t.debug=D("debug"),t.log=D("log"),t.warn=D("warn"),t.error=D("error")})(p||(p={}));function c(t){try{return t()}catch(e){}}var N=c(function(){return globalThis})||c(function(){return window})||c(function(){return self})||c(function(){return global})||c(function(){return c.constructor("return this")()});var Ae="__",we=[Ae,Ae].join("DEV");function tt(){try{return!!__DEV__}catch(t){return Object.defineProperty(N,we,{value:c(function(){return process.env.NODE_ENV})!=="production",enumerable:!1,configurable:!0,writable:!0}),N[we]}}var I=tt();function y(t){try{return t()}catch(e){}}var z=y(function(){return globalThis})||y(function(){return window})||y(function(){return self})||y(function(){return global})||y(function(){return y.constructor("return this")()}),Z=!1;function rt(){z&&!y(function(){return process.env.NODE_ENV})&&!y(function(){return process})&&(Object.defineProperty(z,"process",{value:{env:{NODE_ENV:"production"}},configurable:!0,enumerable:!1,writable:!0}),Z=!0)}rt();function ee(){Z&&(delete z.process,Z=!1)}function Q(t,e){if(!!!t)throw new Error(e)}function Ce(t){return M(t,[])}function M(t,e){switch(typeof t){case"string":return JSON.stringify(t);case"function":return t.name?`[function ${t.name}]`:"[function]";case"object":return nt(t,e);default:return String(t)}}function nt(t,e){if(t===null)return"null";if(e.includes(t))return"[Circular]";let r=[...e,t];if(ot(t)){let o=t.toJSON();if(o!==t)return typeof o=="string"?o:M(o,r)}else if(Array.isArray(t))return st(t,r);return it(t,r)}function ot(t){return typeof t.toJSON=="function"}function it(t,e){let r=Object.entries(t);return r.length===0?"{}":e.length>2?"["+at(t)+"]":"{ "+r.map(([n,s])=>n+": "+M(s,e)).join(", ")+" }"}function st(t,e){if(t.length===0)return"[]";if(e.length>2)return"[Array]";let r=Math.min(10,t.length),o=t.length-r,n=[];for(let s=0;s<r;++s)n.push(M(t[s],e));return o===1?n.push("... 1 more item"):o>1&&n.push(`... ${o} more items`),"["+n.join(", ")+"]"}function at(t){let e=Object.prototype.toString.call(t).replace(/^\[object /,"").replace(/]$/,"");if(e==="Object"&&typeof t.constructor=="function"){let r=t.constructor.name;if(typeof r=="string"&&r!=="")return r}return e}var g=class{constructor(e,r="GraphQL request",o={line:1,column:1}){typeof e=="string"||Q(!1,`Body must be a string. Received: ${Ce(e)}.`),this.body=e,this.name=r,this.locationOffset=o,this.locationOffset.line>0||Q(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||Q(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}};function Oe(){return typeof g=="function"?ee():ee()}function ut(){__DEV__?p(typeof I=="boolean",I):p(typeof I=="boolean",39)}Oe();ut();var Dr=typeof WeakMap=="function"&&c(function(){return navigator.product})!=="ReactNative";var Pe=typeof Symbol=="function"&&typeof Symbol.for=="function";var Nr=typeof c(function(){return window.document.createElement})=="function",Ir=c(function(){return navigator.userAgent.indexOf("jsdom")>=0})||!1;var U=me(require("react"),1);var Le=Pe?Symbol.for("__APOLLO_CONTEXT__"):"__APOLLO_CONTEXT__";function v(){var t=U.createContext[Le];return t||(Object.defineProperty(U.createContext,Le,{value:t=U.createContext({}),enumerable:!1,writable:!1,configurable:!0}),t.displayName="ApolloContext"),t}var te=me(require("react"),1);var j=function(t){var e=t.client,r=t.children,o=v();return te.createElement(o.Consumer,null,function(n){return n===void 0&&(n={}),e&&n.client!==e&&(n=Object.assign({},n,{client:e})),__DEV__?p(n.client,'ApolloProvider was not passed a client instance. Make sure you pass in your client via the "client" prop.'):p(n.client,29),te.createElement(o.Provider,{value:n},r)})};var Re=require("react");function De(t){var e=(0,Re.useContext)(v()),r=t||e.client;return __DEV__?p(!!r,'Could not find "client" in the context or passed in as an option. Wrap the root component in an <ApolloProvider>, or pass an ApolloClient instance in via options.'):p(!!r,32),r}var ct=De;var l=require("react");var Me=require("react");var Qe=require("react"),k=require("react"),V=require("@quiltt/core");var b=require("react"),_=require("@quiltt/core"),re=(t,e)=>{let r=(0,b.useCallback)(()=>{let i;return(i=_.GlobalStorage.get(t))!==void 0?i:e},[t,e]),[o,n]=(0,b.useState)(r()),s=(0,b.useCallback)(i=>{let a=i instanceof Function?i(o):i;o!==a&&_.GlobalStorage.set(t,a)},[t,o]);return(0,b.useEffect)(()=>(_.GlobalStorage.subscribe(t,n),n(r()),()=>_.GlobalStorage.unsubscribe(t,n)),[]),[o,s]};var Ne=V.JsonWebTokenParse,Ie=new V.Timeoutable,ne=(t="session")=>{let[e,r]=re(t),o=(0,Qe.useMemo)(()=>Ne(e),[e]);(0,k.useEffect)(()=>{if(!o)return;let s=o.claims.exp*1e3,i=()=>r(null);if(Date.now()>=s)i();else return Ie.set(i,s-Date.now()),()=>Ie.clear(i)},[o,r]);let n=(0,k.useCallback)(s=>{let i=s instanceof Function?s(e):s;e!==i&&(!i||Ne(i))&&r(i)},[e,r]);return[o,n]};var Ue=require("@quiltt/core");var F=require("react");var K=(0,F.createContext)({}),oe=()=>{let t=(0,F.useContext)(K);return x({},t)};var A=()=>{let{clientId:t}=oe(),[e,r]=ne(),o=new Ue.AuthAPI(t),n=J(o,e,r),s=B(o,r),i=H(o,r),a=$(o,e,r),u=(0,Me.useCallback)(f=>m(void 0,null,function*(){(!f||e&&f&&f==e.token)&&r(null)}),[e,r]);return{session:e,importSession:n,identifySession:s,authenticateSession:i,revokeSession:a,forgetSession:u}};var G=require("react"),ie={};function lt(t){let e=document.querySelector(`script[src="${t}"]`),r=e==null?void 0:e.getAttribute("data-status");return{node:e,status:r}}function je(t,e){let[r,o]=(0,G.useState)(()=>{var n;return!t||e!=null&&e.shouldPreventLoad?"idle":typeof window=="undefined"?"loading":(n=ie[t])!=null?n:"loading"});return(0,G.useEffect)(()=>{var u,f;if(!t||e!=null&&e.shouldPreventLoad)return;let n=ie[t];if(n==="ready"||n==="error"){o(n);return}let s=lt(t),i=s.node;if(i)o((f=(u=s.status)!=null?u:n)!=null?f:"loading");else{i=document.createElement("script"),i.src=t,i.async=!0,i.setAttribute("data-status","loading"),document.body.appendChild(i);let d=h=>{let le=h.type==="load"?"ready":"error";i==null||i.setAttribute("data-status",le)};i.addEventListener("load",d),i.addEventListener("error",d)}let a=d=>{let h=d.type==="load"?"ready":"error";o(h),ie[t]=h};return i.addEventListener("load",a),i.addEventListener("error",a),()=>{i&&(i.removeEventListener("load",a),i.removeEventListener("error",a)),i&&(e!=null&&e.removeOnUnmount)&&i.remove()}},[t,e==null?void 0:e.shouldPreventLoad,e==null?void 0:e.removeOnUnmount]),r}var ft=process.env.QUILTT_CDN_BASE||"https://cdn.quiltt.io",w=(t,e)=>{let r=je(`${ft}/v1/connector.js`),{session:o}=A(),[n,s]=(0,l.useState)(),[i,a]=(0,l.useState)(!1);return(0,l.useEffect)(()=>{typeof Quiltt!="undefined"&&Quiltt.authenticate(o==null?void 0:o.token)},[r,o]),(0,l.useEffect)(()=>{typeof Quiltt=="undefined"||!t||(e!=null&&e.connectionId?s(Quiltt.reconnect(t,{connectionId:e.connectionId})):s(Quiltt.connect(t)))},[r,t,e==null?void 0:e.connectionId]),(0,l.useEffect)(()=>{if(!(!n||!(e!=null&&e.onEvent)))return n.onEvent(e.onEvent),()=>n.offEvent(e.onEvent)},[n,e==null?void 0:e.onEvent]),(0,l.useEffect)(()=>{if(!(!n||!(e!=null&&e.onExit)))return n.onExit(e.onExit),()=>n.offExit(e.onExit)},[n,e==null?void 0:e.onExit]),(0,l.useEffect)(()=>{if(!(!n||!(e!=null&&e.onExitSuccess)))return n.onExitSuccess(e.onExitSuccess),()=>n.offExitSuccess(e.onExitSuccess)},[n,e==null?void 0:e.onExitSuccess]),(0,l.useEffect)(()=>{if(!(!n||!(e!=null&&e.onExitAbort)))return n.onExitAbort(e.onExitAbort),()=>n.offExitAbort(e.onExitAbort)},[n,e==null?void 0:e.onExitAbort]),(0,l.useEffect)(()=>{if(!(!n||!(e!=null&&e.onExitError)))return n.onExitError(e.onExitError),()=>n.offExitError(e.onExitError)},[n,e==null?void 0:e.onExitError]),(0,l.useEffect)(()=>{n&&i&&(a(!1),n.open())},[n,i]),{open:(0,l.useCallback)(()=>{if(t)a(!0);else throw new Error("Must provide `connectorId` to `open` Quiltt Connector with Method Call")},[t,a])}};var se=require("react");var W=require("@quiltt/core");var Ve=require("react/jsx-runtime"),ke=new W.QuilttClient({cache:new W.InMemoryCache}),ae=({token:t,children:e})=>{let{session:r,importSession:o}=A();return(0,se.useEffect)(()=>{t&&o(t)},[t]),(0,se.useEffect)(()=>{ke.resetStore()},[r]),(0,Ve.jsx)(j,{client:ke,children:e})};var Fe=require("react");var Ke=require("react/jsx-runtime"),ue=({clientId:t,children:e})=>{let[r]=(0,Fe.useState)(t);return(0,Ke.jsx)(K.Provider,{value:{clientId:r},children:e})};var ce=require("react/jsx-runtime"),pt=({clientId:t,token:e,children:r})=>(0,ce.jsx)(ue,{clientId:t,children:(0,ce.jsx)(ae,{token:e,children:r})});var qe=require("react/jsx-runtime"),Ge=f=>{var d=f,{as:t,connectorId:e,connectionId:r,onEvent:o,onExit:n,onExitSuccess:s,onExitAbort:i,onExitError:a}=d,u=P(d,["as","connectorId","connectionId","onEvent","onExit","onExitSuccess","onExitAbort","onExitError"]);let{open:h}=w(e,{connectionId:r,onEvent:o,onExit:n,onExitSuccess:s,onExitAbort:i,onExitError:a});return(0,qe.jsx)(t||"button",x({onClick:h,"quiltt-connection":r},u))};var Be=require("react/jsx-runtime"),We=f=>{var d=f,{as:t,connectorId:e,connectionId:r,onEvent:o,onExit:n,onExitSuccess:s,onExitAbort:i,onExitError:a}=d,u=P(d,["as","connectorId","connectionId","onEvent","onExit","onExitSuccess","onExitAbort","onExitError"]);return w(e,{onEvent:o,onExit:n,onExitSuccess:s,onExitAbort:i,onExitError:a}),(0,Be.jsx)(t||"div",x({"quiltt-container":e,"quiltt-connection":r},u))};0&&(module.exports={QuilttButton,QuilttContainer});
2
2
  //# sourceMappingURL=index.cjs.map