@@ -42,6 +42,16 @@ import { DEV_MODE } from "../../../environment";
4242const log = createPinoLogger ( ) ;
4343// TODO: write tests for all endpoints
4444
45+ const sanitizeCursor = ( cursor ?: string | null ) : string | null => {
46+ if ( ! cursor ) return null ;
47+ try {
48+ const decoded = decodeURIComponent ( cursor ) ;
49+ return decoded . trim ( ) === '' ? null : decoded ;
50+ } catch {
51+ return null ;
52+ }
53+ } ;
54+
4555/* APP WEBHOOK */
4656
4757/**
@@ -260,7 +270,7 @@ const FETCH_PROJECTS_FROM_ORGANIZATION = new Elysia({ prefix: "" })
260270 {
261271 scopeName : GITHUB_ACCOUNT_SCOPES . PROJECTS ,
262272 pageSize : query . pageSize ?? 1 ,
263- continueAfter : query . continueAfter ,
273+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
264274 } ,
265275 ] as PageSize < GITHUB_ACCOUNT_SCOPES > [ ] ) . getQuery ( ) ,
266276 fetchParams . auth ,
@@ -291,7 +301,7 @@ const FETCH_PROJECTS_FROM_USER = new Elysia({ prefix: "" })
291301 {
292302 scopeName : GITHUB_ACCOUNT_SCOPES . PROJECTS ,
293303 pageSize : query . pageSize ?? 1 ,
294- continueAfter : query . continueAfter ,
304+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
295305 } ,
296306 ] as PageSize < GITHUB_ACCOUNT_SCOPES > [ ] ) . getQuery ( ) ,
297307 fetchParams . auth ,
@@ -446,7 +456,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
446456 getProjectIterationIssues (
447457 project_id_or_name ,
448458 query . pageSize ,
449- query . continueAfter ,
459+ sanitizeCursor ( query . continueAfter ) ,
450460 query . iterationFieldName ,
451461 ( query . scopes ?. split ( "," ) ?? [ ] ) as GITHUB_ITERATION_SCOPES [ ]
452462 ) ,
@@ -580,7 +590,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
580590 {
581591 scopeName : "count" ,
582592 pageSize : query . pageSize ?? 1 ,
583- continueAfter : query . continueAfter ,
593+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
584594 } ,
585595 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
586596 ) ,
@@ -623,7 +633,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
623633 {
624634 scopeName : "essential" ,
625635 pageSize : query . pageSize ?? 1 ,
626- continueAfter : query . continueAfter ,
636+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
627637 } ,
628638 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
629639 ) ,
@@ -666,7 +676,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
666676 {
667677 scopeName : "info" ,
668678 pageSize : query . pageSize ?? 1 ,
669- continueAfter : query . continueAfter ,
679+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
670680 } ,
671681 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
672682 ) ,
@@ -709,7 +719,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
709719 {
710720 scopeName : "license" ,
711721 pageSize : query . pageSize ?? 1 ,
712- continueAfter : query . continueAfter ,
722+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
713723 } ,
714724 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
715725 ) ,
@@ -774,13 +784,13 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
774784 {
775785 scopeName : "vulnerabilities" ,
776786 pageSize : query . pageSize ?? 1 ,
777- continueAfter : query . continueAfter ,
787+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
778788 } ,
779789 {
780790 scopeName : "count" ,
781791 pageSize : query . rootPageSize ?? 1 ,
782792 continueAfter :
783- query . rootContinueAfter ,
793+ sanitizeCursor ( query . rootContinueAfter ) ,
784794 } ,
785795 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
786796 ) ,
@@ -823,13 +833,13 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
823833 {
824834 scopeName : "topics" ,
825835 pageSize : query . pageSize ?? 1 ,
826- continueAfter : query . continueAfter ,
836+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
827837 } ,
828838 {
829839 scopeName : "count" ,
830840 pageSize : query . rootPageSize ?? 1 ,
831841 continueAfter :
832- query . rootContinueAfter ,
842+ sanitizeCursor ( query . rootContinueAfter ) ,
833843 } ,
834844 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
835845 ) ,
@@ -872,13 +882,13 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
872882 {
873883 scopeName : "labels" ,
874884 pageSize : query . pageSize ?? 1 ,
875- continueAfter : query . continueAfter ,
885+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
876886 } ,
877887 {
878888 scopeName : "count" ,
879889 pageSize : query . rootPageSize ?? 1 ,
880890 continueAfter :
881- query . rootContinueAfter ,
891+ sanitizeCursor ( query . rootContinueAfter ) ,
882892 } ,
883893 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
884894 ) ,
@@ -921,13 +931,13 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
921931 {
922932 scopeName : "releases" ,
923933 pageSize : query . pageSize ?? 1 ,
924- continueAfter : query . continueAfter ,
934+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
925935 } ,
926936 {
927937 scopeName : "count" ,
928938 pageSize : query . rootPageSize ?? 1 ,
929939 continueAfter :
930- query . rootContinueAfter ,
940+ sanitizeCursor ( query . rootContinueAfter ) ,
931941 } ,
932942 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
933943 ) ,
@@ -970,13 +980,13 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
970980 {
971981 scopeName : "deployments" ,
972982 pageSize : query . pageSize ?? 1 ,
973- continueAfter : query . continueAfter ,
983+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
974984 } ,
975985 {
976986 scopeName : "count" ,
977987 pageSize : query . rootPageSize ?? 1 ,
978988 continueAfter :
979- query . rootContinueAfter ,
989+ sanitizeCursor ( query . rootContinueAfter ) ,
980990 } ,
981991 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
982992 ) ,
@@ -1019,13 +1029,13 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
10191029 {
10201030 scopeName : "languages" ,
10211031 pageSize : query . pageSize ?? 1 ,
1022- continueAfter : query . continueAfter ,
1032+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
10231033 } ,
10241034 {
10251035 scopeName : "count" ,
10261036 pageSize : query . rootPageSize ?? 1 ,
10271037 continueAfter :
1028- query . rootContinueAfter ,
1038+ sanitizeCursor ( query . rootContinueAfter ) ,
10291039 } ,
10301040 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
10311041 ) ,
@@ -1068,12 +1078,12 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
10681078 {
10691079 scopeName : "issues" ,
10701080 pageSize : query . pageSize ?? 1 ,
1071- continueAfter : query . continueAfter ,
1081+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
10721082 } ,
10731083 {
10741084 scopeName : "count" ,
10751085 pageSize : query . rootPageSize ?? 1 ,
1076- continueAfter : query . rootContinueAfter ,
1086+ continueAfter : sanitizeCursor ( query . rootContinueAfter ) ,
10771087 } ,
10781088 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
10791089 null ,
@@ -1133,13 +1143,13 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
11331143 {
11341144 scopeName : "collaborators" ,
11351145 pageSize : query . pageSize ?? 1 ,
1136- continueAfter : query . continueAfter ,
1146+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
11371147 } ,
11381148 {
11391149 scopeName : "count" ,
11401150 pageSize : query . rootPageSize ?? 1 ,
11411151 continueAfter :
1142- query . rootContinueAfter ,
1152+ sanitizeCursor ( query . rootContinueAfter ) ,
11431153 } ,
11441154 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
11451155 ) ,
@@ -1182,12 +1192,12 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
11821192 {
11831193 scopeName : GITHUB_REPOSITORY_SCOPES . CONTRIBUTIONS ,
11841194 pageSize : query . pageSize ?? 1 ,
1185- continueAfter : query . continueAfter ?. replaceAll ( "+" , " " ) , // TODO: make this global (not sure, if only commits can have spaces in page hashes)
1195+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
11861196 } ,
11871197 {
11881198 scopeName : GITHUB_REPOSITORY_SCOPES . COUNT ,
11891199 pageSize : query . rootPageSize ?? 1 ,
1190- continueAfter : query . rootContinueAfter ,
1200+ continueAfter : sanitizeCursor ( query . rootContinueAfter ) ,
11911201 } ,
11921202 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
11931203 ) ,
@@ -1237,12 +1247,12 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
12371247 {
12381248 scopeName : "milestones" ,
12391249 pageSize : query . pageSize ?? 1 ,
1240- continueAfter : query . continueAfter ,
1250+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
12411251 } ,
12421252 {
12431253 scopeName : "count" ,
12441254 pageSize : query . rootPageSize ?? 1 ,
1245- continueAfter : query . rootContinueAfter ,
1255+ continueAfter : sanitizeCursor ( query . rootContinueAfter ) ,
12461256 } ,
12471257 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
12481258 ) ,
@@ -1319,7 +1329,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
13191329 {
13201330 scopeName : "count" ,
13211331 pageSize : query . rootPageSize ?? 1 ,
1322- continueAfter : query . rootContinueAfter ,
1332+ continueAfter : sanitizeCursor ( query . rootContinueAfter ) ,
13231333 } ,
13241334 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
13251335 issues_states ,
@@ -1416,7 +1426,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
14161426 scopeName : "count" ,
14171427 pageSize : query . pageSize ?? 1 ,
14181428 continueAfter :
1419- query . continueAfter ,
1429+ sanitizeCursor ( query . continueAfter ) ,
14201430 } ,
14211431 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
14221432 null ,
@@ -1490,7 +1500,7 @@ const ACCOUNT_LEVEL_CHILDREN = (login_type: "organization" | "user") =>
14901500 pageSize :
14911501 query . rootPageSize ?? 1 ,
14921502 continueAfter :
1493- query . rootContinueAfter ,
1503+ sanitizeCursor ( query . rootContinueAfter ) ,
14941504 } ,
14951505 ] as PageSize < GITHUB_REPOSITORY_SCOPES > [ ] ,
14961506 issues_states ,
@@ -1705,7 +1715,7 @@ export const GITHUB_ORGS = new Elysia({ prefix: "/orgs" }).use(
17051715 {
17061716 scopeName : GITHUB_ACCOUNT_SCOPES . PACKAGES ,
17071717 pageSize : query . pageSize ?? 1 ,
1708- continueAfter : query . continueAfter ,
1718+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
17091719 } ,
17101720 ] as PageSize < GITHUB_ACCOUNT_SCOPES > [ ] ) . getQuery ( ) ,
17111721 fetchParams . auth ,
@@ -1836,7 +1846,7 @@ export const GITHUB_USERS = new Elysia({ prefix: "/users" }).use(
18361846 {
18371847 scopeName : GITHUB_ACCOUNT_SCOPES . PACKAGES ,
18381848 pageSize : query . pageSize ?? 1 ,
1839- continueAfter : query . continueAfter ,
1849+ continueAfter : sanitizeCursor ( query . continueAfter ) ,
18401850 } ,
18411851 ] as PageSize < GITHUB_ACCOUNT_SCOPES > [ ] ) . getQuery ( ) ,
18421852 fetchParams . auth ,
0 commit comments