@clioplaylists/clio 0.1.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 (170) hide show
  1. package/dist/.env +7 -0
  2. package/dist/api/com/clioplaylists/alpha/actor/getProfile.js +37 -0
  3. package/dist/api/com/clioplaylists/alpha/feed/getSongs.js +37 -0
  4. package/dist/api/health.js +32 -0
  5. package/dist/api/index.js +43 -0
  6. package/dist/api/util.js +17 -0
  7. package/dist/auth-verifier.js +473 -0
  8. package/dist/client.js +40 -0
  9. package/dist/config.js +65 -0
  10. package/dist/context.js +19 -0
  11. package/dist/dataplane/bsync/index.js +150 -0
  12. package/dist/dataplane/client.js +165 -0
  13. package/dist/dataplane/index.js +18 -0
  14. package/dist/dataplane/server/background.js +51 -0
  15. package/dist/dataplane/server/db/database-schema.js +2 -0
  16. package/dist/dataplane/server/db/db.js +228 -0
  17. package/dist/dataplane/server/db/index.js +17 -0
  18. package/dist/dataplane/server/db/migrations/20230309T045948368Z-init.js +117 -0
  19. package/dist/dataplane/server/db/migrations/20230420T211446071Z-did-cache.js +15 -0
  20. package/dist/dataplane/server/db/migrations/index.js +41 -0
  21. package/dist/dataplane/server/db/migrations/provider.js +31 -0
  22. package/dist/dataplane/server/db/pagination.js +144 -0
  23. package/dist/dataplane/server/db/tables/actor-sync.js +4 -0
  24. package/dist/dataplane/server/db/tables/actor.js +4 -0
  25. package/dist/dataplane/server/db/tables/artist-list-item.js +4 -0
  26. package/dist/dataplane/server/db/tables/artist.js +4 -0
  27. package/dist/dataplane/server/db/tables/playlist-idea.js +4 -0
  28. package/dist/dataplane/server/db/tables/playlist-item.js +4 -0
  29. package/dist/dataplane/server/db/tables/playlist.js +4 -0
  30. package/dist/dataplane/server/db/tables/profile.js +4 -0
  31. package/dist/dataplane/server/db/tables/record.js +4 -0
  32. package/dist/dataplane/server/db/tables/song.js +4 -0
  33. package/dist/dataplane/server/db/types.js +2 -0
  34. package/dist/dataplane/server/db/util.js +48 -0
  35. package/dist/dataplane/server/index.js +52 -0
  36. package/dist/dataplane/server/indexing/index.js +321 -0
  37. package/dist/dataplane/server/indexing/plugins/playlist-idea.js +163 -0
  38. package/dist/dataplane/server/indexing/plugins/profile.js +81 -0
  39. package/dist/dataplane/server/indexing/processor.js +90 -0
  40. package/dist/dataplane/server/routes/blocks.js +95 -0
  41. package/dist/dataplane/server/routes/feed-gens.js +56 -0
  42. package/dist/dataplane/server/routes/feeds.js +128 -0
  43. package/dist/dataplane/server/routes/follows.js +122 -0
  44. package/dist/dataplane/server/routes/identity.js +56 -0
  45. package/dist/dataplane/server/routes/index.js +19 -0
  46. package/dist/dataplane/server/routes/interactions.js +111 -0
  47. package/dist/dataplane/server/routes/labels.js +73 -0
  48. package/dist/dataplane/server/routes/likes.js +76 -0
  49. package/dist/dataplane/server/routes/lists.js +77 -0
  50. package/dist/dataplane/server/routes/moderation.js +92 -0
  51. package/dist/dataplane/server/routes/mutes.js +166 -0
  52. package/dist/dataplane/server/routes/notifs.js +137 -0
  53. package/dist/dataplane/server/routes/posts.js +19 -0
  54. package/dist/dataplane/server/routes/profile.js +61 -0
  55. package/dist/dataplane/server/routes/quotes.js +26 -0
  56. package/dist/dataplane/server/routes/records.js +88 -0
  57. package/dist/dataplane/server/routes/relationships.js +157 -0
  58. package/dist/dataplane/server/routes/reposts.js +59 -0
  59. package/dist/dataplane/server/routes/search.js +70 -0
  60. package/dist/dataplane/server/routes/starter-packs.js +24 -0
  61. package/dist/dataplane/server/routes/suggestions.js +134 -0
  62. package/dist/dataplane/server/routes/sync.js +14 -0
  63. package/dist/dataplane/server/routes/threads.js +31 -0
  64. package/dist/dataplane/server/subscription.js +114 -0
  65. package/dist/dataplane/server/util.js +117 -0
  66. package/dist/error.js +14 -0
  67. package/dist/index.js +115 -0
  68. package/dist/lexicons/index.js +638 -0
  69. package/dist/lexicons/lexicons.js +4551 -0
  70. package/dist/lexicons/types/com/atproto/admin/defs.js +54 -0
  71. package/dist/lexicons/types/com/atproto/admin/deleteAccount.js +2 -0
  72. package/dist/lexicons/types/com/atproto/admin/disableAccountInvites.js +2 -0
  73. package/dist/lexicons/types/com/atproto/admin/disableInviteCodes.js +2 -0
  74. package/dist/lexicons/types/com/atproto/admin/enableAccountInvites.js +2 -0
  75. package/dist/lexicons/types/com/atproto/admin/getAccountInfo.js +2 -0
  76. package/dist/lexicons/types/com/atproto/admin/getAccountInfos.js +2 -0
  77. package/dist/lexicons/types/com/atproto/admin/getInviteCodes.js +2 -0
  78. package/dist/lexicons/types/com/atproto/admin/getSubjectStatus.js +2 -0
  79. package/dist/lexicons/types/com/atproto/admin/searchAccounts.js +2 -0
  80. package/dist/lexicons/types/com/atproto/admin/sendEmail.js +2 -0
  81. package/dist/lexicons/types/com/atproto/admin/updateAccountEmail.js +2 -0
  82. package/dist/lexicons/types/com/atproto/admin/updateAccountHandle.js +2 -0
  83. package/dist/lexicons/types/com/atproto/admin/updateAccountPassword.js +2 -0
  84. package/dist/lexicons/types/com/atproto/admin/updateSubjectStatus.js +2 -0
  85. package/dist/lexicons/types/com/atproto/identity/defs.js +14 -0
  86. package/dist/lexicons/types/com/atproto/identity/getRecommendedDidCredentials.js +2 -0
  87. package/dist/lexicons/types/com/atproto/identity/refreshIdentity.js +2 -0
  88. package/dist/lexicons/types/com/atproto/identity/requestPlcOperationSignature.js +2 -0
  89. package/dist/lexicons/types/com/atproto/identity/resolveDid.js +2 -0
  90. package/dist/lexicons/types/com/atproto/identity/resolveHandle.js +2 -0
  91. package/dist/lexicons/types/com/atproto/identity/resolveIdentity.js +2 -0
  92. package/dist/lexicons/types/com/atproto/identity/signPlcOperation.js +2 -0
  93. package/dist/lexicons/types/com/atproto/identity/submitPlcOperation.js +2 -0
  94. package/dist/lexicons/types/com/atproto/identity/updateHandle.js +2 -0
  95. package/dist/lexicons/types/com/atproto/label/defs.js +54 -0
  96. package/dist/lexicons/types/com/atproto/label/queryLabels.js +2 -0
  97. package/dist/lexicons/types/com/atproto/label/subscribeLabels.js +24 -0
  98. package/dist/lexicons/types/com/atproto/lexicon/schema.js +15 -0
  99. package/dist/lexicons/types/com/atproto/moderation/createReport.js +2 -0
  100. package/dist/lexicons/types/com/atproto/moderation/defs.js +20 -0
  101. package/dist/lexicons/types/com/atproto/repo/applyWrites.js +64 -0
  102. package/dist/lexicons/types/com/atproto/repo/createRecord.js +2 -0
  103. package/dist/lexicons/types/com/atproto/repo/defs.js +14 -0
  104. package/dist/lexicons/types/com/atproto/repo/deleteRecord.js +2 -0
  105. package/dist/lexicons/types/com/atproto/repo/describeRepo.js +2 -0
  106. package/dist/lexicons/types/com/atproto/repo/getRecord.js +2 -0
  107. package/dist/lexicons/types/com/atproto/repo/importRepo.js +2 -0
  108. package/dist/lexicons/types/com/atproto/repo/listMissingBlobs.js +14 -0
  109. package/dist/lexicons/types/com/atproto/repo/listRecords.js +14 -0
  110. package/dist/lexicons/types/com/atproto/repo/putRecord.js +2 -0
  111. package/dist/lexicons/types/com/atproto/repo/strongRef.js +15 -0
  112. package/dist/lexicons/types/com/atproto/repo/uploadBlob.js +2 -0
  113. package/dist/lexicons/types/com/atproto/server/activateAccount.js +2 -0
  114. package/dist/lexicons/types/com/atproto/server/checkAccountStatus.js +2 -0
  115. package/dist/lexicons/types/com/atproto/server/confirmEmail.js +2 -0
  116. package/dist/lexicons/types/com/atproto/server/createAccount.js +2 -0
  117. package/dist/lexicons/types/com/atproto/server/createAppPassword.js +14 -0
  118. package/dist/lexicons/types/com/atproto/server/createInviteCode.js +2 -0
  119. package/dist/lexicons/types/com/atproto/server/createInviteCodes.js +14 -0
  120. package/dist/lexicons/types/com/atproto/server/createSession.js +2 -0
  121. package/dist/lexicons/types/com/atproto/server/deactivateAccount.js +2 -0
  122. package/dist/lexicons/types/com/atproto/server/defs.js +24 -0
  123. package/dist/lexicons/types/com/atproto/server/deleteAccount.js +2 -0
  124. package/dist/lexicons/types/com/atproto/server/deleteSession.js +2 -0
  125. package/dist/lexicons/types/com/atproto/server/describeServer.js +24 -0
  126. package/dist/lexicons/types/com/atproto/server/getAccountInviteCodes.js +2 -0
  127. package/dist/lexicons/types/com/atproto/server/getServiceAuth.js +2 -0
  128. package/dist/lexicons/types/com/atproto/server/getSession.js +2 -0
  129. package/dist/lexicons/types/com/atproto/server/listAppPasswords.js +14 -0
  130. package/dist/lexicons/types/com/atproto/server/refreshSession.js +2 -0
  131. package/dist/lexicons/types/com/atproto/server/requestAccountDelete.js +2 -0
  132. package/dist/lexicons/types/com/atproto/server/requestEmailConfirmation.js +2 -0
  133. package/dist/lexicons/types/com/atproto/server/requestEmailUpdate.js +2 -0
  134. package/dist/lexicons/types/com/atproto/server/requestPasswordReset.js +2 -0
  135. package/dist/lexicons/types/com/atproto/server/reserveSigningKey.js +2 -0
  136. package/dist/lexicons/types/com/atproto/server/resetPassword.js +2 -0
  137. package/dist/lexicons/types/com/atproto/server/revokeAppPassword.js +2 -0
  138. package/dist/lexicons/types/com/atproto/server/updateEmail.js +2 -0
  139. package/dist/lexicons/types/com/atproto/sync/getBlob.js +2 -0
  140. package/dist/lexicons/types/com/atproto/sync/getBlocks.js +2 -0
  141. package/dist/lexicons/types/com/atproto/sync/getCheckout.js +2 -0
  142. package/dist/lexicons/types/com/atproto/sync/getHead.js +2 -0
  143. package/dist/lexicons/types/com/atproto/sync/getLatestCommit.js +2 -0
  144. package/dist/lexicons/types/com/atproto/sync/getRecord.js +2 -0
  145. package/dist/lexicons/types/com/atproto/sync/getRepo.js +2 -0
  146. package/dist/lexicons/types/com/atproto/sync/getRepoStatus.js +2 -0
  147. package/dist/lexicons/types/com/atproto/sync/listBlobs.js +2 -0
  148. package/dist/lexicons/types/com/atproto/sync/listRepos.js +14 -0
  149. package/dist/lexicons/types/com/atproto/sync/listReposByCollection.js +14 -0
  150. package/dist/lexicons/types/com/atproto/sync/notifyOfUpdate.js +2 -0
  151. package/dist/lexicons/types/com/atproto/sync/requestCrawl.js +2 -0
  152. package/dist/lexicons/types/com/atproto/sync/subscribeRepos.js +64 -0
  153. package/dist/lexicons/types/com/atproto/temp/addReservedHandle.js +2 -0
  154. package/dist/lexicons/types/com/atproto/temp/checkSignupQueue.js +2 -0
  155. package/dist/lexicons/types/com/atproto/temp/fetchLabels.js +2 -0
  156. package/dist/lexicons/types/com/atproto/temp/requestPhoneVerification.js +2 -0
  157. package/dist/lexicons/types/com/clioplaylists/alpha/actor/profile.js +15 -0
  158. package/dist/lexicons/types/com/clioplaylists/alpha/feed/defs.js +24 -0
  159. package/dist/lexicons/types/com/clioplaylists/alpha/feed/getSongs.js +2 -0
  160. package/dist/lexicons/types/com/clioplaylists/alpha/feed/playlistIdea.js +35 -0
  161. package/dist/lexicons/types/com/clioplaylists/alpha/feed/song.js +25 -0
  162. package/dist/lexicons/util.js +13 -0
  163. package/dist/logger.js +26 -0
  164. package/dist/rpc/clio_connect.js +110 -0
  165. package/dist/rpc/clio_pb.js +1365 -0
  166. package/dist/start.js +13 -0
  167. package/dist/util/retry.js +16 -0
  168. package/dist/util/uris.js +7 -0
  169. package/dist/util.js +119 -0
  170. package/package.json +73 -0
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RepoSubscription = void 0;
4
+ const repo_1 = require("@atproto/repo");
5
+ const sync_1 = require("@atproto/sync");
6
+ const logger_1 = require("../../logger");
7
+ const background_1 = require("./background");
8
+ const indexing_1 = require("./indexing");
9
+ class RepoSubscription {
10
+ constructor(opts) {
11
+ Object.defineProperty(this, "opts", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: opts
16
+ });
17
+ Object.defineProperty(this, "firehose", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: void 0
22
+ });
23
+ Object.defineProperty(this, "runner", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: void 0
28
+ });
29
+ Object.defineProperty(this, "background", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: void 0
34
+ });
35
+ Object.defineProperty(this, "indexingSvc", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: void 0
40
+ });
41
+ const { service, db, idResolver } = opts;
42
+ this.background = new background_1.BackgroundQueue(db);
43
+ this.indexingSvc = new indexing_1.IndexingService(db, idResolver);
44
+ const { runner, firehose } = createFirehose({
45
+ idResolver,
46
+ service,
47
+ indexingSvc: this.indexingSvc,
48
+ });
49
+ this.runner = runner;
50
+ this.firehose = firehose;
51
+ }
52
+ start() {
53
+ this.firehose.start();
54
+ }
55
+ async restart() {
56
+ await this.destroy();
57
+ const { runner, firehose } = createFirehose({
58
+ idResolver: this.opts.idResolver,
59
+ service: this.opts.service,
60
+ indexingSvc: this.indexingSvc,
61
+ });
62
+ this.runner = runner;
63
+ this.firehose = firehose;
64
+ this.start();
65
+ }
66
+ async processAll() {
67
+ await this.runner.processAll();
68
+ await this.background.processAll();
69
+ }
70
+ async destroy() {
71
+ await this.firehose.destroy();
72
+ await this.runner.destroy();
73
+ await this.background.processAll();
74
+ }
75
+ }
76
+ exports.RepoSubscription = RepoSubscription;
77
+ const createFirehose = (opts) => {
78
+ const { idResolver, service, indexingSvc } = opts;
79
+ const runner = new sync_1.MemoryRunner({ startCursor: 0 });
80
+ const firehose = new sync_1.Firehose({
81
+ idResolver,
82
+ runner,
83
+ service,
84
+ unauthenticatedHandles: true, // indexing service handles these
85
+ unauthenticatedCommits: true, // @TODO there seems to be a very rare issue where the authenticator thinks a block is missing in deletion ops
86
+ onError: (err) => logger_1.subLogger.error({ err }, 'error in subscription'),
87
+ handleEvent: async (evt) => {
88
+ if (evt.event === 'identity') {
89
+ await indexingSvc.indexHandle(evt.did, evt.time, true);
90
+ }
91
+ else if (evt.event === 'account') {
92
+ if (evt.active === false && evt.status === 'deleted') {
93
+ await indexingSvc.deleteActor(evt.did);
94
+ }
95
+ else {
96
+ await indexingSvc.updateActorStatus(evt.did, evt.active, evt.status);
97
+ }
98
+ }
99
+ else {
100
+ const indexFn = evt.event === 'delete'
101
+ ? indexingSvc.deleteRecord(evt.uri)
102
+ : indexingSvc.indexRecord(evt.uri, evt.cid, evt.record, evt.event === 'create'
103
+ ? repo_1.WriteOpAction.Create
104
+ : repo_1.WriteOpAction.Update, evt.time);
105
+ await Promise.all([
106
+ indexFn,
107
+ indexingSvc.setCommitLastSeen(evt.did, evt.commit, evt.rev),
108
+ indexingSvc.indexHandle(evt.did, evt.time),
109
+ ]);
110
+ }
111
+ },
112
+ });
113
+ return { firehose, runner };
114
+ };
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.violatesThreadGate = exports.invalidReplyRoot = exports.getAncestorsAndSelfQb = exports.getDescendentsQb = void 0;
4
+ const kysely_1 = require("kysely");
5
+ const util_1 = require("../../views/util");
6
+ const util_2 = require("./db/util");
7
+ const getDescendentsQb = (db, opts) => {
8
+ const { uri, depth } = opts;
9
+ const query = db.withRecursive('descendent(uri, depth)', (cte) => {
10
+ return cte
11
+ .selectFrom('post')
12
+ .select(['post.uri as uri', (0, kysely_1.sql) `1`.as('depth')])
13
+ .where((0, kysely_1.sql) `1`, '<=', depth)
14
+ .where('replyParent', '=', uri)
15
+ .unionAll(cte
16
+ .selectFrom('post')
17
+ .innerJoin('descendent', 'descendent.uri', 'post.replyParent')
18
+ .where('descendent.depth', '<', depth)
19
+ .select([
20
+ 'post.uri as uri',
21
+ (0, kysely_1.sql) `descendent.depth + 1`.as('depth'),
22
+ ]));
23
+ });
24
+ return query;
25
+ };
26
+ exports.getDescendentsQb = getDescendentsQb;
27
+ const getAncestorsAndSelfQb = (db, opts) => {
28
+ const { uri, parentHeight } = opts;
29
+ const query = db.withRecursive('ancestor(uri, ancestorUri, height)', (cte) => {
30
+ return cte
31
+ .selectFrom('post')
32
+ .select([
33
+ 'post.uri as uri',
34
+ 'post.replyParent as ancestorUri',
35
+ (0, kysely_1.sql) `0`.as('height'),
36
+ ])
37
+ .where('uri', '=', uri)
38
+ .unionAll(cte
39
+ .selectFrom('post')
40
+ .innerJoin('ancestor', 'ancestor.ancestorUri', 'post.uri')
41
+ .where('ancestor.height', '<', parentHeight)
42
+ .select([
43
+ 'post.uri as uri',
44
+ 'post.replyParent as ancestorUri',
45
+ (0, kysely_1.sql) `ancestor.height + 1`.as('height'),
46
+ ]));
47
+ });
48
+ return query;
49
+ };
50
+ exports.getAncestorsAndSelfQb = getAncestorsAndSelfQb;
51
+ const invalidReplyRoot = (reply, parent) => {
52
+ const replyRoot = reply.root.uri;
53
+ const replyParent = reply.parent.uri;
54
+ // if parent is not a valid reply, transitively this is not a valid one either
55
+ if (parent.invalidReplyRoot) {
56
+ return true;
57
+ }
58
+ // replying to root post: ensure the root looks correct
59
+ if (replyParent === replyRoot) {
60
+ return !!parent.record.reply;
61
+ }
62
+ // replying to a reply: ensure the parent is a reply for the same root post
63
+ return parent.record.reply?.root.uri !== replyRoot;
64
+ };
65
+ exports.invalidReplyRoot = invalidReplyRoot;
66
+ const violatesThreadGate = async (db, replierDid, ownerDid, rootPost, gate) => {
67
+ const { canReply, allowFollower, allowFollowing, allowListUris = [], } = (0, util_1.parseThreadGate)(replierDid, ownerDid, rootPost, gate);
68
+ if (canReply) {
69
+ return false;
70
+ }
71
+ if (!allowFollower && !allowFollowing && !allowListUris?.length) {
72
+ return true;
73
+ }
74
+ const { ref } = db.dynamic;
75
+ const nullResult = (0, kysely_1.sql) `${null}`;
76
+ const check = await db
77
+ .selectFrom((0, util_2.valuesList)([replierDid]).as((0, kysely_1.sql) `subject (did)`))
78
+ .select([
79
+ allowFollower
80
+ ? db
81
+ .selectFrom('follow')
82
+ .where('subjectDid', '=', ownerDid)
83
+ .whereRef('creator', '=', ref('subject.did'))
84
+ .select('subjectDid')
85
+ .as('isFollower')
86
+ : nullResult.as('isFollower'),
87
+ allowFollowing
88
+ ? db
89
+ .selectFrom('follow')
90
+ .where('creator', '=', ownerDid)
91
+ .whereRef('subjectDid', '=', ref('subject.did'))
92
+ .select('creator')
93
+ .as('isFollowed')
94
+ : nullResult.as('isFollowed'),
95
+ allowListUris.length
96
+ ? db
97
+ .selectFrom('list_item')
98
+ .where('list_item.listUri', 'in', allowListUris)
99
+ .whereRef('list_item.subjectDid', '=', ref('subject.did'))
100
+ .limit(1)
101
+ .select('listUri')
102
+ .as('isInList')
103
+ : nullResult.as('isInList'),
104
+ ])
105
+ .executeTakeFirst();
106
+ if (allowFollowing && check?.isFollowed) {
107
+ return false;
108
+ }
109
+ else if (allowFollower && check?.isFollower) {
110
+ return false;
111
+ }
112
+ else if (allowListUris.length && check?.isInList) {
113
+ return false;
114
+ }
115
+ return true;
116
+ };
117
+ exports.violatesThreadGate = violatesThreadGate;
package/dist/error.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handler = void 0;
4
+ const xrpc_server_1 = require("@atproto/xrpc-server");
5
+ const logger_1 = require("./logger");
6
+ const handler = (err, _req, res, next) => {
7
+ logger_1.httpLogger.error(err, 'unexpected internal server error');
8
+ if (res.headersSent) {
9
+ return next(err);
10
+ }
11
+ const serverError = xrpc_server_1.XRPCError.fromError(err);
12
+ res.status(serverError.type).json(serverError.payload);
13
+ };
14
+ exports.handler = handler;
package/dist/index.js ADDED
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ClioAppView = void 0;
40
+ const common_1 = require("@atproto/common");
41
+ const cors_1 = __importDefault(require("cors"));
42
+ const dotenv_1 = require("dotenv");
43
+ const events_1 = __importDefault(require("events"));
44
+ const express_1 = __importDefault(require("express"));
45
+ const http_terminator_1 = require("http-terminator");
46
+ const api_1 = __importStar(require("./api"));
47
+ const client_1 = require("./client");
48
+ const context_1 = __importDefault(require("./context"));
49
+ const error = __importStar(require("./error"));
50
+ const lexicons_1 = require("./lexicons");
51
+ const logger_1 = require("./logger");
52
+ (0, dotenv_1.config)();
53
+ class ClioAppView {
54
+ constructor(opts) {
55
+ Object.defineProperty(this, "ctx", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: void 0
60
+ });
61
+ Object.defineProperty(this, "app", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: void 0
66
+ });
67
+ Object.defineProperty(this, "server", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: void 0
72
+ });
73
+ Object.defineProperty(this, "terminator", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: void 0
78
+ });
79
+ this.ctx = opts.ctx;
80
+ this.app = opts.app;
81
+ }
82
+ static create(opts) {
83
+ const { config } = opts;
84
+ const app = (0, express_1.default)();
85
+ app.use((0, cors_1.default)({ maxAge: common_1.DAY / common_1.SECOND }));
86
+ app.use(logger_1.loggerMiddleware);
87
+ const dataplane = (0, client_1.createBaseClient)('http://localhost:4000', {});
88
+ const server = (0, lexicons_1.createServer)();
89
+ const ctx = new context_1.default({
90
+ cfg: config,
91
+ dataplane,
92
+ });
93
+ const api = (0, api_1.default)(server, ctx);
94
+ app.use(api_1.health.createRouter(ctx));
95
+ app.use(api.xrpc.router);
96
+ app.use(error.handler);
97
+ return new ClioAppView({ ctx, app });
98
+ }
99
+ async start() {
100
+ console.log('Starting Clio AppView...');
101
+ const server = this.app.listen(this.ctx.cfg.port);
102
+ this.server = server;
103
+ server.keepAliveTimeout = 90000;
104
+ this.terminator = (0, http_terminator_1.createHttpTerminator)({ server });
105
+ await events_1.default.once(server, 'listening');
106
+ const { port } = server.address();
107
+ this.ctx.cfg.assignPort(port);
108
+ return server;
109
+ }
110
+ async destroy() {
111
+ await this.terminator?.terminate();
112
+ }
113
+ }
114
+ exports.ClioAppView = ClioAppView;
115
+ exports.default = ClioAppView;