@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.
Files changed (112) hide show
  1. package/build/components/conversations.d.ts.map +1 -1
  2. package/build/components/conversations.js +29 -8
  3. package/build/components/conversations.js.map +1 -1
  4. package/build/components/index.d.ts +1 -0
  5. package/build/components/index.d.ts.map +1 -1
  6. package/build/components/index.js +1 -0
  7. package/build/components/index.js.map +1 -1
  8. package/build/contexts/api_provider.d.ts +4 -6
  9. package/build/contexts/api_provider.d.ts.map +1 -1
  10. package/build/contexts/api_provider.js +12 -20
  11. package/build/contexts/api_provider.js.map +1 -1
  12. package/build/contexts/chat_context.d.ts +7 -5
  13. package/build/contexts/chat_context.d.ts.map +1 -1
  14. package/build/contexts/chat_context.js +40 -4
  15. package/build/contexts/chat_context.js.map +1 -1
  16. package/build/hooks/index.d.ts +2 -0
  17. package/build/hooks/index.d.ts.map +1 -1
  18. package/build/hooks/index.js +2 -0
  19. package/build/hooks/index.js.map +1 -1
  20. package/build/hooks/use_api.d.ts +61 -0
  21. package/build/hooks/use_api.d.ts.map +1 -0
  22. package/build/hooks/use_api.js +39 -0
  23. package/build/hooks/use_api.js.map +1 -0
  24. package/build/hooks/use_current_person.d.ts +3 -0
  25. package/build/hooks/use_current_person.d.ts.map +1 -0
  26. package/build/hooks/use_current_person.js +13 -0
  27. package/build/hooks/use_current_person.js.map +1 -0
  28. package/build/navigation/index.d.ts +1 -0
  29. package/build/navigation/index.d.ts.map +1 -1
  30. package/build/navigation/index.js +7 -4
  31. package/build/navigation/index.js.map +1 -1
  32. package/build/screens/conversation_screen.d.ts.map +1 -1
  33. package/build/screens/conversation_screen.js +59 -6
  34. package/build/screens/conversation_screen.js.map +1 -1
  35. package/build/screens/not_found.js +1 -1
  36. package/build/screens/not_found.js.map +1 -1
  37. package/build/types/api_primitives.d.ts +23 -0
  38. package/build/types/api_primitives.d.ts.map +1 -0
  39. package/build/types/api_primitives.js +2 -0
  40. package/build/types/api_primitives.js.map +1 -0
  41. package/build/types/index.d.ts +4 -0
  42. package/build/types/index.d.ts.map +1 -0
  43. package/build/types/index.js +4 -0
  44. package/build/types/index.js.map +1 -0
  45. package/build/types/resources/conversation.d.ts +15 -0
  46. package/build/types/resources/conversation.d.ts.map +1 -0
  47. package/build/types/resources/conversation.js +2 -0
  48. package/build/types/resources/conversation.js.map +1 -0
  49. package/build/types/resources/index.d.ts +5 -0
  50. package/build/types/resources/index.d.ts.map +1 -0
  51. package/build/types/resources/index.js +5 -0
  52. package/build/types/resources/index.js.map +1 -0
  53. package/build/types/resources/message.d.ts +16 -0
  54. package/build/types/resources/message.d.ts.map +1 -0
  55. package/build/types/resources/message.js +2 -0
  56. package/build/types/resources/message.js.map +1 -0
  57. package/build/types/resources/oauth_token.d.ts +9 -0
  58. package/build/types/resources/oauth_token.d.ts.map +1 -0
  59. package/build/types/resources/oauth_token.js +2 -0
  60. package/build/types/resources/oauth_token.js.map +1 -0
  61. package/build/types/resources/person.d.ts +9 -0
  62. package/build/types/resources/person.d.ts.map +1 -0
  63. package/build/types/resources/person.js +2 -0
  64. package/build/types/resources/person.js.map +1 -0
  65. package/build/types/resources/reaction.d.ts +10 -0
  66. package/build/types/resources/reaction.d.ts.map +1 -0
  67. package/build/types/resources/reaction.js +2 -0
  68. package/build/types/resources/reaction.js.map +1 -0
  69. package/build/types/utils/index.d.ts +4 -0
  70. package/build/types/utils/index.d.ts.map +1 -0
  71. package/build/types/utils/index.js +4 -0
  72. package/build/types/utils/index.js.map +1 -0
  73. package/build/utils/client/client.d.ts +21 -12
  74. package/build/utils/client/client.d.ts.map +1 -1
  75. package/build/utils/client/client.js +24 -22
  76. package/build/utils/client/client.js.map +1 -1
  77. package/build/utils/session.d.ts +0 -5
  78. package/build/utils/session.d.ts.map +1 -1
  79. package/build/utils/session.js +0 -10
  80. package/build/utils/session.js.map +1 -1
  81. package/package.json +2 -3
  82. package/src/__tests__/client.ts +72 -19
  83. package/src/__tests__/session.ts +0 -11
  84. package/src/__utils__/handlers.ts +1 -1
  85. package/src/components/conversations.tsx +33 -11
  86. package/src/components/index.tsx +1 -0
  87. package/src/contexts/api_provider.tsx +17 -26
  88. package/src/contexts/chat_context.tsx +61 -7
  89. package/src/hooks/index.ts +2 -0
  90. package/src/hooks/use_api.ts +60 -0
  91. package/src/hooks/use_current_person.ts +15 -0
  92. package/src/navigation/index.tsx +14 -4
  93. package/src/screens/conversation_screen.tsx +83 -7
  94. package/src/screens/not_found.tsx +1 -1
  95. package/src/types/api_primitives.ts +24 -0
  96. package/src/types/index.ts +3 -0
  97. package/src/types/resources/conversation.ts +15 -0
  98. package/src/types/resources/index.ts +4 -0
  99. package/src/types/resources/message.ts +18 -0
  100. package/src/types/resources/oauth_token.ts +8 -0
  101. package/src/types/resources/person.ts +9 -0
  102. package/src/types/resources/reaction.ts +9 -0
  103. package/src/types/utils/index.ts +6 -0
  104. package/src/utils/client/client.ts +41 -34
  105. package/src/utils/client/types.d.ts +2 -0
  106. package/src/utils/session.ts +0 -13
  107. package/build/utils/api.d.ts +0 -9
  108. package/build/utils/api.d.ts.map +0 -1
  109. package/build/utils/api.js +0 -36
  110. package/build/utils/api.js.map +0 -1
  111. package/src/types.d.ts +0 -35
  112. package/src/utils/api.ts +0 -47
