farvex 1.0.0 → 1.0.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/index.tsx"],"names":["createContext","useEffect","useContext","useSyncExternalStore","useState"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\n\nimport type { Nullable } from \"../shared/types\";\nimport type {\n ClientStatus,\n HostClient,\n SessionAction,\n SessionClient,\n SessionDuration,\n SessionInvite,\n VoiceSession,\n} from \"../core/types\";\n\nconst CallpadContext = createContext<SessionClient | HostClient | null>(null);\n\nexport type CallpadProviderProps<TClient extends SessionClient = SessionClient> = {\n client: TClient;\n connect?: boolean;\n disposeOnUnmount?: boolean;\n children: ReactNode;\n};\n\nexport const CallpadProvider = <TClient extends SessionClient>({\n client,\n connect = false,\n disposeOnUnmount = false,\n children,\n}: CallpadProviderProps<TClient>) => {\n useEffect(() => {\n if (!connect) {\n return;\n }\n void client.connect().catch(() => undefined);\n return () => {\n if (disposeOnUnmount) {\n void client.dispose();\n return;\n }\n void client.disconnect();\n };\n }, [client, connect, disposeOnUnmount]);\n\n return <CallpadContext.Provider value={client}>{children}</CallpadContext.Provider>;\n};\n\nexport const useCallpad = <TClient extends SessionClient = SessionClient>(): TClient => {\n const client = useContext(CallpadContext);\n if (!client) {\n throw new Error(\"CallpadProvider is required\");\n }\n return client as TClient;\n};\n\nexport const useStatus = (): ClientStatus => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"status\", notify),\n () => client.status,\n () => \"idle\",\n );\n};\n\nexport const useSessions = (): readonly VoiceSession[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"sessions\", notify),\n () => client.sessions.list(),\n () => [],\n );\n};\n\nexport const useSession = (sessionId?: string): Nullable<VoiceSession> => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(sessionId ? `session:${sessionId}` : \"sessions\", notify),\n () => client.sessions.get(sessionId),\n () => null,\n );\n};\n\nexport const useIncomingInvites = (): readonly SessionInvite[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"invites\", notify),\n () => client.invites.list(),\n () => [],\n );\n};\n\nexport const useIncomingInvite = (): Nullable<SessionInvite> => {\n const invites = useIncomingInvites();\n return invites[0] ?? null;\n};\n\nexport const useCan = (sessionId: string | undefined, action: SessionAction): boolean => {\n const client = useCallpad();\n const session = useSession(sessionId);\n if (!session) {\n return false;\n }\n return client.sessions.can(session, action);\n};\n\nexport const useSessionDuration = (sessionId?: string): SessionDuration => {\n const session = useSession(sessionId);\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (!session || session.state === \"ended\") {\n return;\n }\n setNow(Date.now());\n const timer = window.setInterval(() => {\n setNow(Date.now());\n }, 1000);\n return () => {\n window.clearInterval(timer);\n };\n }, [session]);\n\n return durationOf(session, now);\n};\n\nconst durationOf = (session: Nullable<VoiceSession>, now: number): SessionDuration => {\n if (!session) {\n return { seconds: 0, startedAt: null, endedAt: null, running: false };\n }\n const startedAt = session.answeredAt ?? session.createdAt;\n const endedAt = session.endedAt;\n const end = endedAt ? Date.parse(endedAt) : now;\n return {\n seconds: Math.max(0, Math.floor((end - Date.parse(startedAt)) / 1000)),\n startedAt,\n endedAt,\n running: !endedAt && session.state !== \"ended\",\n };\n};\n"]}
1
+ {"version":3,"sources":["../../src/react/index.tsx"],"names":["createContext","useEffect","useContext","useSyncExternalStore","useState"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\n\nimport type { Nullable } from \"../shared/types\";\nimport type {\n ClientStatus,\n HostClient,\n SessionAction,\n SessionClient,\n SessionDuration,\n SessionInvite,\n VoiceSession,\n} from \"../core/types\";\n\nconst CallpadContext = createContext<SessionClient | HostClient | null>(null);\n\ntype CallpadClient = SessionClient | HostClient;\n\nexport type CallpadProviderProps<TClient extends CallpadClient = CallpadClient> = {\n client: TClient;\n connect?: boolean;\n disposeOnUnmount?: boolean;\n children: ReactNode;\n};\n\nexport const CallpadProvider = <TClient extends CallpadClient>({\n client,\n connect = false,\n disposeOnUnmount = false,\n children,\n}: CallpadProviderProps<TClient>) => {\n useEffect(() => {\n if (!connect) {\n return;\n }\n void client.connect().catch(() => undefined);\n return () => {\n if (disposeOnUnmount) {\n void client.dispose();\n return;\n }\n void client.disconnect();\n };\n }, [client, connect, disposeOnUnmount]);\n\n return <CallpadContext.Provider value={client}>{children}</CallpadContext.Provider>;\n};\n\nexport const useCallpad = <TClient extends CallpadClient = SessionClient>(): TClient => {\n const client = useContext(CallpadContext);\n if (!client) {\n throw new Error(\"CallpadProvider is required\");\n }\n return client as TClient;\n};\n\nexport const useStatus = (): ClientStatus => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"status\", notify),\n () => client.status,\n () => \"idle\",\n );\n};\n\nexport const useSessions = (): readonly VoiceSession[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"sessions\", notify),\n () => client.sessions.list(),\n () => [],\n );\n};\n\nexport const useSession = (sessionId?: string): Nullable<VoiceSession> => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(sessionId ? `session:${sessionId}` : \"sessions\", notify),\n () => client.sessions.get(sessionId),\n () => null,\n );\n};\n\nexport const useIncomingInvites = (): readonly SessionInvite[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"invites\", notify),\n () => client.invites.list(),\n () => [],\n );\n};\n\nexport const useIncomingInvite = (): Nullable<SessionInvite> => {\n const invites = useIncomingInvites();\n return invites[0] ?? null;\n};\n\nexport const useCan = (sessionId: string | undefined, action: SessionAction): boolean => {\n const client = useCallpad();\n const session = useSession(sessionId);\n if (!session) {\n return false;\n }\n return client.sessions.can(session, action);\n};\n\nexport const useSessionDuration = (sessionId?: string): SessionDuration => {\n const session = useSession(sessionId);\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (!session || session.state === \"ended\") {\n return;\n }\n setNow(Date.now());\n const timer = window.setInterval(() => {\n setNow(Date.now());\n }, 1000);\n return () => {\n window.clearInterval(timer);\n };\n }, [session]);\n\n return durationOf(session, now);\n};\n\nconst durationOf = (session: Nullable<VoiceSession>, now: number): SessionDuration => {\n if (!session) {\n return { seconds: 0, startedAt: null, endedAt: null, running: false };\n }\n const startedAt = session.answeredAt ?? session.createdAt;\n const endedAt = session.endedAt;\n const end = endedAt ? Date.parse(endedAt) : now;\n return {\n seconds: Math.max(0, Math.floor((end - Date.parse(startedAt)) / 1000)),\n startedAt,\n endedAt,\n running: !endedAt && session.state !== \"ended\",\n };\n};\n"]}
@@ -1,15 +1,16 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { i as SessionClient, S as SessionAction, N as Nullable, l as SessionInvite, s as VoiceSession, k as SessionDuration, b as ClientStatus } from '../types-DhJEeeui.cjs';
3
+ import { j as SessionClient, H as HostClient, S as SessionAction, N as Nullable, m as SessionInvite, t as VoiceSession, l as SessionDuration, b as ClientStatus } from '../types-Dgwrb3rf.cjs';
4
4
 
