UNPKG

@connectifi/agent-react

Version:

Connectifi Agent for react

1 lines 13.5 kB
{"version":3,"sources":["../src/index.ts","../src/agent-import-context.tsx","../src/agent-context.tsx","../src/useConnectifiAgent.tsx"],"sourcesContent":["export type {\n AgentAuthenticator,\n AgentEvent,\n AgentImportProviderProps,\n AgentProviderProps,\n AgentResolver,\n AgentState,\n AgentStorageAccess,\n ConnectifiAgent,\n UseConnectifiAgentProps,\n} from \"./types\";\n\nexport {\n AgentImportProvider,\n AgentImportContext,\n} from \"./agent-import-context\";\n\nexport { AgentProvider, AgentContext } from \"./agent-context\";\n\nexport { useConnectifiAgent } from \"./useConnectifiAgent\";\n","import React, { createContext, useEffect, useState } from \"react\";\nimport { AgentImportProviderProps, AgentImportValue } from \"./types\";\n\nexport const AgentImportContext = createContext<AgentImportValue | undefined>(\n undefined\n);\n\nexport function AgentImportProvider({\n children,\n interopUrl,\n}: Readonly<AgentImportProviderProps>) {\n const [agentImport, setAgentImport] = useState<AgentImportValue | undefined>(\n undefined\n );\n\n useEffect(() => {\n if (interopUrl) {\n import(\n /* webpackIgnore: true */ `${interopUrl}/agent/main.bundle.js`\n ).then((agent) => {\n setAgentImport({\n module: agent,\n interopUrl,\n });\n });\n }\n }, [interopUrl]);\n\n return (\n <AgentImportContext.Provider value={agentImport}>\n {children}\n </AgentImportContext.Provider>\n );\n}\n","import React, { createContext } from \"react\";\nimport { AgentProviderProps, ConnectifiAgent } from \"./types\";\n\nexport const AgentContext = createContext<ConnectifiAgent | undefined>(\n undefined\n);\n\nexport function AgentProvider({\n children,\n agent,\n}: Readonly<AgentProviderProps>) {\n return (\n <AgentContext.Provider value={agent}>{children}</AgentContext.Provider>\n );\n}\n","import type {\n AgentConfig,\n AuthenticateConfig,\n CloseCallback,\n DirectoryProps,\n IntentResolutionMessage,\n RequestStorageAccessConfig,\n ResolveCallback,\n ResolveCallbackProps,\n} from \"@connectifi/agent-web\";\nimport { Channel, ContextHandler, DesktopAgent } from \"@finos/fdc3\";\nimport React, {\n Reducer,\n useCallback,\n useContext,\n useEffect,\n useReducer,\n useState,\n} from \"react\";\nimport {\n AgentAuthenticator,\n AgentEvent,\n AgentResolver,\n AgentState,\n AgentStorageAccess,\n ConnectifiAgent,\n UseConnectifiAgentProps,\n} from \"./types\";\nimport { AgentImportContext } from \"./agent-import-context\";\n\nconst AgentStateReducer: Reducer<AgentState, AgentEvent> = (\n state: AgentState,\n event: AgentEvent\n) => {\n switch (state) {\n case 'initial':\n if (event === 'connect') return 'connected';\n if (event === 'auth-challenge') return 'wait-for-auth';\n if (event === 'error') return 'error';\n break;\n case 'wait-for-auth':\n if (event === 'connect') return 'connected';\n if (event === 'error') return 'error';\n break;\n case \"connected\":\n if (event === \"disconnect\") return \"reconnecting\";\n break;\n case 'reconnecting':\n if (event === 'connect') return 'connected';\n if (event === 'disconnect-fatal') return 'disconnected';\n break;\n }\n return state;\n};\n\nexport function useConnectifiAgent({\n appId,\n customAuthenticator,\n}: Readonly<UseConnectifiAgentProps>): ConnectifiAgent {\n const iframeEmbedErrorPrefix = \"failed to embed iframe: \";\n\n const agentImport = useContext(AgentImportContext);\n const [state, dispatch] = useReducer(AgentStateReducer, \"initial\");\n\n const [fdc3, setFDC3] = useState<DesktopAgent | undefined>(undefined);\n const [resolver, setResolver] = useState<AgentResolver | undefined>(\n undefined\n );\n const [authenticator, setAuthenticator] = useState<\n AgentAuthenticator | undefined\n >(undefined);\n const [directoryProps, setDirectoryProps] = useState<\n DirectoryProps | undefined\n >(undefined);\n const [sessionOwner, setSessionOwner] = useState<string | undefined>(\n undefined\n );\n const [anchorElement, setAnchorElement] = useState<Element | undefined>(\n undefined\n );\n const [localHandlers, setLocalHandlers] = useState<\n Map<string, ContextHandler>\n >(new Map());\n const [channels, setChannels] = useState<Channel[]>([]);\n const [currentChannelId, setCurrentChannelId] = useState<string | undefined>(\n undefined\n );\n const [storageAccess, setStorageAccess] = useState<\n AgentStorageAccess | undefined\n >(undefined);\n const [errorMessage, setErrorMessage] = useState<string | undefined>(\n undefined\n );\n const [hasBeenConnected, setHasBeenConnected] = useState<boolean>(false);\n const [reconnectingIn, setReconnectingIn] = useState<number>(-1);\n\n const resetResolver = () => {\n setResolver(undefined);\n };\n\n const resetAuthenticator = () => {\n setAuthenticator(undefined);\n };\n\n const resetStorageAccess = () => {\n setStorageAccess(undefined);\n };\n\n const handleIntentResolution = (\n message: IntentResolutionMessage,\n callback: ResolveCallback,\n closeCallback: CloseCallback\n ) => {\n setResolver({\n resolutionType: message.resolutionType,\n context: message.context,\n data: message.data,\n resolve: (props: ResolveCallbackProps) => {\n callback(props);\n resetResolver();\n },\n cancel: () => {\n closeCallback();\n resetResolver();\n },\n });\n };\n\n const handleAuthenticate = async (authConf: AuthenticateConfig) => {\n const { authenticate, ...dirProps } = authConf;\n setDirectoryProps(dirProps);\n dispatch('auth-challenge');\n return new Promise<void>((resolve, reject) => {\n setAuthenticator({\n resolve: () => {\n resetAuthenticator();\n if (customAuthenticator) {\n customAuthenticator(authConf).then(resolve);\n } else {\n authenticate().then(resolve);\n }\n },\n cancel: () => {\n resetAuthenticator();\n reject(new Error('auth canceled'));\n dispatch('error');\n },\n });\n });\n };\n\n const handleRequestStorageAccess = async ({\n button,\n waitForStorageAccess,\n requestConsent,\n }: RequestStorageAccessConfig) => {\n const buttonNode = (\n <div dangerouslySetInnerHTML={{ __html: button.outerHTML }}></div>\n );\n setStorageAccess({ button: buttonNode });\n\n const success = await waitForStorageAccess();\n if (!success) {\n await requestConsent(\"sameWindow\");\n }\n\n resetStorageAccess();\n };\n\n const createTheAgent = useCallback(async () => {\n const agentConfig: AgentConfig = {\n bridgeGlobal: true,\n logLevel: \"debug\",\n headless: true,\n handleIntentResolution,\n handleAuthenticate,\n handleRequestStorageAccess,\n onSessionStarted: (props, user) => {\n setDirectoryProps(props);\n setSessionOwner(user);\n },\n onSessionError: (errorMsg: string) => {\n dispatch(\"error\");\n setErrorMessage(errorMsg);\n },\n onConnected: () => {\n dispatch(\"connect\");\n setReconnectingIn(0);\n },\n onDisconnected: (reconnectingIn?: number) => {\n if (!reconnectingIn) {\n dispatch('disconnect-fatal');\n } else {\n dispatch(\"disconnect\");\n setHasBeenConnected(true);\n setReconnectingIn(reconnectingIn);\n }\n },\n onFDC3Ready: (api) => {\n api.getUserChannels().then((chans) => setChannels(chans));\n },\n onChannelJoined: (chanId) => {\n setCurrentChannelId(chanId);\n },\n onChannelLeft: () => setCurrentChannelId(undefined),\n };\n if (agentImport) {\n const { createAgent } = agentImport.module;\n const api = await createAgent(agentImport.interopUrl, appId, agentConfig);\n return api;\n }\n return undefined;\n }, [agentImport, appId]);\n\n useEffect(() => {\n createTheAgent()\n .then((fdc3: DesktopAgent | undefined) => {\n if (!fdc3) {\n return;\n }\n console.log(\"setting FDC3 for the children\");\n setFDC3(fdc3);\n })\n .catch((e: Error) => {\n console.error(`error creating agent - ${e.message}`);\n let errorMessage: string = e.message;\n if (errorMessage.startsWith(iframeEmbedErrorPrefix)) {\n errorMessage = errorMessage.substring(iframeEmbedErrorPrefix.length);\n }\n dispatch(\"error\");\n setErrorMessage(errorMessage);\n });\n }, [createTheAgent]);\n\n return {\n fdc3,\n resolver,\n authenticator,\n anchorElement,\n setAnchorElement,\n localHandlers,\n setLocalHandlers,\n directoryProps,\n state,\n channels,\n currentChannelId,\n sessionOwner,\n storageAccess,\n errorMessage,\n reconnectingIn,\n hasBeenConnected,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA0D;AAGnD,IAAM,yBAAqB;AAAA,EAChC;AACF;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,CAAC,aAAa,cAAc,QAAI;AAAA,IACpC;AAAA,EACF;AAEA,8BAAU,MAAM;AACd,QAAI,YAAY;AACd;AAAA;AAAA,QAC4B,GAAG,UAAU;AAAA,QACvC,KAAK,CAAC,UAAU;AAChB,uBAAe;AAAA,UACb,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,UAAU,CAAC;AAEf,SACE,6BAAAA,QAAA,cAAC,mBAAmB,UAAnB,EAA4B,OAAO,eACjC,QACH;AAEJ;;;ACjCA,IAAAC,gBAAqC;AAG9B,IAAM,mBAAe;AAAA,EAC1B;AACF;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAAiC;AAC/B,SACE,8BAAAC,QAAA,cAAC,aAAa,UAAb,EAAsB,OAAO,SAAQ,QAAS;AAEnD;;;ACHA,IAAAC,gBAOO;AAYP,IAAM,oBAAqD,CACzD,OACA,UACG;AACH,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,UAAI,UAAU,UAAW,QAAO;AAChC,UAAI,UAAU,iBAAkB,QAAO;AACvC,UAAI,UAAU,QAAS,QAAO;AAC9B;AAAA,IACF,KAAK;AACH,UAAI,UAAU,UAAW,QAAO;AAChC,UAAI,UAAU,QAAS,QAAO;AAC9B;AAAA,IACF,KAAK;AACH,UAAI,UAAU,aAAc,QAAO;AACnC;AAAA,IACF,KAAK;AACH,UAAI,UAAU,UAAW,QAAO;AAChC,UAAI,UAAU,mBAAoB,QAAO;AACzC;AAAA,EACJ;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAAuD;AACrD,QAAM,yBAAyB;AAE/B,QAAM,kBAAc,0BAAW,kBAAkB;AACjD,QAAM,CAAC,OAAO,QAAQ,QAAI,0BAAW,mBAAmB,SAAS;AAEjE,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAmC,MAAS;AACpE,QAAM,CAAC,UAAU,WAAW,QAAI;AAAA,IAC9B;AAAA,EACF;AACA,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAExC,MAAS;AACX,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAE1C,MAAS;AACX,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC;AAAA,EACF;AACA,QAAM,CAAC,eAAe,gBAAgB,QAAI;AAAA,IACxC;AAAA,EACF;AACA,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAExC,oBAAI,IAAI,CAAC;AACX,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAoB,CAAC,CAAC;AACtD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI;AAAA,IAC9C;AAAA,EACF;AACA,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAExC,MAAS;AACX,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC;AAAA,EACF;AACA,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAkB,KAAK;AACvE,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAiB,EAAE;AAE/D,QAAM,gBAAgB,MAAM;AAC1B,gBAAY,MAAS;AAAA,EACvB;AAEA,QAAM,qBAAqB,MAAM;AAC/B,qBAAiB,MAAS;AAAA,EAC5B;AAEA,QAAM,qBAAqB,MAAM;AAC/B,qBAAiB,MAAS;AAAA,EAC5B;AAEA,QAAM,yBAAyB,CAC7B,SACA,UACA,kBACG;AACH,gBAAY;AAAA,MACV,gBAAgB,QAAQ;AAAA,MACxB,SAAS,QAAQ;AAAA,MACjB,MAAM,QAAQ;AAAA,MACd,SAAS,CAAC,UAAgC;AACxC,iBAAS,KAAK;AACd,sBAAc;AAAA,MAChB;AAAA,MACA,QAAQ,MAAM;AACZ,sBAAc;AACd,sBAAc;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,OAAO,aAAiC;AACjE,UAAM,EAAE,cAAc,GAAG,SAAS,IAAI;AACtC,sBAAkB,QAAQ;AAC1B,aAAS,gBAAgB;AACzB,WAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,uBAAiB;AAAA,QACf,SAAS,MAAM;AACb,6BAAmB;AACnB,cAAI,qBAAqB;AACvB,gCAAoB,QAAQ,EAAE,KAAK,OAAO;AAAA,UAC5C,OAAO;AACL,yBAAa,EAAE,KAAK,OAAO;AAAA,UAC7B;AAAA,QACF;AAAA,QACA,QAAQ,MAAM;AACZ,6BAAmB;AACnB,iBAAO,IAAI,MAAM,eAAe,CAAC;AACjC,mBAAS,OAAO;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,QAAM,6BAA6B,OAAO;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAkC;AAChC,UAAM,aACJ,8BAAAC,QAAA,cAAC,SAAI,yBAAyB,EAAE,QAAQ,OAAO,UAAU,GAAG;AAE9D,qBAAiB,EAAE,QAAQ,WAAW,CAAC;AAEvC,UAAM,UAAU,MAAM,qBAAqB;AAC3C,QAAI,CAAC,SAAS;AACZ,YAAM,eAAe,YAAY;AAAA,IACnC;AAEA,uBAAmB;AAAA,EACrB;AAEA,QAAM,qBAAiB,2BAAY,YAAY;AAC7C,UAAM,cAA2B;AAAA,MAC/B,cAAc;AAAA,MACd,UAAU;AAAA,MACV,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB,CAAC,OAAO,SAAS;AACjC,0BAAkB,KAAK;AACvB,wBAAgB,IAAI;AAAA,MACtB;AAAA,MACA,gBAAgB,CAAC,aAAqB;AACpC,iBAAS,OAAO;AAChB,wBAAgB,QAAQ;AAAA,MAC1B;AAAA,MACA,aAAa,MAAM;AACjB,iBAAS,SAAS;AAClB,0BAAkB,CAAC;AAAA,MACrB;AAAA,MACA,gBAAgB,CAACC,oBAA4B;AAC3C,YAAI,CAACA,iBAAgB;AACnB,mBAAS,kBAAkB;AAAA,QAC7B,OAAO;AACL,mBAAS,YAAY;AACrB,8BAAoB,IAAI;AACxB,4BAAkBA,eAAc;AAAA,QAClC;AAAA,MACF;AAAA,MACA,aAAa,CAAC,QAAQ;AACpB,YAAI,gBAAgB,EAAE,KAAK,CAAC,UAAU,YAAY,KAAK,CAAC;AAAA,MAC1D;AAAA,MACA,iBAAiB,CAAC,WAAW;AAC3B,4BAAoB,MAAM;AAAA,MAC5B;AAAA,MACA,eAAe,MAAM,oBAAoB,MAAS;AAAA,IACpD;AACA,QAAI,aAAa;AACf,YAAM,EAAE,YAAY,IAAI,YAAY;AACpC,YAAM,MAAM,MAAM,YAAY,YAAY,YAAY,OAAO,WAAW;AACxE,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,GAAG,CAAC,aAAa,KAAK,CAAC;AAEvB,+BAAU,MAAM;AACd,mBAAe,EACZ,KAAK,CAACC,UAAmC;AACxC,UAAI,CAACA,OAAM;AACT;AAAA,MACF;AACA,cAAQ,IAAI,+BAA+B;AAC3C,cAAQA,KAAI;AAAA,IACd,CAAC,EACA,MAAM,CAAC,MAAa;AACnB,cAAQ,MAAM,0BAA0B,EAAE,OAAO,EAAE;AACnD,UAAIC,gBAAuB,EAAE;AAC7B,UAAIA,cAAa,WAAW,sBAAsB,GAAG;AACnD,QAAAA,gBAAeA,cAAa,UAAU,uBAAuB,MAAM;AAAA,MACrE;AACA,eAAS,OAAO;AAChB,sBAAgBA,aAAY;AAAA,IAC9B,CAAC;AAAA,EACL,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["React","import_react","React","import_react","React","reconnectingIn","fdc3","errorMessage"]}