@fourteensystems/shipguard 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 (139) hide show
  1. package/README.md +213 -0
  2. package/bin/shipguard.mjs +2 -0
  3. package/dist/cli/commands/baseline.d.ts +7 -0
  4. package/dist/cli/commands/baseline.d.ts.map +1 -0
  5. package/dist/cli/commands/baseline.js +22 -0
  6. package/dist/cli/commands/baseline.js.map +1 -0
  7. package/dist/cli/commands/ci.d.ts +13 -0
  8. package/dist/cli/commands/ci.d.ts.map +1 -0
  9. package/dist/cli/commands/ci.js +91 -0
  10. package/dist/cli/commands/ci.js.map +1 -0
  11. package/dist/cli/commands/explain.d.ts +2 -0
  12. package/dist/cli/commands/explain.d.ts.map +1 -0
  13. package/dist/cli/commands/explain.js +20 -0
  14. package/dist/cli/commands/explain.js.map +1 -0
  15. package/dist/cli/commands/init.d.ts +7 -0
  16. package/dist/cli/commands/init.d.ts.map +1 -0
  17. package/dist/cli/commands/init.js +91 -0
  18. package/dist/cli/commands/init.js.map +1 -0
  19. package/dist/cli/commands/rules.d.ts +2 -0
  20. package/dist/cli/commands/rules.d.ts.map +1 -0
  21. package/dist/cli/commands/rules.js +13 -0
  22. package/dist/cli/commands/rules.js.map +1 -0
  23. package/dist/cli/commands/scan.d.ts +10 -0
  24. package/dist/cli/commands/scan.d.ts.map +1 -0
  25. package/dist/cli/commands/scan.js +55 -0
  26. package/dist/cli/commands/scan.js.map +1 -0
  27. package/dist/cli/commands/waive.d.ts +8 -0
  28. package/dist/cli/commands/waive.d.ts.map +1 -0
  29. package/dist/cli/commands/waive.js +34 -0
  30. package/dist/cli/commands/waive.js.map +1 -0
  31. package/dist/cli/index.d.ts +2 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +63 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/engine/baseline.d.ts +11 -0
  36. package/dist/engine/baseline.d.ts.map +1 -0
  37. package/dist/engine/baseline.js +39 -0
  38. package/dist/engine/baseline.js.map +1 -0
  39. package/dist/engine/config.d.ts +8 -0
  40. package/dist/engine/config.d.ts.map +1 -0
  41. package/dist/engine/config.js +130 -0
  42. package/dist/engine/config.js.map +1 -0
  43. package/dist/engine/extensions/load.d.ts +11 -0
  44. package/dist/engine/extensions/load.d.ts.map +1 -0
  45. package/dist/engine/extensions/load.js +26 -0
  46. package/dist/engine/extensions/load.js.map +1 -0
  47. package/dist/engine/extensions/registry.d.ts +5 -0
  48. package/dist/engine/extensions/registry.d.ts.map +1 -0
  49. package/dist/engine/extensions/registry.js +11 -0
  50. package/dist/engine/extensions/registry.js.map +1 -0
  51. package/dist/engine/extensions/types.d.ts +51 -0
  52. package/dist/engine/extensions/types.d.ts.map +1 -0
  53. package/dist/engine/extensions/types.js +2 -0
  54. package/dist/engine/extensions/types.js.map +1 -0
  55. package/dist/engine/report.d.ts +5 -0
  56. package/dist/engine/report.d.ts.map +1 -0
  57. package/dist/engine/report.js +88 -0
  58. package/dist/engine/report.js.map +1 -0
  59. package/dist/engine/run.d.ts +9 -0
  60. package/dist/engine/run.d.ts.map +1 -0
  61. package/dist/engine/run.js +101 -0
  62. package/dist/engine/run.js.map +1 -0
  63. package/dist/engine/sarif.d.ts +3 -0
  64. package/dist/engine/sarif.d.ts.map +1 -0
  65. package/dist/engine/sarif.js +58 -0
  66. package/dist/engine/sarif.js.map +1 -0
  67. package/dist/engine/score.d.ts +13 -0
  68. package/dist/engine/score.d.ts.map +1 -0
  69. package/dist/engine/score.js +97 -0
  70. package/dist/engine/score.js.map +1 -0
  71. package/dist/engine/types.d.ts +119 -0
  72. package/dist/engine/types.d.ts.map +1 -0
  73. package/dist/engine/types.js +2 -0
  74. package/dist/engine/types.js.map +1 -0
  75. package/dist/engine/version.d.ts +5 -0
  76. package/dist/engine/version.d.ts.map +1 -0
  77. package/dist/engine/version.js +15 -0
  78. package/dist/engine/version.js.map +1 -0
  79. package/dist/engine/waivers.d.ts +9 -0
  80. package/dist/engine/waivers.d.ts.map +1 -0
  81. package/dist/engine/waivers.js +55 -0
  82. package/dist/engine/waivers.js.map +1 -0
  83. package/dist/index.d.ts +12 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +11 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/next/deps.d.ts +4 -0
  88. package/dist/next/deps.d.ts.map +1 -0
  89. package/dist/next/deps.js +102 -0
  90. package/dist/next/deps.js.map +1 -0
  91. package/dist/next/detect.d.ts +10 -0
  92. package/dist/next/detect.d.ts.map +1 -0
  93. package/dist/next/detect.js +57 -0
  94. package/dist/next/detect.js.map +1 -0
  95. package/dist/next/index.d.ts +5 -0
  96. package/dist/next/index.d.ts.map +1 -0
  97. package/dist/next/index.js +41 -0
  98. package/dist/next/index.js.map +1 -0
  99. package/dist/next/middleware.d.ts +3 -0
  100. package/dist/next/middleware.d.ts.map +1 -0
  101. package/dist/next/middleware.js +33 -0
  102. package/dist/next/middleware.js.map +1 -0
  103. package/dist/next/routes.d.ts +5 -0
  104. package/dist/next/routes.d.ts.map +1 -0
  105. package/dist/next/routes.js +125 -0
  106. package/dist/next/routes.js.map +1 -0
  107. package/dist/next/server-actions.d.ts +4 -0
  108. package/dist/next/server-actions.d.ts.map +1 -0
  109. package/dist/next/server-actions.js +107 -0
  110. package/dist/next/server-actions.js.map +1 -0
  111. package/dist/next/trpc.d.ts +3 -0
  112. package/dist/next/trpc.d.ts.map +1 -0
  113. package/dist/next/trpc.js +339 -0
  114. package/dist/next/trpc.js.map +1 -0
  115. package/dist/next/types.d.ts +100 -0
  116. package/dist/next/types.d.ts.map +1 -0
  117. package/dist/next/types.js +2 -0
  118. package/dist/next/types.js.map +1 -0
  119. package/dist/rules/auth-boundary-missing.d.ts +5 -0
  120. package/dist/rules/auth-boundary-missing.d.ts.map +1 -0
  121. package/dist/rules/auth-boundary-missing.js +278 -0
  122. package/dist/rules/auth-boundary-missing.js.map +1 -0
  123. package/dist/rules/index.d.ts +12 -0
  124. package/dist/rules/index.d.ts.map +1 -0
  125. package/dist/rules/index.js +41 -0
  126. package/dist/rules/index.js.map +1 -0
  127. package/dist/rules/rate-limit-missing.d.ts +5 -0
  128. package/dist/rules/rate-limit-missing.d.ts.map +1 -0
  129. package/dist/rules/rate-limit-missing.js +230 -0
  130. package/dist/rules/rate-limit-missing.js.map +1 -0
  131. package/dist/rules/tenancy-scope-missing.d.ts +5 -0
  132. package/dist/rules/tenancy-scope-missing.d.ts.map +1 -0
  133. package/dist/rules/tenancy-scope-missing.js +149 -0
  134. package/dist/rules/tenancy-scope-missing.js.map +1 -0
  135. package/dist/util/paths.d.ts +6 -0
  136. package/dist/util/paths.d.ts.map +1 -0
  137. package/dist/util/paths.js +18 -0
  138. package/dist/util/paths.js.map +1 -0
  139. package/package.json +55 -0