5
- type CallpadProviderProps<TClient extends SessionClient = SessionClient> = {
5
+ type CallpadClient = SessionClient | HostClient;
6
+ type CallpadProviderProps<TClient extends CallpadClient = CallpadClient> = {
6
7
  client: TClient;
7
8
  connect?: boolean;
8
9
  disposeOnUnmount?: boolean;
9
10
  children: ReactNode;
10
11
  };
11
- declare const CallpadProvider: <TClient extends SessionClient>({ client, connect, disposeOnUnmount, children, }: CallpadProviderProps<TClient>) => react_jsx_runtime.JSX.Element;
12
- declare const useCallpad: <TClient extends SessionClient = SessionClient>() => TClient;
12
+ declare const CallpadProvider: <TClient extends CallpadClient>({ client, connect, disposeOnUnmount, children, }: CallpadProviderProps<TClient>) => react_jsx_runtime.JSX.Element;
13
+ declare const useCallpad: <TClient extends CallpadClient = SessionClient>() => TClient;
13
14
  declare const useStatus: () => ClientStatus;
14
15
  declare const useSessions: () => readonly VoiceSession[];
15
16
  declare const useSession: (sessionId?: string) => Nullable<VoiceSession>;
@@ -1,15 +1,16 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { i as SessionClient, S as SessionAction, N as Nullable, l as SessionInvite, s as VoiceSession, k as SessionDuration, b as ClientStatus } from '../types-DhJEeeui.js';
3
+ import { j as SessionClient, H as HostClient, S as SessionAction, N as Nullable, m as SessionInvite, t as VoiceSession, l as SessionDuration, b as ClientStatus } from '../types-Dgwrb3rf.js';
4
4
 
5
- type CallpadProviderProps<TClient extends SessionClient = SessionClient> = {
5
+ type CallpadClient = SessionClient | HostClient;
6
+ type CallpadProviderProps<TClient extends CallpadClient = CallpadClient> = {
6
7
  client: TClient;
7
8
  connect?: boolean;
8
9
  disposeOnUnmount?: boolean;
9
10
  children: ReactNode;
10
11
  };
11
- declare const CallpadProvider: <TClient extends SessionClient>({ client, connect, disposeOnUnmount, children, }: CallpadProviderProps<TClient>) => react_jsx_runtime.JSX.Element;
12
- declare const useCallpad: <TClient extends SessionClient = SessionClient>() => TClient;
12
+ declare const CallpadProvider: <TClient extends CallpadClient>({ client, connect, disposeOnUnmount, children, }: CallpadProviderProps<TClient>) => react_jsx_runtime.JSX.Element;
13
+ declare const useCallpad: <TClient extends CallpadClient = SessionClient>() => TClient;
13
14
  declare const useStatus: () => ClientStatus;
14
15
  declare const useSessions: () => readonly VoiceSession[];
15
16
  declare const useSession: (sessionId?: string) => Nullable<VoiceSession>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\n\nimport type { Nullable } from \"../shared/types\";\nimport type {\n ClientStatus,\n HostClient,\n SessionAction,\n SessionClient,\n SessionDuration,\n SessionInvite,\n VoiceSession,\n} from \"../core/types\";\n\nconst CallpadContext = createContext<SessionClient | HostClient | null>(null);\n\nexport type CallpadProviderProps<TClient extends SessionClient = SessionClient> = {\n client: TClient;\n connect?: boolean;\n disposeOnUnmount?: boolean;\n children: ReactNode;\n};\n\nexport const CallpadProvider = <TClient extends SessionClient>({\n client,\n connect = false,\n disposeOnUnmount = false,\n children,\n}: CallpadProviderProps<TClient>) => {\n useEffect(() => {\n if (!connect) {\n return;\n }\n void client.connect().catch(() => undefined);\n return () => {\n if (disposeOnUnmount) {\n void client.dispose();\n return;\n }\n void client.disconnect();\n };\n }, [client, connect, disposeOnUnmount]);\n\n return <CallpadContext.Provider value={client}>{children}</CallpadContext.Provider>;\n};\n\nexport const useCallpad = <TClient extends SessionClient = SessionClient>(): TClient => {\n const client = useContext(CallpadContext);\n if (!client) {\n throw new Error(\"CallpadProvider is required\");\n }\n return client as TClient;\n};\n\nexport const useStatus = (): ClientStatus => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"status\", notify),\n () => client.status,\n () => \"idle\",\n );\n};\n\nexport const useSessions = (): readonly VoiceSession[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"sessions\", notify),\n () => client.sessions.list(),\n () => [],\n );\n};\n\nexport const useSession = (sessionId?: string): Nullable<VoiceSession> => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(sessionId ? `session:${sessionId}` : \"sessions\", notify),\n () => client.sessions.get(sessionId),\n () => null,\n );\n};\n\nexport const useIncomingInvites = (): readonly SessionInvite[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"invites\", notify),\n () => client.invites.list(),\n () => [],\n );\n};\n\nexport const useIncomingInvite = (): Nullable<SessionInvite> => {\n const invites = useIncomingInvites();\n return invites[0] ?? null;\n};\n\nexport const useCan = (sessionId: string | undefined, action: SessionAction): boolean => {\n const client = useCallpad();\n const session = useSession(sessionId);\n if (!session) {\n return false;\n }\n return client.sessions.can(session, action);\n};\n\nexport const useSessionDuration = (sessionId?: string): SessionDuration => {\n const session = useSession(sessionId);\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (!session || session.state === \"ended\") {\n return;\n }\n setNow(Date.now());\n const timer = window.setInterval(() => {\n setNow(Date.now());\n }, 1000);\n return () => {\n window.clearInterval(timer);\n };\n }, [session]);\n\n return durationOf(session, now);\n};\n\nconst durationOf = (session: Nullable<VoiceSession>, now: number): SessionDuration => {\n if (!session) {\n return { seconds: 0, startedAt: null, endedAt: null, running: false };\n }\n const startedAt = session.answeredAt ?? session.createdAt;\n const endedAt = session.endedAt;\n const end = endedAt ? Date.parse(endedAt) : now;\n return {\n seconds: Math.max(0, Math.floor((end - Date.parse(startedAt)) / 1000)),\n startedAt,\n endedAt,\n running: !endedAt && session.state !== \"ended\",\n };\n};\n"]}
