@amityco/ts-sdk 0.0.1-beta.25 → 0.0.1-beta.26

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 (106) hide show
  1. package/.eslintrc.json +4 -1
  2. package/dist/@types/core/live.d.ts +23 -0
  3. package/dist/@types/core/live.d.ts.map +1 -0
  4. package/dist/@types/core/paging.d.ts +1 -1
  5. package/dist/@types/core/paging.d.ts.map +1 -1
  6. package/dist/@types/domains/comment.d.ts +14 -0
  7. package/dist/@types/domains/comment.d.ts.map +1 -1
  8. package/dist/@types/domains/post.d.ts +17 -0
  9. package/dist/@types/domains/post.d.ts.map +1 -1
  10. package/dist/@types/index.d.ts +1 -0
  11. package/dist/@types/index.d.ts.map +1 -1
  12. package/dist/cache/api/ingestInCache.d.ts +1 -1
  13. package/dist/cache/api/ingestInCache.d.ts.map +1 -1
  14. package/dist/cache/api/mergeInCache.d.ts +1 -1
  15. package/dist/cache/api/mergeInCache.d.ts.map +1 -1
  16. package/dist/category/api/queryCategories.d.ts +3 -3
  17. package/dist/category/api/queryCategories.d.ts.map +1 -1
  18. package/dist/channel/api/queryChannels.d.ts +6 -6
  19. package/dist/channel/api/queryChannels.d.ts.map +1 -1
  20. package/dist/client/api/connectClient.d.ts +1 -1
  21. package/dist/client/api/connectClient.d.ts.map +1 -1
  22. package/dist/client/api/createClient.d.ts +1 -1
  23. package/dist/client/api/createClient.d.ts.map +1 -1
  24. package/dist/comment/api/queryComments.d.ts +1 -9
  25. package/dist/comment/api/queryComments.d.ts.map +1 -1
  26. package/dist/comment/observers/index.d.ts +1 -0
  27. package/dist/comment/observers/index.d.ts.map +1 -1
  28. package/dist/comment/observers/liveComments.d.ts +22 -0
  29. package/dist/comment/observers/liveComments.d.ts.map +1 -0
  30. package/dist/comment/observers/observeComments.d.ts.map +1 -1
  31. package/dist/community/api/getRecommendedCommunities.d.ts +1 -1
  32. package/dist/community/api/getRecommendedCommunities.d.ts.map +1 -1
  33. package/dist/community/api/getTopTrendingCommunities.d.ts +1 -1
  34. package/dist/community/api/getTopTrendingCommunities.d.ts.map +1 -1
  35. package/dist/community/api/queryCommunities.d.ts +7 -7
  36. package/dist/community/api/queryCommunities.d.ts.map +1 -1
  37. package/dist/core/debug.d.ts +1 -1
  38. package/dist/core/debug.d.ts.map +1 -1
  39. package/dist/core/query/paging.d.ts +2 -2
  40. package/dist/core/query/paging.d.ts.map +1 -1
  41. package/dist/core/query/query.d.ts +1 -1
  42. package/dist/core/query/query.d.ts.map +1 -1
  43. package/dist/core/tests/query/filtering.test.d.ts +2 -0
  44. package/dist/core/tests/query/filtering.test.d.ts.map +1 -0
  45. package/dist/core/tests/query/query.test.d.ts +2 -0
  46. package/dist/core/tests/query/query.test.d.ts.map +1 -0
  47. package/dist/core/transports/ws.d.ts +1 -1
  48. package/dist/core/transports/ws.d.ts.map +1 -1
  49. package/dist/external/api/createUserToken.d.ts +1 -1
  50. package/dist/external/api/createUserToken.d.ts.map +1 -1
  51. package/dist/feed/api/queryGlobalFeed.d.ts +4 -4
  52. package/dist/feed/api/queryGlobalFeed.d.ts.map +1 -1
  53. package/dist/index.cjs.js +17789 -17577
  54. package/dist/index.esm.js +17788 -17578
  55. package/dist/index.umd.js +4 -19
  56. package/dist/post/api/queryPosts.d.ts +1 -12
  57. package/dist/post/api/queryPosts.d.ts.map +1 -1
  58. package/dist/post/observers/index.d.ts +1 -0
  59. package/dist/post/observers/index.d.ts.map +1 -1
  60. package/dist/post/observers/livePosts.d.ts +22 -0
  61. package/dist/post/observers/livePosts.d.ts.map +1 -0
  62. package/dist/post/observers/observePosts.d.ts.map +1 -1
  63. package/dist/post/tests/api/getPost.test.d.ts +2 -0
  64. package/dist/post/tests/api/getPost.test.d.ts.map +1 -0
  65. package/dist/post/tests/api/queryPosts.test.d.ts +2 -0
  66. package/dist/post/tests/api/queryPosts.test.d.ts.map +1 -0
  67. package/dist/reaction/api/queryReactions.d.ts +2 -2
  68. package/dist/reaction/api/queryReactions.d.ts.map +1 -1
  69. package/dist/role/api/queryRoles.d.ts +4 -4
  70. package/dist/role/api/queryRoles.d.ts.map +1 -1
  71. package/dist/stream/api/queryStreams.d.ts +6 -6
  72. package/dist/stream/api/queryStreams.d.ts.map +1 -1
  73. package/dist/utils/constants.d.ts +3 -0
  74. package/dist/utils/constants.d.ts.map +1 -0
  75. package/dist/utils/tests/client.d.ts +3 -0
  76. package/dist/utils/tests/client.d.ts.map +1 -0
  77. package/dist/utils/tests/dummy.d.ts +8 -0
  78. package/dist/utils/tests/dummy.d.ts.map +1 -0
  79. package/dist/utils/tests/index.d.ts +3 -0
  80. package/dist/utils/tests/index.d.ts.map +1 -0
  81. package/jest.config.ts +15 -0
  82. package/package.json +21 -16
  83. package/src/@types/core/live.ts +28 -0
  84. package/src/@types/core/paging.ts +1 -1
  85. package/src/@types/domains/comment.ts +31 -0
  86. package/src/@types/domains/post.ts +37 -0
  87. package/src/@types/index.ts +1 -0
  88. package/src/comment/api/queryComments.ts +3 -9
  89. package/src/comment/observers/index.ts +1 -0
  90. package/src/comment/observers/liveComments.ts +169 -0
  91. package/src/comment/observers/observeComments.ts +1 -11
  92. package/src/core/query/query.ts +15 -2
  93. package/src/core/tests/query/filtering.test.ts +11 -0
  94. package/src/core/tests/query/query.test.ts +19 -0
  95. package/src/post/api/queryPosts.ts +3 -12
  96. package/src/post/observers/index.ts +1 -0
  97. package/src/post/observers/livePosts.ts +170 -0
  98. package/src/post/observers/observePosts.ts +1 -13
  99. package/src/post/tests/api/getPost.test.ts +88 -0
  100. package/src/post/tests/api/queryPosts.test.ts +23 -0
  101. package/src/reaction/api/queryReactions.ts +10 -10
  102. package/src/utils/constants.ts +2 -0
  103. package/src/utils/tests/client.ts +5 -0
  104. package/src/utils/tests/dummy.ts +7 -0
  105. package/src/utils/tests/index.ts +2 -0
  106. package/tsconfig.json +23 -22