@@ -0,0 +1,339 @@
1
+ import path from "node:path";
2
+ import { readFileSync, existsSync } from "node:fs";
3
+ import fg from "fast-glob";
4
+ import { detectMutationSignals } from "./routes.js";
5
+ /** Known tRPC handler markers in the proxy route file */
6
+ const TRPC_PROXY_MARKERS = [
7
+ "fetchRequestHandler",
8
+ "createNextApiHandler",
9
+ "@trpc/server",
10
+ "trpcNext",
11
+ ];
12
+ /** Procedure names that indicate authenticated access */
13
+ const PROTECTED_PROCEDURE_NAMES = [
14
+ "protectedProcedure",
15
+ "authedProcedure",
16
+ "adminProcedure",
17
+ "privateProcedure",
18
+ "authenticatedProcedure",
19
+ ];
20
+ const EMPTY_INDEX = {
21
+ detected: false,
22
+ procedures: [],
23
+ mutationProcedures: [],
24
+ };
25
+ export async function buildTrpcIndex(rootDir, appDir, _excludeGlobs) {
26
+ // Stage 1: Find tRPC proxy route
27
+ const proxyFile = findTrpcProxy(rootDir, appDir);
28
+ if (!proxyFile)
29
+ return EMPTY_INDEX;
30
+ const proxySrc = readSource(rootDir, proxyFile);
31
+ if (!proxySrc)
32
+ return EMPTY_INDEX;
33
+ // Stage 2: Resolve root router file
34
+ const rootRouterFile = resolveRootRouter(proxySrc, proxyFile, rootDir);
35
+ if (!rootRouterFile) {
36
+ return { detected: true, proxyFile, procedures: [], mutationProcedures: [] };
37
+ }
38
+ // Stage 3: Extract procedures from root router and sub-routers
39
+ const procedures = extractAllProcedures(rootDir, rootRouterFile);
40
+ const mutationProcedures = procedures.filter((p) => p.procedureKind === "mutation");
41
+ return {
42
+ detected: true,
43
+ proxyFile,
44
+ rootRouterFile,
45
+ procedures,
46
+ mutationProcedures,
47
+ };
48
+ }
49
+ // ---------------------------------------------------------------------------
50
+ // Stage 1: Find tRPC proxy route
51
+ // ---------------------------------------------------------------------------
52
+ function findTrpcProxy(rootDir, appDir) {
53
+ // Look for App Router tRPC proxy: app/api/trpc/[trpc]/route.ts (or similar)
54
+ const candidates = fg.globSync(`${appDir}/**/api/trpc/**/route.{ts,js,tsx,jsx}`, { cwd: rootDir, ignore: ["**/node_modules/**"] });
55
+ for (const file of candidates) {
56
+ const src = readSource(rootDir, file);
57
+ if (!src)
58
+ continue;
59
+ if (TRPC_PROXY_MARKERS.some((m) => src.includes(m))) {
60
+ return file;
61
+ }
62
+ }
63
+ return undefined;
64
+ }
65
+ // ---------------------------------------------------------------------------
66
+ // Stage 2: Resolve root router from proxy import
67
+ // ---------------------------------------------------------------------------
68
+ function resolveRootRouter(proxySrc, proxyFile, rootDir) {
69
+ // Pattern 1: import { appRouter } from '...'
70
+ // Pattern 2: import { someRouter as appRouter } from '...'
71
+ // Pattern 3: import appRouter from '...'
72
+ const importPatterns = [
73
+ /import\s+\{[^}]*appRouter[^}]*\}\s+from\s+['"]([^'"]+)['"]/,
74
+ /import\s+\{[^}]*\w+Router[^}]*\}\s+from\s+['"]([^'"]+)['"]/,
75
+ /import\s+(\w+Router)\s+from\s+['"]([^'"]+)['"]/,
76
+ ];
77
+ for (const pattern of importPatterns) {
78
+ const match = pattern.exec(proxySrc);
79
+ if (match) {
80
+ // Last capture group is always the path
81
+ const importPath = match[match.length - 1] ?? match[1];
82
+ if (importPath) {
83
+ const resolved = resolveImportPath(proxyFile, importPath, rootDir);
84
+ if (resolved)
85
+ return resolved;
86
+ }
87
+ }
88
+ }
89
+ // Pattern 4: router: appRouter — find the import that defines appRouter
90
+ const routerPropMatch = /router\s*:\s*(\w+)/.exec(proxySrc);
91
+ if (routerPropMatch) {
92
+ const routerName = routerPropMatch[1];
93
+ const importForRouter = new RegExp(`import\\s+\\{[^}]*\\b${routerName}\\b[^}]*\\}\\s+from\\s+['"]([^'"]+)['"]`);
94
+ const m = importForRouter.exec(proxySrc);
95
+ if (m?.[1]) {
96
+ const resolved = resolveImportPath(proxyFile, m[1], rootDir);
97
+ if (resolved)
98
+ return resolved;
99
+ }
100
+ }
101
+ return undefined;
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Stage 3: Extract procedures from router files
105
+ // ---------------------------------------------------------------------------
106
+ function extractAllProcedures(rootDir, rootRouterFile) {
107
+ const rootSrc = readSource(rootDir, rootRouterFile);
108
+ if (!rootSrc)
109
+ return [];
110
+ const procedures = [];
111
+ // Extract inline procedures from root router (e.g., healthcheck: publicProcedure.query(...))
112
+ const rootEntries = extractRouterEntries(rootSrc);
113
+ for (const entry of rootEntries) {
114
+ if (entry.type === "procedure") {
115
+ procedures.push(buildProcedure(entry.name, entry.name, rootRouterFile, entry, rootSrc));
116
+ }
117
+ else if (entry.type === "sub-router") {
118
+ // Resolve sub-router import and extract its procedures
119
+ const subRouterFile = resolveSubRouterImport(rootSrc, entry.importName, rootRouterFile, rootDir);
120
+ if (subRouterFile) {
121
+ const subSrc = readSource(rootDir, subRouterFile);
122
+ if (subSrc) {
123
+ const subEntries = extractRouterEntries(subSrc);
124
+ for (const sub of subEntries) {
125
+ if (sub.type === "procedure") {
126
+ procedures.push(buildProcedure(`${entry.name}.${sub.name}`, sub.name, subRouterFile, sub, subSrc));
127
+ }
128
+ // We don't follow nested sub-routers (one level only per spec)
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ return procedures;
135
+ }
136
+ function extractRouterEntries(src) {
137
+ const entries = [];
138
+ const lines = src.split("\n");
139
+ // Find the router({ ... }) block
140
+ // Match: router({ or createTRPCRouter({
141
+ const routerBlockStart = lines.findIndex((l) => /(?:router|createTRPCRouter)\s*\(\s*\{/.test(l));
142
+ if (routerBlockStart === -1)
143
+ return entries;
144
+ // Walk through lines inside the router block looking for entries
145
+ // Pattern: `name: someIdentifier` (sub-router) or `name: publicProcedure.query(...)` (procedure)
146
+ let braceDepth = 0;
147
+ let insideRouter = false;
148
+ for (let i = routerBlockStart; i < lines.length; i++) {
149
+ const line = lines[i];
150
+ // Track brace depth
151
+ for (const ch of line) {
152
+ if (ch === "{")
153
+ braceDepth++;
154
+ if (ch === "}")
155
+ braceDepth--;
156
+ }
157
+ // Start tracking after the opening brace of router({
158
+ if (i === routerBlockStart) {
159
+ insideRouter = true;
160
+ // The opening { might be on this line — it's already counted above
161
+ }
162
+ // Stop when we close the router block
163
+ if (insideRouter && braceDepth <= 0)
164
+ break;
165
+ // Only look at entries at the top level of the router object (depth ~2: router({ entry: ... }))
166
+ // Match: `identifier: something`
167
+ const entryMatch = /^\s*(\w+)\s*:\s*(.+)/.exec(line);
168
+ if (!entryMatch)
169
+ continue;
170
+ const name = entryMatch[1];
171
+ const value = entryMatch[2].trim();
172
+ // Check if it's a procedure definition
173
+ if (isProcedureLine(value)) {
174
+ // Gather the full procedure text (may span multiple lines until the closing)
175
+ const procSrc = gatherProcedureSource(lines, i);
176
+ entries.push({
177
+ name,
178
+ type: "procedure",
179
+ procedureType: classifyProcedureType(procSrc),
180
+ procedureKind: classifyProcedureKind(procSrc),
181
+ line: i + 1,
182
+ procedureSrc: procSrc,
183
+ importName: name,
184
+ });
185
+ }
186
+ else {
187
+ // It's a sub-router reference (e.g., `post: postRouter` or `post: postRouter,`)
188
+ const identMatch = /^(\w+)/.exec(value);
189
+ if (identMatch) {
190
+ entries.push({
191
+ name,
192
+ type: "sub-router",
193
+ importName: identMatch[1],
194
+ line: i + 1,
195
+ });
196
+ }
197
+ }
198
+ }
199
+ return entries;
200
+ }
201
+ function isProcedureLine(value) {
202
+ // Matches: publicProcedure.query(...), protectedProcedure.input(...).mutation(...), etc.
203
+ return /(?:public|protected|authed|admin|private|authenticated)?[Pp]rocedure\b/.test(value);
204
+ }
205
+ function gatherProcedureSource(lines, startLine) {
206
+ // Collect lines from the entry start until we hit the next router entry
207
+ // or the closing of the router block.
208
+ // tRPC procedures are method chains that can span many lines:
209
+ // name: publicProcedure
210
+ // .input(z.object({...}))
211
+ // .mutation(async ({input}) => {
212
+ // ...
213
+ // }),
214
+ const collected = [lines[startLine]];
215
+ const entryIndent = lines[startLine].search(/\S/);
216
+ for (let i = startLine + 1; i < lines.length && i < startLine + 100; i++) {
217
+ const line = lines[i];
218
+ const trimmed = line.trimStart();
219
+ // Stop at closing of router block
220
+ if (trimmed.startsWith("});") || trimmed === "})")
221
+ break;
222
+ // Stop if we hit the next entry at the same indent level
223
+ // (a line like ` nextEntry: ...` at similar indentation)
224
+ const lineIndent = line.search(/\S/);
225
+ if (lineIndent >= 0 && lineIndent <= entryIndent && /^\s*\w+\s*:/.test(line)) {
226
+ break;
227
+ }
228
+ collected.push(line);
229
+ // Stop after a trailing `),` at entry-level indentation (procedure chain ended)
230
+ if (trimmed === "),")
231
+ break;
232
+ }
233
+ return collected.join("\n");
234
+ }
235
+ function classifyProcedureType(src) {
236
+ if (/\bpublicProcedure\b/.test(src))
237
+ return "public";
238
+ for (const name of PROTECTED_PROCEDURE_NAMES) {
239
+ if (src.includes(name))
240
+ return "protected";
241
+ }
242
+ // Bare `procedure` without prefix — could be either, mark unknown
243
+ if (/\bprocedure\b/.test(src) && !/Procedure\b/.test(src))
244
+ return "unknown";
245
+ return "unknown";
246
+ }
247
+ function classifyProcedureKind(src) {
248
+ if (/\.mutation\s*\(/.test(src))
249
+ return "mutation";
250
+ if (/\.query\s*\(/.test(src))
251
+ return "query";
252
+ if (/\.subscription\s*\(/.test(src))
253
+ return "subscription";
254
+ return "unknown";
255
+ }
256
+ function buildProcedure(fullName, _localName, file, entry, fileSrc) {
257
+ // Detect mutation signals from the procedure's source (handler body)
258
+ const procSrc = entry.procedureSrc ?? "";
259
+ const signals = detectMutationSignals(procSrc);
260
+ // If the procedure is a mutation, that's also mutation evidence
261
+ if (entry.procedureKind === "mutation" && !signals.hasMutationEvidence) {
262
+ signals.hasMutationEvidence = true;
263
+ signals.mutationDetails.push("tRPC .mutation() endpoint");
264
+ }
265
+ return {
266
+ kind: "trpc-procedure",
267
+ name: fullName,
268
+ file,
269
+ line: entry.line,
270
+ procedureType: entry.procedureType ?? "unknown",
271
+ procedureKind: entry.procedureKind ?? "unknown",
272
+ signals,
273
+ routerName: entry.importName,
274
+ };
275
+ }
276
+ function resolveSubRouterImport(routerSrc, importName, routerFile, rootDir) {
277
+ // Find the import statement that defines this identifier
278
+ const importPattern = new RegExp(`import\\s+\\{[^}]*\\b${escapeRegex(importName)}\\b[^}]*\\}\\s+from\\s+['"]([^'"]+)['"]`);
279
+ const match = importPattern.exec(routerSrc);
280
+ if (match?.[1]) {
281
+ return resolveImportPath(routerFile, match[1], rootDir);
282
+ }
283
+ // Default import: import postRouter from './post'
284
+ const defaultImport = new RegExp(`import\\s+${escapeRegex(importName)}\\s+from\\s+['"]([^'"]+)['"]`);
285
+ const m2 = defaultImport.exec(routerSrc);
286
+ if (m2?.[1]) {
287
+ return resolveImportPath(routerFile, m2[1], rootDir);
288
+ }
289
+ return undefined;
290
+ }
291
+ // ---------------------------------------------------------------------------
292
+ // Import resolution
293
+ // ---------------------------------------------------------------------------
294
+ function resolveImportPath(fromFile, importPath, rootDir) {
295
+ let resolved;
296
+ if (importPath.startsWith("~/") || importPath.startsWith("@/")) {
297
+ // T3 convention: ~/ and @/ map to src/
298
+ const stripped = importPath.slice(2);
299
+ resolved = path.join("src", stripped);
300
+ }
301
+ else if (importPath.startsWith(".")) {
302
+ // Relative import
303
+ const fromDir = path.dirname(fromFile);
304
+ resolved = path.join(fromDir, importPath);
305
+ }
306
+ else {
307
+ // Bare specifier (npm package) — can't resolve
308
+ return undefined;
309
+ }
310
+ // Try extensions
311
+ const extensions = [".ts", ".tsx", ".js", ".jsx"];
312
+ const candidates = [
313
+ resolved,
314
+ ...extensions.map((ext) => resolved + ext),
315
+ ...extensions.map((ext) => path.join(resolved, "index" + ext)),
316
+ ...extensions.map((ext) => path.join(resolved, "_app" + ext)),
317
+ ];
318
+ for (const candidate of candidates) {
319
+ if (existsSync(path.join(rootDir, candidate))) {
320
+ return candidate;
321
+ }
322
+ }
323
+ return undefined;
324
+ }
325
+ // ---------------------------------------------------------------------------
326
+ // Utilities
327
+ // ---------------------------------------------------------------------------
328
+ function readSource(rootDir, file) {
329
+ try {
330
+ return readFileSync(path.join(rootDir, file), "utf8");
331
+ }
332
+ catch {
333
+ return null;
334
+ }
335
+ }
336
+ function escapeRegex(str) {
337
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
338
+ }
339
+ //# sourceMappingURL=trpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.js","sourceRoot":"","sources":["../../src/next/trpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ export type Framework = "next-app-router";
2
+ export type Severity = "low" | "med" | "high" | "critical";
3
+ export type Confidence = "low" | "med" | "high";
4
+ export type RouteKind = "route-handler" | "server-action";
5
+ export interface NextRoute {
6
+ kind: "route-handler";
7
+ file: string;
8
+ method?: string;
9
+ pathname?: string;
10
+ isApi: boolean;
11
+ isPublic: boolean;
12
+ signals: MutationSignals;
13
+ }
14
+ export interface NextServerAction {
15
+ kind: "server-action";
16
+ file: string;
17
+ exportName?: string;
18
+ signals: MutationSignals;
19
+ }
20
+ export interface MutationSignals {
21
+ hasMutationEvidence: boolean;
22
+ hasDbWriteEvidence: boolean;
23
+ hasStripeWriteEvidence: boolean;
24
+ mutationDetails: string[];
25
+ }
26
+ export interface NextMiddlewareIndex {
27
+ file?: string;
28
+ authLikely: boolean;
29
+ rateLimitLikely: boolean;
30
+ matcherPatterns: string[];
31
+ }
32
+ export interface NextDepsIndex {
33
+ hasNextAuth: boolean;
34
+ hasClerk: boolean;
35
+ hasSupabase: boolean;
36
+ hasKinde: boolean;
37
+ hasWorkOS: boolean;
38
+ hasBetterAuth: boolean;
39
+ hasLucia: boolean;
40
+ hasAuth0: boolean;
41
+ hasIronSession: boolean;
42
+ hasFirebaseAuth: boolean;
43
+ hasUpstashRatelimit: boolean;
44
+ hasArcjet: boolean;
45
+ hasUnkey: boolean;
46
+ hasPrisma: boolean;
47
+ hasDrizzle: boolean;
48
+ hasTrpc: boolean;
49
+ }
50
+ export interface NextHints {
51
+ auth: {
52
+ functions: string[];
53
+ middlewareFiles: string[];
54
+ allowlistPaths: string[];
55
+ };
56
+ rateLimit: {
57
+ wrappers: string[];
58
+ allowlistPaths: string[];
59
+ };
60
+ tenancy: {
61
+ orgFieldNames: string[];
62
+ };
63
+ }
64
+ export interface TrpcProcedure {
65
+ kind: "trpc-procedure";
66
+ /** Dotted name, e.g. "post.add" */
67
+ name: string;
68
+ /** Router file where procedure is defined */
69
+ file: string;
70
+ line?: number;
71
+ procedureType: "public" | "protected" | "unknown";
72
+ procedureKind: "mutation" | "query" | "subscription" | "unknown";
73
+ signals: MutationSignals;
74
+ routerName?: string;
75
+ }
76
+ export interface TrpcIndex {
77
+ detected: boolean;
78
+ proxyFile?: string;
79
+ rootRouterFile?: string;
80
+ procedures: TrpcProcedure[];
81
+ mutationProcedures: TrpcProcedure[];
82
+ }
83
+ export interface NextIndex {
84
+ version: 1;
85
+ framework: Framework;
86
+ rootDir: string;
87
+ deps: NextDepsIndex;
88
+ hints: NextHints;
89
+ middleware: NextMiddlewareIndex;
90
+ routes: {
91
+ all: NextRoute[];
92
+ mutationRoutes: NextRoute[];
93
+ };
94
+ serverActions: {
95
+ all: NextServerAction[];
96
+ mutationActions: NextServerAction[];
97
+ };
98
+ trpc: TrpcIndex;
99
+ }
100
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/next/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/next/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { NextIndex } from "../next/types.js";
2
+ import type { Finding, ShipguardConfig } from "../engine/types.js";
3
+ export declare const RULE_ID = "AUTH-BOUNDARY-MISSING";
4
+ export declare function run(index: NextIndex, config: ShipguardConfig): Finding[];
5
+ //# sourceMappingURL=auth-boundary-missing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-boundary-missing.d.ts","sourceRoot":"","sources":["../../src/rules/auth-boundary-missing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAA+B,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAInE,eAAO,MAAM,OAAO,0BAA0B,CAAC;AAE/C,wBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CAqFxE"}