@planningcenter/chat-react-native 1.5.0 → 1.5.1-qa-22.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/build/components/conversations.d.ts.map +1 -1
- package/build/components/conversations.js +29 -8
- package/build/components/conversations.js.map +1 -1
- package/build/components/index.d.ts +1 -0
- package/build/components/index.d.ts.map +1 -1
- package/build/components/index.js +1 -0
- package/build/components/index.js.map +1 -1
- package/build/contexts/api_provider.d.ts +4 -6
- package/build/contexts/api_provider.d.ts.map +1 -1
- package/build/contexts/api_provider.js +12 -20
- package/build/contexts/api_provider.js.map +1 -1
- package/build/contexts/chat_context.d.ts +7 -5
- package/build/contexts/chat_context.d.ts.map +1 -1
- package/build/contexts/chat_context.js +40 -4
- package/build/contexts/chat_context.js.map +1 -1
- package/build/hooks/index.d.ts +2 -0
- package/build/hooks/index.d.ts.map +1 -1
- package/build/hooks/index.js +2 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/use_api.d.ts +61 -0
- package/build/hooks/use_api.d.ts.map +1 -0
- package/build/hooks/use_api.js +39 -0
- package/build/hooks/use_api.js.map +1 -0
- package/build/hooks/use_current_person.d.ts +3 -0
- package/build/hooks/use_current_person.d.ts.map +1 -0
- package/build/hooks/use_current_person.js +13 -0
- package/build/hooks/use_current_person.js.map +1 -0
- package/build/navigation/index.d.ts +1 -0
- package/build/navigation/index.d.ts.map +1 -1
- package/build/navigation/index.js +7 -4
- package/build/navigation/index.js.map +1 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +59 -6
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/not_found.js +1 -1
- package/build/screens/not_found.js.map +1 -1
- package/build/types/api_primitives.d.ts +23 -0
- package/build/types/api_primitives.d.ts.map +1 -0
- package/build/types/api_primitives.js +2 -0
- package/build/types/api_primitives.js.map +1 -0
- package/build/types/index.d.ts +4 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +4 -0
- package/build/types/index.js.map +1 -0
- package/build/types/resources/conversation.d.ts +15 -0
- package/build/types/resources/conversation.d.ts.map +1 -0
- package/build/types/resources/conversation.js +2 -0
- package/build/types/resources/conversation.js.map +1 -0
- package/build/types/resources/index.d.ts +5 -0
- package/build/types/resources/index.d.ts.map +1 -0
- package/build/types/resources/index.js +5 -0
- package/build/types/resources/index.js.map +1 -0
- package/build/types/resources/message.d.ts +16 -0
- package/build/types/resources/message.d.ts.map +1 -0
- package/build/types/resources/message.js +2 -0
- package/build/types/resources/message.js.map +1 -0
- package/build/types/resources/oauth_token.d.ts +9 -0
- package/build/types/resources/oauth_token.d.ts.map +1 -0
- package/build/types/resources/oauth_token.js +2 -0
- package/build/types/resources/oauth_token.js.map +1 -0
- package/build/types/resources/person.d.ts +9 -0
- package/build/types/resources/person.d.ts.map +1 -0
- package/build/types/resources/person.js +2 -0
- package/build/types/resources/person.js.map +1 -0
- package/build/types/resources/reaction.d.ts +10 -0
- package/build/types/resources/reaction.d.ts.map +1 -0
- package/build/types/resources/reaction.js +2 -0
- package/build/types/resources/reaction.js.map +1 -0
- package/build/types/utils/index.d.ts +4 -0
- package/build/types/utils/index.d.ts.map +1 -0
- package/build/types/utils/index.js +4 -0
- package/build/types/utils/index.js.map +1 -0
- package/build/utils/client/client.d.ts +21 -12
- package/build/utils/client/client.d.ts.map +1 -1
- package/build/utils/client/client.js +24 -22
- package/build/utils/client/client.js.map +1 -1
- package/build/utils/session.d.ts +0 -5
- package/build/utils/session.d.ts.map +1 -1
- package/build/utils/session.js +0 -10
- package/build/utils/session.js.map +1 -1
- package/package.json +2 -3
- package/src/__tests__/client.ts +72 -19
- package/src/__tests__/session.ts +0 -11
- package/src/__utils__/handlers.ts +1 -1
- package/src/components/conversations.tsx +33 -11
- package/src/components/index.tsx +1 -0
- package/src/contexts/api_provider.tsx +17 -26
- package/src/contexts/chat_context.tsx +61 -7
- package/src/hooks/index.ts +2 -0
- package/src/hooks/use_api.ts +60 -0
- package/src/hooks/use_current_person.ts +15 -0
- package/src/navigation/index.tsx +14 -4
- package/src/screens/conversation_screen.tsx +83 -7
- package/src/screens/not_found.tsx +1 -1
- package/src/types/api_primitives.ts +24 -0
- package/src/types/index.ts +3 -0
- package/src/types/resources/conversation.ts +15 -0
- package/src/types/resources/index.ts +4 -0
- package/src/types/resources/message.ts +18 -0
- package/src/types/resources/oauth_token.ts +8 -0
- package/src/types/resources/person.ts +9 -0
- package/src/types/resources/reaction.ts +9 -0
- package/src/types/utils/index.ts +6 -0
- package/src/utils/client/client.ts +41 -34
- package/src/utils/client/types.d.ts +2 -0
- package/src/utils/session.ts +0 -13
- package/build/utils/api.d.ts +0 -9
- package/build/utils/api.d.ts.map +0 -1
- package/build/utils/api.js +0 -36
- package/build/utils/api.js.map +0 -1
- package/src/types.d.ts +0 -35
- package/src/utils/api.ts +0 -47
|
@@ -1,16 +1,69 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { useNavigation } from '@react-navigation/native';
|
|
2
|
+
import React, { useEffect } from 'react';
|
|
3
|
+
import { FlatList, SafeAreaView, StyleSheet, TextInput, View } from 'react-native';
|
|
3
4
|
import { Text } from '../components/display';
|
|
5
|
+
import { useSuspenseGet, useSuspensePaginator } from '../hooks/use_api';
|
|
6
|
+
import { useTheme } from '../hooks';
|
|
4
7
|
export function ConversationScreen({ route }) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
const navigation = useNavigation();
|
|
9
|
+
const { conversation_id } = route.params;
|
|
10
|
+
const { data: conversation } = useSuspenseGet({
|
|
11
|
+
url: `/me/conversations/${conversation_id}`,
|
|
12
|
+
data: {
|
|
13
|
+
fields: {
|
|
14
|
+
Conversation: ['title'],
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
const { data, refetch, isRefetching, fetchNextPage } = useSuspensePaginator({
|
|
19
|
+
url: `/me/conversations/${conversation_id}/messages`,
|
|
20
|
+
data: {
|
|
21
|
+
perPage: 25,
|
|
22
|
+
fields: {
|
|
23
|
+
Message: ['text', 'mine'],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
navigation.setOptions({ title: conversation?.title });
|
|
29
|
+
}, [conversation, conversation_id, navigation]);
|
|
30
|
+
return (<SafeAreaView style={styles.container}>
|
|
31
|
+
<FlatList inverted contentContainerStyle={styles.listContainer} refreshing={isRefetching} onRefresh={refetch} data={data} keyExtractor={item => item.id} renderItem={({ item }) => <Message {...item}/>} onEndReached={() => fetchNextPage()}/>
|
|
32
|
+
<View style={styles.textInputContainer}>
|
|
33
|
+
<TextInput aria-disabled={true} placeholder="Send a message" onChangeText={() => console.log('TODO: Implement sending a message')} value="" style={styles.textInput}/>
|
|
34
|
+
</View>
|
|
35
|
+
</SafeAreaView>);
|
|
8
36
|
}
|
|
37
|
+
function Message(message) {
|
|
38
|
+
const { text } = message;
|
|
39
|
+
const styles = useMessageStyles(message);
|
|
40
|
+
return <Text style={styles.message}>{text}</Text>;
|
|
41
|
+
}
|
|
42
|
+
const useMessageStyles = ({ mine }) => {
|
|
43
|
+
const { colors } = useTheme();
|
|
44
|
+
return StyleSheet.create({
|
|
45
|
+
message: {
|
|
46
|
+
alignSelf: mine ? 'flex-end' : 'flex-start',
|
|
47
|
+
backgroundColor: mine ? colors.fillColorNeutral040 : colors.fillColorNeutral050Base,
|
|
48
|
+
borderRadius: 16,
|
|
49
|
+
borderBottomLeftRadius: mine ? 16 : 0,
|
|
50
|
+
borderBottomRightRadius: mine ? 0 : 16,
|
|
51
|
+
padding: 12,
|
|
52
|
+
color: colors.textColorDefaultPrimary,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
};
|
|
9
56
|
const styles = StyleSheet.create({
|
|
10
57
|
container: {
|
|
11
58
|
flex: 1,
|
|
12
59
|
justifyContent: 'center',
|
|
13
|
-
gap: 8,
|
|
14
60
|
},
|
|
61
|
+
listContainer: {
|
|
62
|
+
gap: 12,
|
|
63
|
+
paddingHorizontal: 16,
|
|
64
|
+
paddingTop: 12,
|
|
65
|
+
},
|
|
66
|
+
textInputContainer: { borderTopWidth: 1, padding: 12 },
|
|
67
|
+
textInput: { borderRadius: 16, borderWidth: 1, padding: 12 },
|
|
15
68
|
});
|
|
16
69
|
//# sourceMappingURL=conversation_screen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation_screen.js","sourceRoot":"","sources":["../../src/screens/conversation_screen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversation_screen.js","sourceRoot":"","sources":["../../src/screens/conversation_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport React, { useEffect } from 'react'\nimport { FlatList, SafeAreaView, StyleSheet, TextInput, View } from 'react-native'\nimport { Text } from '../components/display'\nimport { useSuspenseGet, useSuspensePaginator } from '../hooks/use_api'\nimport { ConversationResource, MessageResource } from '../types'\nimport { useTheme } from '../hooks'\n\nexport type ConversationScreenProps = StaticScreenProps<{\n conversation_id: string\n chat_group_graph_id: string\n}>\n\nexport function ConversationScreen({ route }: ConversationScreenProps) {\n const navigation = useNavigation()\n const { conversation_id } = route.params\n\n const { data: conversation } = useSuspenseGet<ConversationResource>({\n url: `/me/conversations/${conversation_id}`,\n data: {\n fields: {\n Conversation: ['title'],\n },\n },\n })\n\n const { data, refetch, isRefetching, fetchNextPage } = useSuspensePaginator<MessageResource>({\n url: `/me/conversations/${conversation_id}/messages`,\n data: {\n perPage: 25,\n fields: {\n Message: ['text', 'mine'],\n },\n },\n })\n\n useEffect(() => {\n navigation.setOptions({ title: conversation?.title })\n }, [conversation, conversation_id, navigation])\n\n return (\n <SafeAreaView style={styles.container}>\n <FlatList\n inverted\n contentContainerStyle={styles.listContainer}\n refreshing={isRefetching}\n onRefresh={refetch}\n data={data}\n keyExtractor={item => item.id}\n renderItem={({ item }) => <Message {...item} />}\n onEndReached={() => fetchNextPage()}\n />\n <View style={styles.textInputContainer}>\n <TextInput\n aria-disabled={true}\n placeholder=\"Send a message\"\n onChangeText={() => console.log('TODO: Implement sending a message')}\n value=\"\"\n style={styles.textInput}\n />\n </View>\n </SafeAreaView>\n )\n}\n\nfunction Message(message: MessageResource) {\n const { text } = message\n const styles = useMessageStyles(message)\n\n return <Text style={styles.message}>{text}</Text>\n}\n\nconst useMessageStyles = ({ mine }: MessageResource) => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n message: {\n alignSelf: mine ? 'flex-end' : 'flex-start',\n backgroundColor: mine ? colors.fillColorNeutral040 : colors.fillColorNeutral050Base,\n borderRadius: 16,\n borderBottomLeftRadius: mine ? 16 : 0,\n borderBottomRightRadius: mine ? 0 : 16,\n padding: 12,\n color: colors.textColorDefaultPrimary,\n },\n })\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n },\n listContainer: {\n gap: 12,\n paddingHorizontal: 16,\n paddingTop: 12,\n },\n textInputContainer: { borderTopWidth: 1, padding: 12 },\n textInput: { borderRadius: 16, borderWidth: 1, padding: 12 },\n})\n"]}
|
|
@@ -4,7 +4,7 @@ import { StyleSheet, View } from 'react-native';
|
|
|
4
4
|
export function NotFound() {
|
|
5
5
|
return (<View style={styles.container}>
|
|
6
6
|
<Text>404</Text>
|
|
7
|
-
<Button
|
|
7
|
+
<Button href="Conversations">Go to Home</Button>
|
|
8
8
|
</View>);
|
|
9
9
|
}
|
|
10
10
|
const styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"not_found.js","sourceRoot":"","sources":["../../src/screens/not_found.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE/C,MAAM,UAAU,QAAQ;IACtB,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CACf;MAAA,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"not_found.js","sourceRoot":"","sources":["../../src/screens/not_found.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE/C,MAAM,UAAU,QAAQ;IACtB,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CACf;MAAA,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CACjD;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,EAAE;KACR;CACF,CAAC,CAAA","sourcesContent":["import React from 'react'\nimport { Button, Text } from '@react-navigation/elements'\nimport { StyleSheet, View } from 'react-native'\n\nexport function NotFound() {\n return (\n <View style={styles.container}>\n <Text>404</Text>\n <Button href=\"Conversations\">Go to Home</Button>\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n gap: 10,\n },\n})\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface ResourceObject {
|
|
2
|
+
id: string;
|
|
3
|
+
type: string;
|
|
4
|
+
}
|
|
5
|
+
export type ApiResource<Type = ResourceObject> = {
|
|
6
|
+
data: Type;
|
|
7
|
+
links: Record<string, string>;
|
|
8
|
+
meta: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export type ApiCollection<Type = ResourceObject> = {
|
|
11
|
+
data: Type[];
|
|
12
|
+
links: Record<string, string>;
|
|
13
|
+
meta: CollectionMeta;
|
|
14
|
+
};
|
|
15
|
+
interface CollectionMeta {
|
|
16
|
+
count: number;
|
|
17
|
+
totalCount: number;
|
|
18
|
+
next?: Record<string, unknown>;
|
|
19
|
+
parent?: ResourceObject;
|
|
20
|
+
[attributeName: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=api_primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api_primitives.d.ts","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,cAAc,IAAI;IAC/C,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,IAAI,GAAG,cAAc,IAAI;IACjD,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAA;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api_primitives.js","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"","sourcesContent":["export interface ResourceObject {\n id: string\n type: string\n}\n\nexport type ApiResource<Type = ResourceObject> = {\n data: Type\n links: Record<string, string>\n meta: Record<string, unknown>\n}\n\nexport type ApiCollection<Type = ResourceObject> = {\n data: Type[]\n links: Record<string, string>\n meta: CollectionMeta\n}\n\ninterface CollectionMeta {\n count: number\n totalCount: number\n next?: Record<string, unknown>\n parent?: ResourceObject\n [attributeName: string]: unknown\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA","sourcesContent":["export * from './api_primitives'\nexport * from './resources'\nexport * from './utils'\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ResourceObject } from '../api_primitives';
|
|
2
|
+
export interface ConversationResource extends ResourceObject {
|
|
3
|
+
title: string;
|
|
4
|
+
subtitle: string;
|
|
5
|
+
createdAt: string;
|
|
6
|
+
updatedAt: string;
|
|
7
|
+
repliesDisabled: boolean;
|
|
8
|
+
lastMessageAuthorId: string;
|
|
9
|
+
lastMessageAuthorName: string;
|
|
10
|
+
lastMessageCreatedAt: string;
|
|
11
|
+
lastMessageTextPreview: string;
|
|
12
|
+
unreadCount: number;
|
|
13
|
+
muted: boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/types/resources/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,OAAO,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/types/resources/conversation.ts"],"names":[],"mappings":"","sourcesContent":["import type { ResourceObject } from '../api_primitives'\n\nexport interface ConversationResource extends ResourceObject {\n title: string\n subtitle: string\n createdAt: string\n updatedAt: string\n repliesDisabled: boolean\n lastMessageAuthorId: string\n lastMessageAuthorName: string\n lastMessageCreatedAt: string\n lastMessageTextPreview: string\n unreadCount: number\n muted: boolean\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA","sourcesContent":["export * from './conversation'\nexport * from './message'\nexport * from './person'\nexport * from './oauth_token'\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PersonResource } from './person';
|
|
2
|
+
import type { ReactionCountResource } from './reaction';
|
|
3
|
+
export interface MessageResource {
|
|
4
|
+
type: 'Message';
|
|
5
|
+
id: string;
|
|
6
|
+
text: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
textEditedAt: string | null;
|
|
9
|
+
mine: boolean;
|
|
10
|
+
attachments: unknown[];
|
|
11
|
+
author: PersonResource;
|
|
12
|
+
reactionCounts: ReactionCountResource[];
|
|
13
|
+
renderAuthor?: boolean;
|
|
14
|
+
renderTime?: boolean;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/types/resources/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,OAAO,EAAE,CAAA;IACtB,MAAM,EAAE,cAAc,CAAA;IACtB,cAAc,EAAE,qBAAqB,EAAE,CAAA;IAGvC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/types/resources/message.ts"],"names":[],"mappings":"","sourcesContent":["import type { PersonResource } from './person'\nimport type { ReactionCountResource } from './reaction'\n\nexport interface MessageResource {\n type: 'Message'\n id: string\n text: string\n createdAt: string\n textEditedAt: string | null\n mine: boolean\n attachments: unknown[]\n author: PersonResource\n reactionCounts: ReactionCountResource[]\n\n // Custom Local Properties we set for rendering\n renderAuthor?: boolean\n renderTime?: boolean\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth_token.d.ts","sourceRoot":"","sources":["../../../src/types/resources/oauth_token.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,GAAG,CAAA;IACf,YAAY,EAAE,GAAG,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,GAAG,CAAA;CACnB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth_token.js","sourceRoot":"","sources":["../../../src/types/resources/oauth_token.ts"],"names":[],"mappings":"","sourcesContent":["export type OAuthToken = {\n token_type: any\n access_token: any\n created_at: number\n expires_in: any\n scope: string\n refresh_token: any\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.d.ts","sourceRoot":"","sources":["../../../src/types/resources/person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,OAAO,CAAA;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.js","sourceRoot":"","sources":["../../../src/types/resources/person.ts"],"names":[],"mappings":"","sourcesContent":["import { ResourceObject } from '../api_primitives'\n\nexport interface PersonResource extends ResourceObject {\n name: string\n avatar: string\n canChat: boolean\n unreadCount: number\n pcoChatEnabled: boolean\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ReactionCountResource {
|
|
2
|
+
type: 'ReactionCount';
|
|
3
|
+
id: string;
|
|
4
|
+
value: 'thumbs_up' | 'thumbs_down' | 'pray' | 'laugh' | 'heart';
|
|
5
|
+
count: number;
|
|
6
|
+
mine: number;
|
|
7
|
+
messageId: string;
|
|
8
|
+
authorIds: number[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=reaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/resources/reaction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,WAAW,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reaction.js","sourceRoot":"","sources":["../../../src/types/resources/reaction.ts"],"names":[],"mappings":"","sourcesContent":["export interface ReactionCountResource {\n type: 'ReactionCount'\n id: string\n value: 'thumbs_up' | 'thumbs_down' | 'pray' | 'laugh' | 'heart'\n count: number\n mine: number\n messageId: string\n authorIds: number[]\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/utils/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACnC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/utils/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,oCAAoC","sourcesContent":["// Sets all the properties of of a deeply nested object to optional.\n// Example: `DeepPartial<ChatTheme>`\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: DeepPartial<T[P]>\n}\n"]}
|
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ApiCollection, ApiResource } from '../../types';
|
|
2
|
+
import { Session } from '../session';
|
|
2
3
|
import Uri from '../uri';
|
|
3
|
-
import {
|
|
4
|
-
|
|
4
|
+
import { DeleteRequest, GetRequest, PatchRequest, PostRequest } from './types';
|
|
5
|
+
type ClientArgs = {
|
|
6
|
+
version: string;
|
|
7
|
+
defaultHeaders?: Record<string, string>;
|
|
8
|
+
onTokenExpired: () => void;
|
|
9
|
+
session: Session;
|
|
10
|
+
app: string;
|
|
11
|
+
};
|
|
12
|
+
export declare class Client {
|
|
5
13
|
version: string;
|
|
6
14
|
defaultHeaders: Record<string, string>;
|
|
7
15
|
uri: Uri;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
session: any;
|
|
12
|
-
app: any;
|
|
13
|
-
});
|
|
14
|
-
get(args: GetRequest): Promise<JSONAPIResponse>;
|
|
16
|
+
onTokenExpired: () => void;
|
|
17
|
+
constructor({ version, defaultHeaders, session, app, onTokenExpired }: ClientArgs);
|
|
18
|
+
get<T extends ApiCollection | ApiResource>(args: GetRequest): Promise<T>;
|
|
15
19
|
patch(args: PatchRequest): Promise<any>;
|
|
16
20
|
post(args: PostRequest): Promise<any>;
|
|
17
21
|
delete(args: DeleteRequest): Promise<any>;
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
handleTokenExpired: (response: Response) => Promise<never>;
|
|
23
|
+
get headers(): {
|
|
24
|
+
'User-Agent': string;
|
|
25
|
+
Authorization: string;
|
|
26
|
+
Accept: string;
|
|
27
|
+
'Content-Type': string;
|
|
28
|
+
'X-PCO-API-Version': string;
|
|
20
29
|
};
|
|
21
30
|
}
|
|
22
31
|
export default Client;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,GAAG,MAAM,QAAQ,CAAA;AAUxB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAe,MAAM,SAAS,CAAA;AAE3F,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,qBAAa,MAAM;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAK;IAC3C,GAAG,EAAE,GAAG,CAAA;IACR,cAAc,EAAE,MAAM,IAAI,CAAA;gBAEd,EAAE,OAAO,EAAE,cAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,UAAU;IAOhF,GAAG,CAAC,CAAC,SAAS,aAAa,GAAG,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAuCxE,KAAK,CAAC,IAAI,EAAE,YAAY;IASxB,IAAI,CAAC,IAAI,EAAE,WAAW;IAStB,MAAM,CAAC,IAAI,EAAE,aAAa;IAShC,kBAAkB,aAAc,QAAQ,oBAMvC;IAED,IAAI,OAAO;;;;;;MAQV;CACF;AAED,eAAe,MAAM,CAAA"}
|
|
@@ -4,22 +4,17 @@ export class Client {
|
|
|
4
4
|
version = '';
|
|
5
5
|
defaultHeaders = {};
|
|
6
6
|
uri;
|
|
7
|
-
|
|
7
|
+
onTokenExpired;
|
|
8
|
+
constructor({ version, defaultHeaders = {}, session, app, onTokenExpired }) {
|
|
8
9
|
this.version = version;
|
|
9
10
|
this.uri = new Uri({ session, app });
|
|
10
|
-
this.defaultHeaders =
|
|
11
|
-
|
|
12
|
-
'Content-Type': 'application/json',
|
|
13
|
-
'X-PCO-API-Version': version,
|
|
14
|
-
...this.uri.headers,
|
|
15
|
-
...defaultHeaders,
|
|
16
|
-
};
|
|
11
|
+
this.defaultHeaders = defaultHeaders;
|
|
12
|
+
this.onTokenExpired = onTokenExpired;
|
|
17
13
|
}
|
|
18
14
|
async get(args) {
|
|
19
15
|
const { walk, ...data } = args.data;
|
|
20
16
|
const isWalking = Boolean(walk);
|
|
21
|
-
const
|
|
22
|
-
const headers = { ...defaultHeaders, ...args.headers };
|
|
17
|
+
const headers = { ...this.headers, ...args.headers };
|
|
23
18
|
const url = this.uri.appUrl(args.url);
|
|
24
19
|
await throwErrorIfQueryParams(url);
|
|
25
20
|
const requestArgs = { data, url, action: 'GET', headers };
|
|
@@ -42,32 +37,39 @@ export class Client {
|
|
|
42
37
|
});
|
|
43
38
|
};
|
|
44
39
|
const handler = isWalking ? walkRequest : makeRequest;
|
|
45
|
-
return throwErrorIfFieldsMissing(handler, requestArgs);
|
|
40
|
+
return throwErrorIfFieldsMissing(handler, requestArgs).catch(this.handleTokenExpired);
|
|
46
41
|
}
|
|
47
42
|
async patch(args) {
|
|
48
|
-
const
|
|
49
|
-
const headers = { ...defaultHeaders, ...args.headers };
|
|
43
|
+
const headers = { ...this.headers, ...args.headers };
|
|
50
44
|
const url = this.uri.appUrl(args.url);
|
|
51
45
|
const requestArgs = { data: args.data, url, action: 'PATCH', headers };
|
|
52
|
-
return ensureNoQueryParamsInDev(makeRequest, requestArgs);
|
|
46
|
+
return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleTokenExpired);
|
|
53
47
|
}
|
|
54
48
|
async post(args) {
|
|
55
|
-
const
|
|
56
|
-
const headers = { ...defaultHeaders, ...args.headers };
|
|
49
|
+
const headers = { ...this.headers, ...args.headers };
|
|
57
50
|
const url = this.uri.appUrl(args.url);
|
|
58
51
|
const requestArgs = { ...args, data: args.data, url, action: 'POST', headers };
|
|
59
|
-
return ensureNoQueryParamsInDev(makeRequest, requestArgs);
|
|
52
|
+
return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleTokenExpired);
|
|
60
53
|
}
|
|
61
54
|
async delete(args) {
|
|
62
|
-
const
|
|
63
|
-
const headers = { ...defaultHeaders, ...args.headers };
|
|
55
|
+
const headers = { ...this.headers, ...args.headers };
|
|
64
56
|
const url = this.uri.appUrl(args.url);
|
|
65
57
|
const requestArgs = { url, action: 'DELETE', headers };
|
|
66
|
-
return makeRequest(requestArgs);
|
|
58
|
+
return makeRequest(requestArgs).catch(this.handleTokenExpired);
|
|
67
59
|
}
|
|
68
|
-
|
|
60
|
+
handleTokenExpired = (response) => {
|
|
61
|
+
if (response.status === 401) {
|
|
62
|
+
this.onTokenExpired();
|
|
63
|
+
}
|
|
64
|
+
return Promise.reject(response);
|
|
65
|
+
};
|
|
66
|
+
get headers() {
|
|
69
67
|
return {
|
|
70
|
-
|
|
68
|
+
Accept: 'application/vnd.api+json',
|
|
69
|
+
'Content-Type': 'application/json',
|
|
70
|
+
'X-PCO-API-Version': this.version,
|
|
71
|
+
...this.uri.headers,
|
|
72
|
+
...this.defaultHeaders,
|
|
71
73
|
};
|
|
72
74
|
}
|
|
73
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApiCollection, ApiResource } from '../../types'\nimport { Session } from '../session'\nimport Uri from '../uri'\nimport {\n concatRecords,\n ensureNoQueryParamsInDev,\n makeRequest,\n MakeRequestArgs,\n throwErrorIfFieldsMissing,\n throwErrorIfQueryParams,\n} from './request_helpers'\n\nimport { DeleteRequest, GetRequest, PatchRequest, PostRequest, WalkRequest } from './types'\n\ntype ClientArgs = {\n version: string\n defaultHeaders?: Record<string, string>\n onTokenExpired: () => void\n session: Session\n app: string\n}\n\nexport class Client {\n version: string = ''\n defaultHeaders: Record<string, string> = {}\n uri: Uri\n onTokenExpired: () => void\n\n constructor({ version, defaultHeaders = {}, session, app, onTokenExpired }: ClientArgs) {\n this.version = version\n this.uri = new Uri({ session, app })\n this.defaultHeaders = defaultHeaders\n this.onTokenExpired = onTokenExpired\n }\n\n async get<T extends ApiCollection | ApiResource>(args: GetRequest): Promise<T> {\n const { walk, ...data } = args.data\n const isWalking = Boolean(walk)\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n await throwErrorIfQueryParams(url)\n\n const requestArgs: MakeRequestArgs = { data, url, action: 'GET', headers }\n\n const walkRequest = ({\n url: requestUrl,\n data: d = { fields: {} },\n acc = { data: [], included: [], meta: {}, links: {} },\n ...options\n }: WalkRequest) => {\n return makeRequest({\n action: 'GET',\n data: d,\n url: requestUrl,\n ...options,\n headers,\n }).then(({ links, ...rest }) => {\n const records = Array.isArray(rest.data) ? concatRecords(acc, rest) : rest\n\n // `next` will have our params in the link so we do not want to pass them back in\n if (links?.next) {\n return walkRequest({ ...options, data: d, url: links.next, acc: records })\n } else {\n return records\n }\n })\n }\n\n const handler = isWalking ? walkRequest : makeRequest\n\n return throwErrorIfFieldsMissing(handler, requestArgs).catch(this.handleTokenExpired)\n }\n\n async patch(args: PatchRequest) {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { data: args.data, url, action: 'PATCH', headers }\n\n return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleTokenExpired)\n }\n\n async post(args: PostRequest) {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { ...args, data: args.data, url, action: 'POST', headers }\n\n return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleTokenExpired)\n }\n\n async delete(args: DeleteRequest) {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { url, action: 'DELETE', headers }\n\n return makeRequest(requestArgs).catch(this.handleTokenExpired)\n }\n\n handleTokenExpired = (response: Response) => {\n if (response.status === 401) {\n this.onTokenExpired()\n }\n\n return Promise.reject(response)\n }\n\n get headers() {\n return {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/json',\n 'X-PCO-API-Version': this.version,\n ...this.uri.headers,\n ...this.defaultHeaders,\n }\n }\n}\n\nexport default Client\n"]}
|
package/build/utils/session.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { OAuthToken } from '../types';
|
|
2
|
-
import Uri from './uri';
|
|
3
2
|
export type ENV = 'production' | 'staging' | 'development';
|
|
4
3
|
export declare const baseUrlMap: {
|
|
5
4
|
production: string;
|
|
@@ -18,14 +17,10 @@ type SessionProps = {
|
|
|
18
17
|
export declare class Session {
|
|
19
18
|
env: ENV;
|
|
20
19
|
token: OAuthToken | undefined;
|
|
21
|
-
uri: Uri;
|
|
22
20
|
constructor(props?: SessionProps);
|
|
23
21
|
get isAuthenticated(): boolean;
|
|
24
|
-
get host(): "api.planningcenteronline.com" | "api-staging.planningcenteronline.com" | "api.pco.test";
|
|
25
|
-
get baseUrl(): string;
|
|
26
22
|
toString(): string;
|
|
27
23
|
static hydrate(sessionString: string): Session;
|
|
28
24
|
}
|
|
29
|
-
export declare let session: Session;
|
|
30
25
|
export {};
|
|
31
26
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,MAAM,MAAM,GAAG,GAAG,YAAY,GAAG,SAAS,GAAG,aAAa,CAAA;AAE1D,eAAO,MAAM,UAAU;;;;CAItB,CAAA;AAED,KAAK,YAAY,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,SAAS,CAAA;AAEjE;;;;GAIG;AACH,qBAAa,OAAO;IAClB,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;gBAEjB,KAAK,CAAC,EAAE,YAAY;IAMhC,IAAI,eAAe,YAElB;IAED,QAAQ;IAIR,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM;CAQrC"}
|
package/build/utils/session.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import Uri from './uri';
|
|
2
1
|
export const baseUrlMap = {
|
|
3
2
|
production: 'api.planningcenteronline.com',
|
|
4
3
|
staging: 'api-staging.planningcenteronline.com',
|
|
@@ -12,22 +11,14 @@ export const baseUrlMap = {
|
|
|
12
11
|
export class Session {
|
|
13
12
|
env;
|
|
14
13
|
token;
|
|
15
|
-
uri;
|
|
16
14
|
constructor(props) {
|
|
17
15
|
const { env = 'production', token } = props || {};
|
|
18
16
|
this.env = env;
|
|
19
17
|
this.token = token;
|
|
20
|
-
this.uri = new Uri({ session: this });
|
|
21
18
|
}
|
|
22
19
|
get isAuthenticated() {
|
|
23
20
|
return Boolean(this.token);
|
|
24
21
|
}
|
|
25
|
-
get host() {
|
|
26
|
-
return this.uri.host;
|
|
27
|
-
}
|
|
28
|
-
get baseUrl() {
|
|
29
|
-
return this.uri.baseUrl;
|
|
30
|
-
}
|
|
31
22
|
toString() {
|
|
32
23
|
return JSON.stringify({ env: this.env, token: this.token });
|
|
33
24
|
}
|
|
@@ -41,5 +32,4 @@ export class Session {
|
|
|
41
32
|
}
|
|
42
33
|
}
|
|
43
34
|
}
|
|
44
|
-
export let session = new Session({ env: 'development' });
|
|
45
35
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,8BAA8B;IAC1C,OAAO,EAAE,sCAAsC;IAC/C,WAAW,EAAE,cAAc;CAC5B,CAAA;AAID;;;;GAIG;AACH,MAAM,OAAO,OAAO;IAClB,GAAG,CAAK;IACR,KAAK,CAAwB;IAE7B,YAAY,KAAoB;QAC9B,MAAM,EAAE,GAAG,GAAG,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,CAAA;QACjD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,aAAqB;QAClC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;YACvC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,OAAO,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { OAuthToken } from '../types'\n\nexport type ENV = 'production' | 'staging' | 'development'\n\nexport const baseUrlMap = {\n production: 'api.planningcenteronline.com',\n staging: 'api-staging.planningcenteronline.com',\n development: 'api.pco.test',\n}\n\ntype SessionProps = { env?: ENV; token?: OAuthToken } | undefined\n\n/**\n * Session class to track the environment and token\n * Not intended to make network requests or handle authentication\n * - returns urls for convenience only\n */\nexport class Session {\n env: ENV\n token: OAuthToken | undefined\n\n constructor(props?: SessionProps) {\n const { env = 'production', token } = props || {}\n this.env = env\n this.token = token\n }\n\n get isAuthenticated() {\n return Boolean(this.token)\n }\n\n toString() {\n return JSON.stringify({ env: this.env, token: this.token })\n }\n\n static hydrate(sessionString: string) {\n try {\n const props = JSON.parse(sessionString)\n return new Session(props)\n } catch (error) {\n return new Session()\n }\n }\n}\n"]}
|