1
+ {"version":3,"sources":["../../src/react/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\n\nimport type { Nullable } from \"../shared/types\";\nimport type {\n ClientStatus,\n HostClient,\n SessionAction,\n SessionClient,\n SessionDuration,\n SessionInvite,\n VoiceSession,\n} from \"../core/types\";\n\nconst CallpadContext = createContext<SessionClient | HostClient | null>(null);\n\ntype CallpadClient = SessionClient | HostClient;\n\nexport type CallpadProviderProps<TClient extends CallpadClient = CallpadClient> = {\n client: TClient;\n connect?: boolean;\n disposeOnUnmount?: boolean;\n children: ReactNode;\n};\n\nexport const CallpadProvider = <TClient extends CallpadClient>({\n client,\n connect = false,\n disposeOnUnmount = false,\n children,\n}: CallpadProviderProps<TClient>) => {\n useEffect(() => {\n if (!connect) {\n return;\n }\n void client.connect().catch(() => undefined);\n return () => {\n if (disposeOnUnmount) {\n void client.dispose();\n return;\n }\n void client.disconnect();\n };\n }, [client, connect, disposeOnUnmount]);\n\n return <CallpadContext.Provider value={client}>{children}</CallpadContext.Provider>;\n};\n\nexport const useCallpad = <TClient extends CallpadClient = SessionClient>(): TClient => {\n const client = useContext(CallpadContext);\n if (!client) {\n throw new Error(\"CallpadProvider is required\");\n }\n return client as TClient;\n};\n\nexport const useStatus = (): ClientStatus => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"status\", notify),\n () => client.status,\n () => \"idle\",\n );\n};\n\nexport const useSessions = (): readonly VoiceSession[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"sessions\", notify),\n () => client.sessions.list(),\n () => [],\n );\n};\n\nexport const useSession = (sessionId?: string): Nullable<VoiceSession> => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(sessionId ? `session:${sessionId}` : \"sessions\", notify),\n () => client.sessions.get(sessionId),\n () => null,\n );\n};\n\nexport const useIncomingInvites = (): readonly SessionInvite[] => {\n const client = useCallpad();\n return useSyncExternalStore(\n (notify) => client.subscribe(\"invites\", notify),\n () => client.invites.list(),\n () => [],\n );\n};\n\nexport const useIncomingInvite = (): Nullable<SessionInvite> => {\n const invites = useIncomingInvites();\n return invites[0] ?? null;\n};\n\nexport const useCan = (sessionId: string | undefined, action: SessionAction): boolean => {\n const client = useCallpad();\n const session = useSession(sessionId);\n if (!session) {\n return false;\n }\n return client.sessions.can(session, action);\n};\n\nexport const useSessionDuration = (sessionId?: string): SessionDuration => {\n const session = useSession(sessionId);\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (!session || session.state === \"ended\") {\n return;\n }\n setNow(Date.now());\n const timer = window.setInterval(() => {\n setNow(Date.now());\n }, 1000);\n return () => {\n window.clearInterval(timer);\n };\n }, [session]);\n\n return durationOf(session, now);\n};\n\nconst durationOf = (session: Nullable<VoiceSession>, now: number): SessionDuration => {\n if (!session) {\n return { seconds: 0, startedAt: null, endedAt: null, running: false };\n }\n const startedAt = session.answeredAt ?? session.createdAt;\n const endedAt = session.endedAt;\n const end = endedAt ? Date.parse(endedAt) : now;\n return {\n seconds: Math.max(0, Math.floor((end - Date.parse(startedAt)) / 1000)),\n startedAt,\n endedAt,\n running: !endedAt && session.state !== \"ended\",\n };\n};\n"]}
@@ -203,4 +203,4 @@ type HostClient = Omit<SessionClient, "kind" | "sessions"> & {
203
203
  readonly host: HostControls;
204
204
  };