@@ -13,18 +13,7 @@
13
13
  * @async
14
14
  */
15
15
  export declare const queryPosts: {
16
- (query: {
17
- targetId: string;
18
- targetType: Amity.Post['targetType'];
19
- sortBy?: 'lastCreated' | 'firstCreated' | 'lastUpdated' | 'firstUpdated';
20
- dataType?: string;
21
- isDeleted?: Amity.Post['isDeleted'];
22
- hasFlag?: boolean;
23
- feedType?: 'reviewing' | 'published';
24
- tags?: Amity.Taggable['tags'];
25
- matchingOnlyParentPost?: boolean;
26
- page?: Amity.PageRaw;
27
- }): Promise<Amity.Cached<Amity.Paged<Amity.Post, Amity.PageRaw>>>;
16
+ (query: Amity.QueryPosts): Promise<Amity.Cached<Amity.Paged<Amity.Post, Amity.PageRaw>>>;
28
17
  /**
29
18
  * ```js
30
19
  * import { queryPosts } from '@amityco/ts-sdk'
@@ -1 +1 @@
1
- {"version":3,"file":"queryPosts.d.ts","sourceRoot":"","sources":["../../../src/post/api/queryPosts.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU;YAAiB;QACtC,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,cAAc,CAAC;QACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;QACrC,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC;KACtB,GAAG,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAuCjE;;;;;;;;;;;;OAYG;mBAEM,WAAW,iBAAiB,CAAC,CAAC,CAAC,CAAC,GACtC,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS;CAjBlE,CAAC"}
1
+ {"version":3,"file":"queryPosts.d.ts","sourceRoot":"","sources":["../../../src/post/api/queryPosts.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU;YACd,MAAM,UAAU,GACtB,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAuChE;;;;;;;;;;;;OAYG;mBAEM,WAAW,iBAAiB,CAAC,CAAC,CAAC,CAAC,GACtC,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS;CAjBlE,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './observePosts';
2
2
  export * from './observePost';
3
+ export * from './livePosts';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/post/observers/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/post/observers/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * ```js
3
+ * import { livePosts } from '@amityco/ts-sdk'
4
+ *
5
+ * let posts = []
6
+ * const unsub = livePosts({
7
+ * targetType: Amity.PostTargetType,
8
+ * targetId: Amity.Post['targetId'],
9
+ * }, response => merge(posts, response.data))
10
+ * ```
11
+ *
12
+ * Observe all mutations on a list of {@link Amity.Post} for a given target object
13
+ *
14
+ * @param targetType the type of the target
15
+ * @param targetId the ID of the target
16
+ * @param callback the function to call when new data are available
17
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
18
+ *
19
+ * @category Posts Live Collection
20
+ */
21
+ export declare const livePosts: (params: Amity.PostLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Post>, config?: Amity.LiveCollectionConfig) => Amity.Unsubscriber;
22
+ //# sourceMappingURL=livePosts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"livePosts.d.ts","sourceRoot":"","sources":["../../../src/post/observers/livePosts.ts"],"names":[],"mappings":"AA+BA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,SAAS,WACZ,MAAM,kBAAkB,YACtB,MAAM,sBAAsB,CAAC,MAAM,IAAI,CAAC,WACzC,MAAM,oBAAoB,KAClC,MAAM,YAkHR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"observePosts.d.ts","sourceRoot":"","sources":["../../../src/post/observers/observePosts.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,WACf;IACN,UAAU,EAAE,MAAM,cAAc,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;CAClC,YACS,MAAM,cAAc,CAC5B,MAAM,IAAI,EACV;IACE,UAAU;IACV,UAAU;IACV,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,mBAAmB;CACpB,CACF,KACA,MAAM,YA6CR,CAAC"}
1
+ {"version":3,"file":"observePosts.d.ts","sourceRoot":"","sources":["../../../src/post/observers/observePosts.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,WACf;IACN,UAAU,EAAE,MAAM,cAAc,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;CAClC,YACS,MAAM,cAAc,CAC5B,MAAM,IAAI,EACV;IACE,UAAU;IACV,UAAU;IACV,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,mBAAmB;CACpB,CACF,KACA,MAAM,YAiCR,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getPost.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPost.test.d.ts","sourceRoot":"","sources":["../../../../src/post/tests/api/getPost.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queryPosts.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryPosts.test.d.ts","sourceRoot":"","sources":["../../../../src/post/tests/api/queryPosts.test.ts"],"names":[],"mappings":""}
@@ -19,6 +19,6 @@ export declare const queryReactions: (query: {
19
19
  referenceId: Amity.Reaction['referenceId'];
20
20
  referenceType: Amity.Reaction['referenceType'];
21
21
  reactionName?: Amity.Reaction['reactionName'];
22
- page?: Amity.Page;
23
- }) => Promise<Amity.Paged<Amity.ReactionQuery, Amity.Page>>;
22
+ page?: Amity.Page<string>;
23
+ }) => Promise<Amity.Paged<Amity.ReactionQuery, Amity.Page<string>>>;
24
24
  //# sourceMappingURL=queryReactions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryReactions.d.ts","sourceRoot":"","sources":["../../../src/reaction/api/queryReactions.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;KAgBK;AACL,eAAO,MAAM,cAAc,UAAiB;IAC1C,WAAW,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;CACnB,KAAG,QAAQ,MAAM,KAAK,CAAC,MAAM,aAAa,EAAE,MAAM,IAAI,CAAC,CAyBvD,CAAC"}
1
+ {"version":3,"file":"queryReactions.d.ts","sourceRoot":"","sources":["../../../src/reaction/api/queryReactions.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;KAgBK;AACL,eAAO,MAAM,cAAc,UAAiB;IAC1C,WAAW,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;CAC3B,KAAG,QAAQ,MAAM,KAAK,CAAC,MAAM,aAAa,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAyB/D,CAAC"}
@@ -15,10 +15,10 @@
15
15
  */
16
16
  export declare const queryRoles: {
17
17
  (query?: {
18
- displayName?: string | undefined;
19
- sortBy?: "displayName" | "firstCreated" | "lastCreated" | undefined;
20
- page?: Amity.Page | undefined;
21
- } | undefined): Promise<Amity.Cached<Amity.Paged<Amity.Role>>>;
18
+ displayName?: Amity.Role['displayName'];
19
+ sortBy?: 'displayName' | 'firstCreated' | 'lastCreated';
20
+ page?: Amity.Page;
21
+ }): Promise<Amity.Cached<Amity.Paged<Amity.Role>>>;
22
22
  /**
23
23
  * ```js
24
24
  * import { queryRoles } from '@amityco/ts-sdk'
@@ -1 +1 @@
1
- {"version":3,"file":"queryRoles.d.ts","sourceRoot":"","sources":["../../../src/role/api/queryRoles.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU;;;;;oBAInB,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IA8BlD;;;;;;;;;;;;;OAaG;mBAC0B,WAAW,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAhB5D,CAAC"}
1
+ {"version":3,"file":"queryRoles.d.ts","sourceRoot":"","sources":["../../../src/role/api/queryRoles.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU;aAAkB;QACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,aAAa,CAAC;QACxD,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;KACnB,GAAG,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IA8BlD;;;;;;;;;;;;;OAaG;mBAC0B,WAAW,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAhB5D,CAAC"}
@@ -14,13 +14,13 @@
14
14
  */
15
15
  export declare const queryStreams: {
16
16
  (query?: {
17
- isLive?: boolean | undefined;
18
- statuses?: Amity.StreamStatus[] | undefined;
19
- userPublicIds?: string[] | undefined;
20
- sortBy?: "lastCreated" | "firstCreated" | undefined;
17
+ isLive?: boolean;
18
+ statuses?: Amity.StreamStatus[];
19
+ userPublicIds?: Amity.User['userId'][];
20
+ sortBy?: 'lastCreated' | 'firstCreated';
21
21
  isDeleted?: Amity.Stream['isDeleted'];
22
- page?: Amity.Page | undefined;
23
- } | undefined): Promise<Amity.Cached<Amity.Paged<Amity.Stream>>>;
22
+ page?: Amity.Page;
23
+ }): Promise<Amity.Cached<Amity.Paged<Amity.Stream>>>;
24
24
  /**
25
25
  * ```js
26
26
  * import { queryStreams } from '@amityco/ts-sdk'
@@ -1 +1 @@
1
- {"version":3,"file":"queryStreams.d.ts","sourceRoot":"","sources":["../../../src/stream/api/queryStreams.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY;;;;;;oBAKX,MAAM,MAAM,CAAC,WAAW,CAAC;;oBAEnC,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;IAgCpD;;;;;;;;;;;;OAYG;mBAC4B,WAAW,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAfhE,CAAC"}
1
+ {"version":3,"file":"queryStreams.d.ts","sourceRoot":"","sources":["../../../src/stream/api/queryStreams.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY;aAAkB;QACzC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;QAChC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;QACxC,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;KACnB,GAAG,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;IAgCpD;;;;;;;;;;;;OAYG;mBAC4B,WAAW,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAfhE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const COLLECTION_DEFAULT_PAGINATION_LIMIT = 5;
2
+ export declare const COLLECTION_DEFAULT_CACHING_POLICY: Amity.QueryPolicy;
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,IAAI,CAAC;AACrD,eAAO,MAAM,iCAAiC,EAAE,KAAK,CAAC,WAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const client: Amity.Client;
2
+ export default client;
3
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/client.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,MAAM,cAA4B,CAAC;AAEzC,eAAe,MAAM,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const userPosts: {
2
+ targetId: string;
3
+ targetType: Amity.PostTargetType;
4
+ page1: string[];
5
+ page2: string[];
6
+ page3: string[];
7
+ };
8
+ //# sourceMappingURL=dummy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/dummy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { userPosts } from './dummy';
2
+ export { default as client } from './client';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC"}
package/jest.config.ts ADDED
@@ -0,0 +1,15 @@
1
+ export default {
2
+ clearMocks: true,
3
+ collectCoverageFrom: ['**/*.ts', '!**/*.test.ts'],
4
+ coverageDirectory: '../coverage',
5
+ coveragePathIgnorePatterns: ['/node_modules/', '/dist/', '/@types/'],
6
+ coverageReporters: ['lcov', 'text', 'text-summary'],
7
+ globals: {
8
+ 'ts-jest': {
9
+ useESM: true,
10
+ },
11
+ },
12
+ moduleNameMapper: { '~/(.*)$': '<rootDir>/$1' },
13
+ preset: 'ts-jest/presets/default-esm',
14
+ rootDir: 'src',
15
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amityco/ts-sdk",
3
- "version": "0.0.1-beta.25",
3
+ "version": "0.0.1-beta.26",
4
4
  "license": "CC-BY-ND-4.0",
5
5
  "author": "amity.co <developers@amity.co> (https://amity.co)",
6
6
  "description": "Amity Social Cloud Typescript SDK",
@@ -28,34 +28,39 @@
28
28
  "prebuild": "yarn run clean",
29
29
  "build": "rollup -c ./rollup.config.js",
30
30
  "prewatch": "yarn run clean",
31
- "watch": "rollup -w -c ./rollup.config.js"
31
+ "watch": "rollup -w -c ./rollup.config.js",
32
+ "test": "jest",
33
+ "test:coverage": "jest --coverage --silent"
32
34
  },
33
35
  "devDependencies": {
34
- "@rollup/plugin-commonjs": "^21.0.3",
35
- "@rollup/plugin-node-resolve": "^13.0.4",
36
+ "@rollup/plugin-commonjs": "^22.0.2",
37
+ "@rollup/plugin-node-resolve": "^13.3.0",
36
38
  "@rollup/plugin-replace": "^4.0.0",
37
39
  "@types/axios": "^0.14.0",
38
- "@types/debug": "^4.1.5",
39
- "@types/node": "^17.0.23",
40
+ "@types/debug": "^4.1.7",
41
+ "@types/jest": "^27.5.1",
42
+ "@types/node": "^18.6.4",
40
43
  "@types/socket.io-client": "^1.4.34",
41
44
  "chalk": "^4.1.2",
42
45
  "concurrently": "^6.1.0",
46
+ "jest": "^28.1.0",
43
47
  "rimraf": "^3.0.2",
44
- "rollup": "^2.56.3",
48
+ "rollup": "^2.77.2",
45
49
  "rollup-plugin-terser": "^7.0.2",
46
- "rollup-plugin-typescript2": "^0.31.2",
47
- "tslib": "^2.1.0",
48
- "typescript": "^4.6.3"
50
+ "rollup-plugin-typescript2": "^0.32.1",
51
+ "tslib": "^2.4.0",
52
+ "typescript": "^4.7.4"
49
53
  },
50
54
  "dependencies": {
51
- "@react-native-async-storage/async-storage": "^1.15.5",
52
- "agentkeepalive": "^4.1.3",
55
+ "@react-native-async-storage/async-storage": "^1.17.7",
56
+ "agentkeepalive": "^4.2.1",
53
57
  "axios": "0.21.1",
54
- "debug": "^4.3.1",
55
- "js-base64": "^3.6.1",
58
+ "debug": "^4.3.4",
59
+ "js-base64": "^3.7.2",
56
60
  "mitt": "^3.0.0",
57
- "mqtt": "^4.2.8",
61
+ "mqtt": "^4.3.7",
58
62
  "react-native-uuid": "^2.0.1",
59
- "socket.io-client": "2.2.0"
63
+ "socket.io-client": "2.2.0",
64
+ "ts-jest": "^28.0.3"
60
65
  }
61
66
  }
@@ -0,0 +1,28 @@
1
+ export {};
2
+
3
+ declare global {
4
+ namespace Amity {
5
+ type LiveCollection<T extends any> = {
6
+ data: T[];
7
+ onNextPage: () => void;
8
+ hasNextPage: boolean;
9
+ error?: any;
10
+ loading: boolean;
11
+ };
12
+
13
+ type LiveCollectionCallback<T extends any> = Amity.Listener<LiveCollection<T>>;
14
+
15
+ type LiveCollectionConfig = {
16
+ policy?: Exclude<Amity.QueryPolicy, 'no_fetch'>;
17
+ };
18
+
19
+ type LiveCollectionParams<T extends any> = T & {
20
+ limit?: number;
21
+ };
22
+
23
+ type LiveCollectionCache<T extends any, U extends any> = Pick<
24
+ LiveCollection<T>,
25
+ 'data' | 'error' | 'loading'
26
+ > & { params: U };
27
+ }
28
+ }
@@ -18,7 +18,7 @@ declare global {
18
18
  before?: never;
19
19
  };
20
20
 
21
- type Page = PrevPage<number> | NextPage<number>;
21
+ type Page<T extends number | string = number> = PrevPage<T> | NextPage<T>;
22
22
 
23
23
  /*
24
24
  updatedAt is here because if you need sort by updatedAt you
@@ -5,6 +5,16 @@ declare global {
5
5
  type CommentContentType = 'text';
6
6
  type CommentReferenceType = 'content' | 'post';
7
7
 
8
+ type CommentActionType =
9
+ | 'onFetch'
10
+ | 'onCreate'
11
+ | 'onUpdate'
12
+ | 'onDelete'
13
+ | 'onFlagged'
14
+ | 'onUnflagged'
15
+ | 'onReactionAdded'
16
+ | 'onReactionRemoved';
17
+
8
18
  type Comment<T extends CommentContentType = any> = {
9
19
  commentId: string;
10
20
  userId: string;
@@ -23,5 +33,26 @@ declare global {
23
33
  Amity.SoftDelete &
24
34
  Amity.Subscribable &
25
35
  Amity.Mentionable<'user'>;
36
+
37
+ type QueryComments = {
38
+ referenceType: Amity.Comment['referenceType'];
39
+ referenceId: Amity.Comment['referenceId'];
40
+ sortBy?: 'lastCreated' | 'firstCreated' | 'lastUpdated' | 'firstUpdated';
41
+ parentId?: Amity.Comment['commentId'] | null;
42
+ hasFlag?: boolean;
43
+ isDeleted?: Amity.Comment['isDeleted'];
44
+ page?: Amity.Page;
45
+ };
46
+
47
+ type CommentLiveCollection = Amity.LiveCollectionParams<
48
+ Omit<QueryComments, 'sortBy' | 'page'> & {
49
+ sortBy?: 'lastCreated' | 'firstCreated';
50
+ }
51
+ >;
52
+
53
+ type CommentLiveCollectionCache = Amity.LiveCollectionCache<
54
+ Amity.Comment['commentId'],
55
+ Pick<QueryComments, 'page'>
56
+ >;
26
57
  }
27
58
  }
@@ -7,6 +7,18 @@ declare global {
7
7
 
8
8
  type PostContentType = 'text' | 'image' | 'file' | 'video' | 'liveStream' | 'poll';
9
9
 
10
+ type PostActionType =
11
+ | 'onFetch'
12
+ | 'onCreate'
13
+ | 'onUpdate'
14
+ | 'onDelete'
15
+ | 'onApproved'
16
+ | 'onDeclined'
17
+ | 'onFlagged'
18
+ | 'onUnflagged'
19
+ | 'onReactionAdded'
20
+ | 'onReactionRemoved';
21
+
10
22
  type Post<T extends PostContentType = any> = {
11
23
  postId: string;
12
24
  postedUserId: Amity.User['userId']; // API-FIX: it should be "userId"
@@ -29,5 +41,30 @@ declare global {
29
41
  Amity.SoftDelete &
30
42
  Amity.Subscribable &
31
43
  Amity.Mentionable<'user'>;
44
+
45
+ type QueryPosts = {
46
+ targetId: string;
47
+ targetType: Amity.Post['targetType'];
48
+ sortBy?: 'lastCreated' | 'firstCreated' | 'lastUpdated' | 'firstUpdated';
49
+ dataType?: string;
50
+ isDeleted?: Amity.Post['isDeleted'];
51
+ hasFlag?: boolean;
52
+ feedType?: 'reviewing' | 'published';
53
+ tags?: Amity.Taggable['tags'];
54
+ matchingOnlyParentPost?: boolean;
55
+ page?: Amity.PageRaw;
56
+ };
57
+
58
+ // Omit sortBy explained in asc-3398
59
+ type PostLiveCollection = Amity.LiveCollectionParams<
60
+ Omit<QueryPosts, 'sortBy' | 'page'> & {
61
+ sortBy?: 'lastCreated' | 'firstCreated';
62
+ }
63
+ >;
64
+
65
+ type PostLiveCollectionCache = Amity.LiveCollectionCache<
66
+ Amity.Post['postId'],
67
+ Pick<QueryPosts, 'page'>
68
+ >;
32
69
  }
33
70
  }
@@ -8,6 +8,7 @@ import './core/events'; // sdk events definitions
8
8
  import './core/paging'; // createQuery, runQuery
9
9
  import './core/query'; // createQuery, runQuery
10
10
  import './core/cache'; // cache.pull('user', ...)
11
+ import './core/live';
11
12
 
12
13
  // domains
13
14
  import './domains/client'; // client definition
@@ -19,15 +19,9 @@ import { getResolver } from '~/core/model';
19
19
  * @category Comment API
20
20
  * @async
21
21
  */