@@ -1,16 +1,69 @@
1
- import React from 'react';
2
- import { StyleSheet, View } from 'react-native';
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
- return (<View style={styles.container}>
6
- <Text>{JSON.stringify(route.params, null, 2)}</Text>
7
- </View>);
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":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAO5C,MAAM,UAAU,kBAAkB,CAAC,EAAE,KAAK,EAA2B;IACnE,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CACrD;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,GAAG,EAAE,CAAC;KACP;CACF,CAAC,CAAA","sourcesContent":["import { StaticScreenProps } from '@react-navigation/native'\nimport React from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport { Text } from '../components/display'\n\nexport type ConversationScreenProps = StaticScreenProps<{\n conversation_id: string\n chat_group_graph_id: string\n}>\n\nexport function ConversationScreen({ route }: ConversationScreenProps) {\n return (\n <View style={styles.container}>\n <Text>{JSON.stringify(route.params, null, 2)}</Text>\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n gap: 8,\n },\n})\n"]}
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 screen="Conversations">Go to Home</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,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CACnD;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 screen=\"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"]}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api_primitives.js.map
@@ -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,4 @@
1
+ export * from './api_primitives';
2
+ export * from './resources';
3
+ export * from './utils';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export * from './api_primitives';
2
+ export * from './resources';
3
+ export * from './utils';
4
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation.js.map
@@ -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,5 @@
1
+ export * from './conversation';
2
+ export * from './message';
3
+ export * from './person';
4
+ export * from './oauth_token';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ export * from './conversation';
2
+ export * from './message';
3
+ export * from './person';
4
+ export * from './oauth_token';
5
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=message.js.map
@@ -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,9 @@
1
+ export type OAuthToken = {
2
+ token_type: any;
3
+ access_token: any;
4
+ created_at: number;
5
+ expires_in: any;
6
+ scope: string;
7
+ refresh_token: any;
8
+ };
9
+ //# sourceMappingURL=oauth_token.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=oauth_token.js.map
@@ -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,9 @@
1
+ import { ResourceObject } from '../api_primitives';
2
+ export interface PersonResource extends ResourceObject {
3
+ name: string;
4
+ avatar: string;
5
+ canChat: boolean;
6
+ unreadCount: number;
7
+ pcoChatEnabled: boolean;
8
+ }
9
+ //# sourceMappingURL=person.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=person.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reaction.js.map
@@ -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,4 @@
1
+ export type DeepPartial<T> = {
2
+ [P in keyof T]?: DeepPartial<T[P]>;
3
+ };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ // Sets all the properties of of a deeply nested object to optional.
2
+ // Example: `DeepPartial<ChatTheme>`
3
+ export {};
4
+ //# sourceMappingURL=index.js.map
@@ -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 { JSONAPIResponse } from '@planningcenter/chat-core';
1
+ import { ApiCollection, ApiResource } from '../../types';
2
+ import { Session } from '../session';
2
3
  import Uri from '../uri';