205
205
 
206
- export { CallpadError as C, type HostClient as H, type Invites as I, type ListQuery as L, type Nullable as N, type ParticipantRef as P, type RealtimeToken as R, type SessionAction as S, type Unsubscribe as U, type VoiceJoinGrant as V, type ClientEvents as a, type ClientStatus as b, type CustomerStartInput as c, type HostClientConfig as d, type HostControls as e, type HostParticipantInput as f, type HostSessions as g, type ListSessionsResponse as h, type SessionClient as i, type SessionClientConfig as j, type SessionDuration as k, type SessionInvite as l, type SessionRecording as m, type SessionRecordingControl as n, type Sessions as o, type StartedSession as p, type StoreTopic as q, type VoiceParticipant as r, type VoiceSession as s };
206
+ export { CallpadError as C, type HostClient as H, type Invites as I, type ListQuery as L, type Nullable as N, type ParticipantRef as P, type RealtimeToken as R, type SessionAction as S, type Unsubscribe as U, type VoiceJoinGrant as V, type ClientEvents as a, type ClientStatus as b, type CustomerStartInput as c, type HostClientConfig as d, type HostControls as e, type HostParticipantInput as f, type HostSessions as g, type HostStartInput as h, type ListSessionsResponse as i, type SessionClient as j, type SessionClientConfig as k, type SessionDuration as l, type SessionInvite as m, type SessionRecording as n, type SessionRecordingControl as o, type Sessions as p, type StartedSession as q, type StoreTopic as r, type VoiceParticipant as s, type VoiceSession as t };
@@ -203,4 +203,4 @@ type HostClient = Omit<SessionClient, "kind" | "sessions"> & {
203
203
  readonly host: HostControls;
204
204
  };