22
- export const queryComments = async (query: {
23
- referenceType: Amity.Comment['referenceType'];
24
- referenceId: Amity.Comment['referenceId'];
25
- sortBy?: 'lastCreated' | 'firstCreated' | 'lastUpdated' | 'firstUpdated';
26
- parentId?: Amity.Comment['commentId'] | null;
27
- hasFlag?: boolean;
28
- isDeleted?: Amity.Comment['isDeleted'];
29
- page?: Amity.Page;
30
- }): Promise<Amity.Cached<Amity.Paged<Amity.Comment>>> => {
22
+ export const queryComments = async (
23
+ query: Amity.QueryComments,
24
+ ): Promise<Amity.Cached<Amity.Paged<Amity.Comment>>> => {
31
25
  const client = getActiveClient();
32
26
  client.log('comment/queryComments', query);
33
27
 
@@ -1,2 +1,3 @@
1
1
  export * from './observeComments';
2
2
  export * from './observeComment';
3
+ export * from './liveComments';
@@ -0,0 +1,169 @@
1
+ /* eslint-disable no-use-before-define */
2
+ import { getResolver } from '~/core/model';
3
+ import { getActiveClient } from '~/client/api';
4
+ import { pushToCache, pullFromCache } from '~/cache/api';
5
+ import {
6
+ createQuery,
7
+ runQuery,
8
+ queryOptions,
9
+ filterByPropEquality,
10
+ sortByFirstCreated,
11
+ sortByLastCreated,
12
+ } from '~/core/query';
13
+
14
+ import {
15
+ COLLECTION_DEFAULT_CACHING_POLICY,
16
+ COLLECTION_DEFAULT_PAGINATION_LIMIT,
17
+ } from '~/utils/constants';
18
+
19
+ import {
20
+ onCommentCreated,
21
+ onCommentUpdated,
22
+ onCommentDeleted,
23
+ onCommentFlagged,
24
+ onCommentUnflagged,
25
+ onCommentReactionAdded,
26
+ onCommentReactionRemoved,
27
+ } from '../events';
28
+ import { queryComments } from '../api';
29
+
30
+ /**
31
+ * ```js
32
+ * import { liveComments } from '@amityco/ts-sdk'
33
+ *
34
+ * let comments = []
35
+ * const unsub = liveComments({
36
+ * referenceType: Amity.Comment['referenceType'];
37
+ * referenceId: Amity.Comment['referenceId'];
38
+ * }, response => merge(comments, response.data))
39
+ * ```
40
+ *
41
+ * Observe all mutations on a list of {@link Amity.Comment} for a given target object
42
+ *
43
+ * @param referenceType the type of the target
44
+ * @param referenceId the ID of the target
45
+ * @param callback the function to call when new data are available
46
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
47
+ *
48
+ * @category Comments Live Collection
49
+ */
50
+ export const liveComments = (
51
+ params: Amity.CommentLiveCollection,
52
+ callback: Amity.LiveCollectionCallback<Amity.Comment>,
53
+ config?: Amity.LiveCollectionConfig,
54
+ ): Amity.Unsubscriber => {
55
+ const { log, cache } = getActiveClient();
56
+
57
+ if (!cache) {
58
+ console.log('For using Live Collection feature you need to enable Cache!');
59
+ }
60
+
61
+ const timestamp = Date.now();
62
+ log(`liveComments(tmpid: ${timestamp}) > listen`);
63
+
64
+ const { limit: queryLimit, ...queryParams } = params;
65
+
66
+ const limit = queryLimit ?? COLLECTION_DEFAULT_PAGINATION_LIMIT;
67
+ const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config ?? {};
68
+
69
+ const disposers: Amity.Unsubscriber[] = [];
70
+ const cacheKey = [
71
+ 'comment',
72
+ 'collection',
73
+ { referenceId: params.referenceType, referenceType: params.referenceId },
74
+ ];
75
+
76
+ const responder = (data: Amity.CommentLiveCollectionCache) => {
77
+ let comments: Amity.Comment[] =
78
+ data.data
79
+ .map(commentId => pullFromCache<Amity.Comment>(['comment', 'get', commentId])!)
80
+ .filter(Boolean)
81
+ .map(({ data }) => data) ?? [];
82
+
83
+ comments = filterByPropEquality(comments, 'isDeleted', params.isDeleted);
84
+
85
+ const sortBy = params.sortBy ? params.sortBy : 'lastCreated';
86
+
87
+ comments = comments.sort(sortBy === 'lastCreated' ? sortByLastCreated : sortByFirstCreated);
88
+
89
+ callback({
90
+ onNextPage: onFetch,
91
+ data: comments,
92
+ hasNextPage: !!data.params?.page,
93
+ loading: data.loading,
94
+ error: data.error,
95
+ });
96
+ };
97
+
98
+ const realtimeRouter = (comment: Amity.Comment, action: Amity.CommentActionType) => {
99
+ const collection = pullFromCache<Amity.CommentLiveCollectionCache>(cacheKey)?.data;
100
+
101
+ if (
102
+ params.referenceId !== comment.referenceId ||
103
+ params.referenceType !== comment.referenceType ||
104
+ !collection
105
+ )
106
+ return;
107
+
108
+ if (action === 'onCreate') {
109
+ collection.data = [...new Set([comment.commentId, ...collection.data])];
110
+ } else if (action === 'onDelete') {
111
+ collection.data = collection.data.filter(p => p !== comment.commentId);
112
+ }
113
+
114
+ pushToCache(cacheKey, collection);
115
+
116
+ responder(collection);
117
+ };
118
+
119
+ const onFetch = () => {
120
+ const collection = pullFromCache<Amity.CommentLiveCollectionCache>(cacheKey)?.data;
121
+
122
+ const comments = collection?.data ?? [];
123
+
124
+ if (comments.length > 0 && !collection?.params?.page) return;
125
+
126
+ const query = createQuery(queryComments, {
127
+ ...queryParams,
128
+ page: collection?.params?.page ?? { limit },
129
+ });
130
+
131
+ runQuery(
132
+ query,
133
+ ({ data: result, error, loading, prevPage: page }) => {
134
+ const data = {
135
+ loading,
136
+ error,
137
+ params: { page },
138
+ data: comments,
139
+ };
140
+
141
+ if (result) {
142
+ data.data = [...new Set([...comments, ...result.map(getResolver('comment'))])];
143
+ }
144
+
145
+ pushToCache(cacheKey, data);
146
+
147
+ responder(data);
148
+ },
149
+ queryOptions(policy),
150
+ );
151
+ };
152
+
153
+ disposers.push(
154
+ onCommentCreated(comment => realtimeRouter(comment, 'onCreate')),
155
+ onCommentUpdated(comment => realtimeRouter(comment, 'onUpdate')),
156
+ onCommentDeleted(comment => realtimeRouter(comment, 'onDelete')),
157
+ onCommentFlagged(comment => realtimeRouter(comment, 'onFlagged')),
158
+ onCommentUnflagged(comment => realtimeRouter(comment, 'onUnflagged')),
159
+ onCommentReactionAdded(comment => realtimeRouter(comment, 'onReactionAdded')),
160
+ onCommentReactionRemoved(comment => realtimeRouter(comment, 'onReactionRemoved')),
161
+ );
162
+
163
+ onFetch();
164
+
165
+ return () => {
166
+ log(`liveComments(tmpid: ${timestamp}) > dispose`);
167
+ disposers.forEach(fn => fn());
168
+ };
169
+ };
@@ -48,17 +48,7 @@ export const observeComments = (
48
48
 
49
49
  const disposers: Amity.Unsubscriber[] = [];
50
50
 
51
- const router = (
52
- comment: Amity.Comment,
53
- action:
54
- | 'onCreate'
55
- | 'onUpdate'
56
- | 'onDelete'
57
- | 'onFlagged'
58
- | 'onUnflagged'
59
- | 'onReactionAdded'
60
- | 'onReactionRemoved',
61
- ) => {
51
+ const router = (comment: Amity.Comment, action: Exclude<Amity.CommentActionType, 'onFetch'>) => {
62
52
  if (comment.referenceId !== postId) return;
63
53
 
64
54
  if (callback instanceof Function) return callback(comment);