Skip to content

Commit d504bc1

Browse files
committed
adds sanitizeCursor()
1 parent ba257af commit d504bc1

File tree

1 file changed

+42
-32
lines changed

1 file changed

+42
-32
lines changed

src/v1/adapters/github/index.ts

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ import { DEV_MODE } from "../../../environment";
4242
const 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

Comments
 (0)