205
205
 
206
- export { CallpadError as C, type HostClient as H, type Invites as I, type ListQuery as L, type Nullable as N, type ParticipantRef as P, type RealtimeToken as R, type SessionAction as S, type Unsubscribe as U, type VoiceJoinGrant as V, type ClientEvents as a, type ClientStatus as b, type CustomerStartInput as c, type HostClientConfig as d, type HostControls as e, type HostParticipantInput as f, type HostSessions as g, type ListSessionsResponse as h, type SessionClient as i, type SessionClientConfig as j, type SessionDuration as k, type SessionInvite as l, type SessionRecording as m, type SessionRecordingControl as n, type Sessions as o, type StartedSession as p, type StoreTopic as q, type VoiceParticipant as r, type VoiceSession as s };
206
+ export { CallpadError as C, type HostClient as H, type Invites as I, type ListQuery as L, type Nullable as N, type ParticipantRef as P, type RealtimeToken as R, type SessionAction as S, type Unsubscribe as U, type VoiceJoinGrant as V, type ClientEvents as a, type ClientStatus as b, type CustomerStartInput as c, type HostClientConfig as d, type HostControls as e, type HostParticipantInput as f, type HostSessions as g, type HostStartInput as h, type ListSessionsResponse as i, type SessionClient as j, type SessionClientConfig as k, type SessionDuration as l, type SessionInvite as m, type SessionRecording as n, type SessionRecordingControl as o, type Sessions as p, type StartedSession as q, type StoreTopic as r, type VoiceParticipant as s, type VoiceSession as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "farvex",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Web SDK for Callpad voice sessions",
5
5
  "keywords": [
6
6
  "callpad",