3
- import { ApiClient, DeleteRequest, GetRequest, PatchRequest, PostRequest } from './types';
4
- export declare class Client implements ApiClient {
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
- constructor({ version, defaultHeaders, session, app }: {
9
- version: any;
10
- defaultHeaders?: {} | undefined;
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
- get config(): {
19
- defaultHeaders: Record<string, string>;
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,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,GAAG,MAAM,QAAQ,CAAA;AASxB,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,EAEZ,MAAM,SAAS,CAAA;AAEhB,qBAAa,MAAO,YAAW,SAAS;IACtC,OAAO,EAAE,MAAM,CAAK;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAK;IAC3C,GAAG,EAAE,GAAG,CAAA;gBAEI,EAAE,OAAO,EAAE,cAAmB,EAAE,OAAO,EAAE,GAAG,EAAE;;;;;KAAA;IAYpD,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;IAwC/C,KAAK,CAAC,IAAI,EAAE,YAAY;IAUxB,IAAI,CAAC,IAAI,EAAE,WAAW;IAUtB,MAAM,CAAC,IAAI,EAAE,aAAa;IAUhC,IAAI,MAAM;;MAIT;CACF;AAED,eAAe,MAAM,CAAA"}
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
- constructor({ version, defaultHeaders = {}, session, app }) {
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
- Accept: 'application/vnd.api+json',
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 { defaultHeaders } = this.config;
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 { defaultHeaders } = this.config;
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 { defaultHeaders } = this.config;
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 { defaultHeaders } = this.config;
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
- get config() {
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
- defaultHeaders: this.defaultHeaders,
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":"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","sourcesContent":["import { JSONAPIResponse } from '@planningcenter/chat-core'\nimport Uri from '../uri'\nimport {\n concatRecords,\n ensureNoQueryParamsInDev,\n makeRequest,\n MakeRequestArgs,\n throwErrorIfFieldsMissing,\n throwErrorIfQueryParams,\n} from './request_helpers'\nimport {\n ApiClient,\n DeleteRequest,\n GetRequest,\n PatchRequest,\n PostRequest,\n WalkRequest,\n} from './types'\n\nexport class Client implements ApiClient {\n version: string = ''\n defaultHeaders: Record<string, string> = {}\n uri: Uri\n\n constructor({ version, defaultHeaders = {}, session, app }) {\n this.version = version\n this.uri = new Uri({ session, app })\n this.defaultHeaders = {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/json',\n 'X-PCO-API-Version': version,\n ...this.uri.headers,\n ...defaultHeaders,\n }\n }\n\n async get(args: GetRequest): Promise<JSONAPIResponse> {\n const { walk, ...data } = args.data\n const isWalking = Boolean(walk)\n const { defaultHeaders } = this.config\n const headers = { ...defaultHeaders, ...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)\n }\n\n async patch(args: PatchRequest) {\n const { defaultHeaders } = this.config\n const headers = { ...defaultHeaders, ...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)\n }\n\n async post(args: PostRequest) {\n const { defaultHeaders } = this.config\n const headers = { ...defaultHeaders, ...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)\n }\n\n async delete(args: DeleteRequest) {\n const { defaultHeaders } = this.config\n const headers = { ...defaultHeaders, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { url, action: 'DELETE', headers }\n\n return makeRequest(requestArgs)\n }\n\n get config() {\n return {\n defaultHeaders: this.defaultHeaders,\n }\n }\n}\n\nexport default Client\n"]}
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"]}
@@ -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;AACrC,OAAO,GAAG,MAAM,OAAO,CAAA;AAEvB,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;IAC7B,GAAG,EAAE,GAAG,CAAA;gBAEI,KAAK,CAAC,EAAE,YAAY;IAOhC,IAAI,eAAe,YAElB;IAED,IAAI,IAAI,6FAEP;IAED,IAAI,OAAO,WAEV;IAED,QAAQ;IAIR,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM;CAQrC;AAED,eAAO,IAAI,OAAO,SAAsC,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"}
@@ -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":"AACA,OAAO,GAAG,MAAM,OAAO,CAAA;AAIvB,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;IAC7B,GAAG,CAAK;IAER,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;QAClB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA;IACzB,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;AAED,MAAM,CAAC,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAA","sourcesContent":["import { OAuthToken } from '../types'\nimport Uri from './uri'\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 uri: Uri\n\n constructor(props?: SessionProps) {\n const { env = 'production', token } = props || {}\n this.env = env\n this.token = token\n this.uri = new Uri({ session: this })\n }\n\n get isAuthenticated() {\n return Boolean(this.token)\n }\n\n get host() {\n return this.uri.host\n }\n\n get baseUrl() {\n return this.uri.baseUrl\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\nexport let session = new Session({ env: 'development' })\n"]}
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"]}