@ucptools/validator 1.0.0 → 1.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 (330) hide show
  1. package/dist/auth/config.d.ts +20 -0
  2. package/dist/auth/config.d.ts.map +1 -0
  3. package/dist/auth/config.js +114 -0
  4. package/dist/auth/config.js.map +1 -0
  5. package/dist/auth/index.d.ts +5 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +17 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/middleware.d.ts +45 -0
  10. package/dist/auth/middleware.d.ts.map +1 -0
  11. package/dist/auth/middleware.js +170 -0
  12. package/dist/auth/middleware.js.map +1 -0
  13. package/dist/auth/service.d.ts +80 -0
  14. package/dist/auth/service.d.ts.map +1 -0
  15. package/dist/auth/service.js +298 -0
  16. package/dist/auth/service.js.map +1 -0
  17. package/dist/cli/index.d.ts +6 -0
  18. package/dist/cli/index.d.ts.map +1 -0
  19. package/dist/cli/index.js +375 -0
  20. package/dist/cli/index.js.map +1 -0
  21. package/dist/cli/mock-server.d.ts +20 -0
  22. package/dist/cli/mock-server.d.ts.map +1 -0
  23. package/dist/cli/mock-server.js +261 -0
  24. package/dist/cli/mock-server.js.map +1 -0
  25. package/dist/compliance/compliance-generator.d.ts +34 -0
  26. package/dist/compliance/compliance-generator.d.ts.map +1 -0
  27. package/dist/compliance/compliance-generator.js +320 -0
  28. package/dist/compliance/compliance-generator.js.map +1 -0
  29. package/dist/compliance/index.d.ts +8 -0
  30. package/dist/compliance/index.d.ts.map +1 -0
  31. package/dist/compliance/index.js +17 -0
  32. package/dist/compliance/index.js.map +1 -0
  33. package/dist/compliance/templates.d.ts +34 -0
  34. package/dist/compliance/templates.d.ts.map +1 -0
  35. package/{src/compliance/templates.ts → dist/compliance/templates.js} +117 -155
  36. package/dist/compliance/templates.js.map +1 -0
  37. package/dist/compliance/types.d.ts +64 -0
  38. package/dist/compliance/types.d.ts.map +1 -0
  39. package/dist/compliance/types.js +64 -0
  40. package/dist/compliance/types.js.map +1 -0
  41. package/dist/db/index.d.ts +17 -0
  42. package/dist/db/index.d.ts.map +1 -0
  43. package/dist/db/index.js +80 -0
  44. package/dist/db/index.js.map +1 -0
  45. package/dist/db/schema.d.ts +3886 -0
  46. package/dist/db/schema.d.ts.map +1 -0
  47. package/dist/db/schema.js +425 -0
  48. package/dist/db/schema.js.map +1 -0
  49. package/dist/db/utils.d.ts +252 -0
  50. package/dist/db/utils.d.ts.map +1 -0
  51. package/dist/db/utils.js +295 -0
  52. package/dist/db/utils.js.map +1 -0
  53. package/dist/feed-analyzer/feed-analyzer.d.ts +26 -0
  54. package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -0
  55. package/{src/feed-analyzer/feed-analyzer.ts → dist/feed-analyzer/feed-analyzer.js} +856 -726
  56. package/dist/feed-analyzer/feed-analyzer.js.map +1 -0
  57. package/dist/feed-analyzer/index.d.ts +8 -0
  58. package/dist/feed-analyzer/index.d.ts.map +1 -0
  59. package/dist/feed-analyzer/index.js +19 -0
  60. package/dist/feed-analyzer/index.js.map +1 -0
  61. package/dist/feed-analyzer/types.d.ts +285 -0
  62. package/dist/feed-analyzer/types.d.ts.map +1 -0
  63. package/dist/feed-analyzer/types.js +175 -0
  64. package/dist/feed-analyzer/types.js.map +1 -0
  65. package/{src/generator/index.ts → dist/generator/index.d.ts} +1 -1
  66. package/dist/generator/index.d.ts.map +1 -0
  67. package/dist/generator/index.js +13 -0
  68. package/dist/generator/index.js.map +1 -0
  69. package/dist/generator/key-generator.d.ts +24 -0
  70. package/dist/generator/key-generator.d.ts.map +1 -0
  71. package/dist/generator/key-generator.js +144 -0
  72. package/dist/generator/key-generator.js.map +1 -0
  73. package/dist/generator/profile-builder.d.ts +15 -0
  74. package/dist/generator/profile-builder.d.ts.map +1 -0
  75. package/dist/generator/profile-builder.js +338 -0
  76. package/dist/generator/profile-builder.js.map +1 -0
  77. package/dist/hosting/artifacts-generator.d.ts +10 -0
  78. package/dist/hosting/artifacts-generator.d.ts.map +1 -0
  79. package/{src/hosting/artifacts-generator.ts → dist/hosting/artifacts-generator.js} +191 -241
  80. package/dist/hosting/artifacts-generator.js.map +1 -0
  81. package/{src/hosting/index.ts → dist/hosting/index.d.ts} +1 -1
  82. package/dist/hosting/index.d.ts.map +1 -0
  83. package/dist/hosting/index.js +10 -0
  84. package/dist/hosting/index.js.map +1 -0
  85. package/dist/index.d.ts +18 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +78 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/lib/analytics.d.ts +337 -0
  90. package/dist/lib/analytics.d.ts.map +1 -0
  91. package/dist/lib/analytics.js +188 -0
  92. package/dist/lib/analytics.js.map +1 -0
  93. package/{src/security/index.ts → dist/security/index.d.ts} +8 -15
  94. package/dist/security/index.d.ts.map +1 -0
  95. package/dist/security/index.js +12 -0
  96. package/dist/security/index.js.map +1 -0
  97. package/dist/security/security-scanner.d.ts +10 -0
  98. package/dist/security/security-scanner.d.ts.map +1 -0
  99. package/dist/security/security-scanner.js +669 -0
  100. package/dist/security/security-scanner.js.map +1 -0
  101. package/dist/security/types.d.ts +80 -0
  102. package/dist/security/types.d.ts.map +1 -0
  103. package/dist/security/types.js +21 -0
  104. package/dist/security/types.js.map +1 -0
  105. package/dist/services/analytics.d.ts +114 -0
  106. package/dist/services/analytics.d.ts.map +1 -0
  107. package/dist/services/analytics.js +862 -0
  108. package/dist/services/analytics.js.map +1 -0
  109. package/dist/services/badge.d.ts +31 -0
  110. package/dist/services/badge.d.ts.map +1 -0
  111. package/dist/services/badge.js +152 -0
  112. package/dist/services/badge.js.map +1 -0
  113. package/dist/services/cron.d.ts +125 -0
  114. package/dist/services/cron.d.ts.map +1 -0
  115. package/dist/services/cron.js +613 -0
  116. package/dist/services/cron.js.map +1 -0
  117. package/dist/services/directory.d.ts +106 -0
  118. package/dist/services/directory.d.ts.map +1 -0
  119. package/dist/services/directory.js +351 -0
  120. package/dist/services/directory.js.map +1 -0
  121. package/dist/services/email.d.ts +112 -0
  122. package/dist/services/email.d.ts.map +1 -0
  123. package/dist/services/email.js +772 -0
  124. package/dist/services/email.js.map +1 -0
  125. package/dist/services/hosted-profiles.d.ts +77 -0
  126. package/dist/services/hosted-profiles.d.ts.map +1 -0
  127. package/dist/services/hosted-profiles.js +433 -0
  128. package/dist/services/hosted-profiles.js.map +1 -0
  129. package/dist/services/latency.d.ts +67 -0
  130. package/dist/services/latency.d.ts.map +1 -0
  131. package/dist/services/latency.js +274 -0
  132. package/dist/services/latency.js.map +1 -0
  133. package/dist/services/manifest-compliance.d.ts +64 -0
  134. package/dist/services/manifest-compliance.d.ts.map +1 -0
  135. package/dist/services/manifest-compliance.js +271 -0
  136. package/dist/services/manifest-compliance.js.map +1 -0
  137. package/dist/services/monitoring-diff.d.ts +31 -0
  138. package/dist/services/monitoring-diff.d.ts.map +1 -0
  139. package/dist/services/monitoring-diff.js +189 -0
  140. package/dist/services/monitoring-diff.js.map +1 -0
  141. package/dist/services/notifications.d.ts +46 -0
  142. package/dist/services/notifications.d.ts.map +1 -0
  143. package/dist/services/notifications.js +88 -0
  144. package/dist/services/notifications.js.map +1 -0
  145. package/dist/services/stripe.d.ts +93 -0
  146. package/dist/services/stripe.d.ts.map +1 -0
  147. package/dist/services/stripe.js +490 -0
  148. package/dist/services/stripe.js.map +1 -0
  149. package/dist/services/validation-history.d.ts +99 -0
  150. package/dist/services/validation-history.d.ts.map +1 -0
  151. package/dist/services/validation-history.js +344 -0
  152. package/dist/services/validation-history.js.map +1 -0
  153. package/dist/services/validation-logging.d.ts +103 -0
  154. package/dist/services/validation-logging.d.ts.map +1 -0
  155. package/dist/services/validation-logging.js +210 -0
  156. package/dist/services/validation-logging.js.map +1 -0
  157. package/dist/services/validation.d.ts +119 -0
  158. package/dist/services/validation.d.ts.map +1 -0
  159. package/dist/services/validation.js +1185 -0
  160. package/dist/services/validation.js.map +1 -0
  161. package/dist/simulator/agent-simulator.d.ts +69 -0
  162. package/dist/simulator/agent-simulator.d.ts.map +1 -0
  163. package/dist/simulator/agent-simulator.js +870 -0
  164. package/dist/simulator/agent-simulator.js.map +1 -0
  165. package/{src/simulator/index.ts → dist/simulator/index.d.ts} +7 -7
  166. package/dist/simulator/index.d.ts.map +1 -0
  167. package/dist/simulator/index.js +23 -0
  168. package/dist/simulator/index.js.map +1 -0
  169. package/{src/simulator/types.ts → dist/simulator/types.d.ts} +171 -170
  170. package/dist/simulator/types.d.ts.map +1 -0
  171. package/dist/simulator/types.js +18 -0
  172. package/dist/simulator/types.js.map +1 -0
  173. package/dist/types/acp-validation.d.ts +87 -0
  174. package/dist/types/acp-validation.d.ts.map +1 -0
  175. package/dist/types/acp-validation.js +40 -0
  176. package/dist/types/acp-validation.js.map +1 -0
  177. package/dist/types/analytics.d.ts +182 -0
  178. package/dist/types/analytics.d.ts.map +1 -0
  179. package/dist/types/analytics.js +7 -0
  180. package/dist/types/analytics.js.map +1 -0
  181. package/dist/types/generator.d.ts +106 -0
  182. package/dist/types/generator.d.ts.map +1 -0
  183. package/dist/types/generator.js +6 -0
  184. package/dist/types/generator.js.map +1 -0
  185. package/{src/types/index.ts → dist/types/index.d.ts} +1 -1
  186. package/dist/types/index.d.ts.map +1 -0
  187. package/dist/types/index.js +23 -0
  188. package/dist/types/index.js.map +1 -0
  189. package/dist/types/ucp-profile.d.ts +111 -0
  190. package/dist/types/ucp-profile.d.ts.map +1 -0
  191. package/dist/types/ucp-profile.js +45 -0
  192. package/dist/types/ucp-profile.js.map +1 -0
  193. package/dist/types/validation.d.ts +76 -0
  194. package/dist/types/validation.d.ts.map +1 -0
  195. package/dist/types/validation.js +42 -0
  196. package/dist/types/validation.js.map +1 -0
  197. package/dist/validator/acp/index.d.ts +31 -0
  198. package/dist/validator/acp/index.d.ts.map +1 -0
  199. package/dist/validator/acp/index.js +574 -0
  200. package/dist/validator/acp/index.js.map +1 -0
  201. package/dist/validator/index.d.ts +26 -0
  202. package/dist/validator/index.d.ts.map +1 -0
  203. package/dist/validator/index.js +161 -0
  204. package/dist/validator/index.js.map +1 -0
  205. package/dist/validator/network-validator.d.ts +28 -0
  206. package/dist/validator/network-validator.d.ts.map +1 -0
  207. package/dist/validator/network-validator.js +319 -0
  208. package/dist/validator/network-validator.js.map +1 -0
  209. package/dist/validator/rules-validator.d.ts +19 -0
  210. package/dist/validator/rules-validator.d.ts.map +1 -0
  211. package/dist/validator/rules-validator.js +306 -0
  212. package/dist/validator/rules-validator.js.map +1 -0
  213. package/dist/validator/sdk-validator.d.ts +58 -0
  214. package/dist/validator/sdk-validator.d.ts.map +1 -0
  215. package/{src/validator/sdk-validator.ts → dist/validator/sdk-validator.js} +273 -330
  216. package/dist/validator/sdk-validator.js.map +1 -0
  217. package/dist/validator/structural-validator.d.ts +11 -0
  218. package/dist/validator/structural-validator.d.ts.map +1 -0
  219. package/dist/validator/structural-validator.js +549 -0
  220. package/dist/validator/structural-validator.js.map +1 -0
  221. package/dist/validator/utils.d.ts +51 -0
  222. package/dist/validator/utils.d.ts.map +1 -0
  223. package/dist/validator/utils.js +132 -0
  224. package/dist/validator/utils.js.map +1 -0
  225. package/package.json +44 -12
  226. package/CLAUDE.md +0 -109
  227. package/api/analyze-feed.js +0 -140
  228. package/api/badge.js +0 -185
  229. package/api/benchmark.js +0 -177
  230. package/api/directory-stats.ts +0 -29
  231. package/api/directory.ts +0 -73
  232. package/api/generate-compliance.js +0 -143
  233. package/api/generate-schema.js +0 -457
  234. package/api/generate.js +0 -132
  235. package/api/security-scan.js +0 -133
  236. package/api/simulate.js +0 -187
  237. package/api/tsconfig.json +0 -10
  238. package/api/validate.js +0 -1351
  239. package/apify-actor/.actor/actor.json +0 -68
  240. package/apify-actor/.actor/input_schema.json +0 -32
  241. package/apify-actor/APIFY-STORE-LISTING.md +0 -412
  242. package/apify-actor/Dockerfile +0 -8
  243. package/apify-actor/README.md +0 -166
  244. package/apify-actor/main.ts +0 -111
  245. package/apify-actor/package.json +0 -17
  246. package/apify-actor/src/main.js +0 -199
  247. package/docs/BRAND-IDENTITY.md +0 -238
  248. package/docs/BRAND-STYLE-GUIDE.md +0 -356
  249. package/drizzle/0000_black_king_cobra.sql +0 -39
  250. package/drizzle/meta/0000_snapshot.json +0 -309
  251. package/drizzle/meta/_journal.json +0 -13
  252. package/drizzle.config.ts +0 -10
  253. package/public/.well-known/ucp +0 -25
  254. package/public/android-chrome-192x192.png +0 -0
  255. package/public/android-chrome-512x512.png +0 -0
  256. package/public/apple-touch-icon.png +0 -0
  257. package/public/brand.css +0 -321
  258. package/public/directory.html +0 -701
  259. package/public/favicon-16x16.png +0 -0
  260. package/public/favicon-32x32.png +0 -0
  261. package/public/favicon.ico +0 -0
  262. package/public/guides/bigcommerce.html +0 -743
  263. package/public/guides/fastucp.html +0 -838
  264. package/public/guides/magento.html +0 -779
  265. package/public/guides/shopify.html +0 -726
  266. package/public/guides/squarespace.html +0 -749
  267. package/public/guides/wix.html +0 -747
  268. package/public/guides/woocommerce.html +0 -733
  269. package/public/index.html +0 -3835
  270. package/public/learn.html +0 -396
  271. package/public/logo.jpeg +0 -0
  272. package/public/og-image-icon.png +0 -0
  273. package/public/og-image.png +0 -0
  274. package/public/robots.txt +0 -6
  275. package/public/site.webmanifest +0 -31
  276. package/public/sitemap.xml +0 -69
  277. package/public/social/linkedin-banner-1128x191.png +0 -0
  278. package/public/social/temp.PNG +0 -0
  279. package/public/social/x-header-1500x500.png +0 -0
  280. package/public/verify.html +0 -410
  281. package/scripts/generate-favicons.js +0 -44
  282. package/scripts/generate-ico.js +0 -23
  283. package/scripts/generate-og-image.js +0 -45
  284. package/scripts/reset-db.ts +0 -77
  285. package/scripts/seed-db.ts +0 -71
  286. package/scripts/setup-benchmark-db.js +0 -70
  287. package/src/api/server.ts +0 -266
  288. package/src/cli/index.ts +0 -302
  289. package/src/compliance/compliance-generator.ts +0 -452
  290. package/src/compliance/index.ts +0 -28
  291. package/src/compliance/types.ts +0 -170
  292. package/src/db/index.ts +0 -28
  293. package/src/db/schema.ts +0 -84
  294. package/src/feed-analyzer/index.ts +0 -34
  295. package/src/feed-analyzer/types.ts +0 -354
  296. package/src/generator/key-generator.ts +0 -124
  297. package/src/generator/profile-builder.ts +0 -402
  298. package/src/index.ts +0 -105
  299. package/src/security/security-scanner.ts +0 -604
  300. package/src/security/types.ts +0 -55
  301. package/src/services/directory.ts +0 -434
  302. package/src/simulator/agent-simulator.ts +0 -941
  303. package/src/types/generator.ts +0 -140
  304. package/src/types/ucp-profile.ts +0 -140
  305. package/src/types/validation.ts +0 -89
  306. package/src/validator/index.ts +0 -194
  307. package/src/validator/network-validator.ts +0 -417
  308. package/src/validator/rules-validator.ts +0 -297
  309. package/src/validator/structural-validator.ts +0 -476
  310. package/tests/fixtures/non-compliant-profile.json +0 -25
  311. package/tests/fixtures/official-sample-profile.json +0 -75
  312. package/tests/integration/benchmark.test.ts +0 -207
  313. package/tests/integration/database.test.ts +0 -163
  314. package/tests/integration/directory-api.test.ts +0 -268
  315. package/tests/integration/simulate-api.test.ts +0 -230
  316. package/tests/integration/validate-api.test.ts +0 -269
  317. package/tests/setup.ts +0 -15
  318. package/tests/unit/agent-simulator.test.ts +0 -575
  319. package/tests/unit/compliance-generator.test.ts +0 -374
  320. package/tests/unit/directory-service.test.ts +0 -272
  321. package/tests/unit/feed-analyzer.test.ts +0 -517
  322. package/tests/unit/lint-suggestions.test.ts +0 -423
  323. package/tests/unit/official-samples.test.ts +0 -211
  324. package/tests/unit/pdf-report.test.ts +0 -390
  325. package/tests/unit/sdk-validator.test.ts +0 -531
  326. package/tests/unit/security-scanner.test.ts +0 -410
  327. package/tests/unit/validation.test.ts +0 -390
  328. package/tsconfig.json +0 -20
  329. package/vercel.json +0 -34
  330. package/vitest.config.ts +0 -22
@@ -0,0 +1,20 @@
1
+ import type { AuthConfig } from '@auth/core';
2
+ /**
3
+ * Auth.js configuration for UCPtools
4
+ * Supports:
5
+ * - Email/password authentication
6
+ * - Google OAuth
7
+ * - GitHub OAuth
8
+ */
9
+ export declare function getAuthConfig(): AuthConfig;
10
+ declare module '@auth/core/types' {
11
+ interface Session {
12
+ user: {
13
+ id: string;
14
+ email: string;
15
+ name?: string | null;
16
+ image?: string | null;
17
+ };
18
+ }
19
+ }
20
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/auth/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAqG1C;AAGD,OAAO,QAAQ,kBAAkB,CAAC;IAChC,UAAU,OAAO;QACf,IAAI,EAAE;YACJ,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SACvB,CAAC;KACH;CACF"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getAuthConfig = getAuthConfig;
7
+ const drizzle_adapter_1 = require("@auth/drizzle-adapter");
8
+ const credentials_1 = __importDefault(require("@auth/core/providers/credentials"));
9
+ const google_1 = __importDefault(require("@auth/core/providers/google"));
10
+ const github_1 = __importDefault(require("@auth/core/providers/github"));
11
+ const bcryptjs_1 = require("bcryptjs");
12
+ const drizzle_orm_1 = require("drizzle-orm");
13
+ const index_js_1 = require("../db/index.js");
14
+ /**
15
+ * Auth.js configuration for UCPtools
16
+ * Supports:
17
+ * - Email/password authentication
18
+ * - Google OAuth
19
+ * - GitHub OAuth
20
+ */
21
+ function getAuthConfig() {
22
+ const db = (0, index_js_1.getDb)();
23
+ // Type assertion needed for PostgreSQL compatibility
24
+ // The DrizzleAdapter works with PostgreSQL at runtime
25
+ const adapter = (0, drizzle_adapter_1.DrizzleAdapter)(db, {
26
+ usersTable: index_js_1.users,
27
+ accountsTable: index_js_1.accounts,
28
+ sessionsTable: index_js_1.sessions,
29
+ verificationTokensTable: index_js_1.verificationTokens,
30
+ });
31
+ return {
32
+ adapter,
33
+ providers: [
34
+ // Email/Password authentication
35
+ (0, credentials_1.default)({
36
+ name: 'credentials',
37
+ credentials: {
38
+ email: { label: 'Email', type: 'email' },
39
+ password: { label: 'Password', type: 'password' },
40
+ },
41
+ async authorize(credentials) {
42
+ if (!credentials?.email || !credentials?.password) {
43
+ return null;
44
+ }
45
+ const email = credentials.email;
46
+ const password = credentials.password;
47
+ // Find user by email
48
+ const user = await db
49
+ .select()
50
+ .from(index_js_1.users)
51
+ .where((0, drizzle_orm_1.eq)(index_js_1.users.email, email))
52
+ .limit(1)
53
+ .then((rows) => rows[0]);
54
+ if (!user || !user.passwordHash) {
55
+ return null;
56
+ }
57
+ // Verify password
58
+ const isValidPassword = await (0, bcryptjs_1.compare)(password, user.passwordHash);
59
+ if (!isValidPassword) {
60
+ return null;
61
+ }
62
+ return {
63
+ id: user.id,
64
+ email: user.email,
65
+ name: user.name,
66
+ image: user.image,
67
+ };
68
+ },
69
+ }),
70
+ // Google OAuth
71
+ (0, google_1.default)({
72
+ clientId: process.env.GOOGLE_CLIENT_ID || '',
73
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET || '',
74
+ allowDangerousEmailAccountLinking: true,
75
+ }),
76
+ // GitHub OAuth
77
+ (0, github_1.default)({
78
+ clientId: process.env.GITHUB_CLIENT_ID || '',
79
+ clientSecret: process.env.GITHUB_CLIENT_SECRET || '',
80
+ allowDangerousEmailAccountLinking: true,
81
+ }),
82
+ ],
83
+ session: {
84
+ strategy: 'jwt',
85
+ maxAge: 30 * 24 * 60 * 60, // 30 days
86
+ },
87
+ pages: {
88
+ signIn: '/auth/signin',
89
+ signOut: '/auth/signout',
90
+ error: '/auth/error',
91
+ verifyRequest: '/auth/verify-request',
92
+ },
93
+ callbacks: {
94
+ async jwt({ token, user, account }) {
95
+ if (user) {
96
+ token.id = user.id;
97
+ }
98
+ if (account) {
99
+ token.provider = account.provider;
100
+ }
101
+ return token;
102
+ },
103
+ async session({ session, token }) {
104
+ if (session.user && token.id) {
105
+ session.user.id = token.id;
106
+ }
107
+ return session;
108
+ },
109
+ },
110
+ trustHost: true,
111
+ secret: process.env.AUTH_SECRET,
112
+ };
113
+ }
114
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/auth/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { getAuthConfig } from './config.js';
2
+ export { authService, AuthService } from './service.js';
3
+ export type { SignupInput, LoginInput, AuthResult, TokenResult } from './service.js';
4
+ export { requireAuth, optionalAuth, sessionMiddleware, requireTier, rateLimitByTier, csrfProtection, } from './middleware.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EACL,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.csrfProtection = exports.rateLimitByTier = exports.requireTier = exports.sessionMiddleware = exports.optionalAuth = exports.requireAuth = exports.AuthService = exports.authService = exports.getAuthConfig = void 0;
4
+ // Auth module exports
5
+ var config_js_1 = require("./config.js");
6
+ Object.defineProperty(exports, "getAuthConfig", { enumerable: true, get: function () { return config_js_1.getAuthConfig; } });
7
+ var service_js_1 = require("./service.js");
8
+ Object.defineProperty(exports, "authService", { enumerable: true, get: function () { return service_js_1.authService; } });
9
+ Object.defineProperty(exports, "AuthService", { enumerable: true, get: function () { return service_js_1.AuthService; } });
10
+ var middleware_js_1 = require("./middleware.js");
11
+ Object.defineProperty(exports, "requireAuth", { enumerable: true, get: function () { return middleware_js_1.requireAuth; } });
12
+ Object.defineProperty(exports, "optionalAuth", { enumerable: true, get: function () { return middleware_js_1.optionalAuth; } });
13
+ Object.defineProperty(exports, "sessionMiddleware", { enumerable: true, get: function () { return middleware_js_1.sessionMiddleware; } });
14
+ Object.defineProperty(exports, "requireTier", { enumerable: true, get: function () { return middleware_js_1.requireTier; } });
15
+ Object.defineProperty(exports, "rateLimitByTier", { enumerable: true, get: function () { return middleware_js_1.rateLimitByTier; } });
16
+ Object.defineProperty(exports, "csrfProtection", { enumerable: true, get: function () { return middleware_js_1.csrfProtection; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";;;AAAA,sBAAsB;AACtB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AACtB,2CAAwD;AAA/C,yGAAA,WAAW,OAAA;AAAE,yGAAA,WAAW,OAAA;AAEjC,iDAOyB;AANvB,4GAAA,WAAW,OAAA;AACX,6GAAA,YAAY,OAAA;AACZ,kHAAA,iBAAiB,OAAA;AACjB,4GAAA,WAAW,OAAA;AACX,gHAAA,eAAe,OAAA;AACf,+GAAA,cAAc,OAAA"}
@@ -0,0 +1,45 @@
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ import type { User } from '../db/schema.js';
3
+ declare global {
4
+ namespace Express {
5
+ interface Request {
6
+ user?: User;
7
+ session?: {
8
+ user: {
9
+ id: string;
10
+ email: string;
11
+ name?: string | null;
12
+ image?: string | null;
13
+ };
14
+ };
15
+ }
16
+ }
17
+ }
18
+ /**
19
+ * Middleware to require authentication
20
+ * Blocks request if user is not authenticated
21
+ */
22
+ export declare function requireAuth(req: Request, res: Response, next: NextFunction): void;
23
+ /**
24
+ * Middleware to optionally load user if authenticated
25
+ * Does not block request if user is not authenticated
26
+ */
27
+ export declare function optionalAuth(req: Request, res: Response, next: NextFunction): void;
28
+ /**
29
+ * Middleware to load session and user from request
30
+ * Should be applied globally
31
+ */
32
+ export declare function sessionMiddleware(req: Request, res: Response, next: NextFunction): Promise<void>;
33
+ /**
34
+ * Middleware to require specific subscription tiers
35
+ */
36
+ export declare function requireTier(...allowedTiers: string[]): (req: Request, res: Response, next: NextFunction) => Promise<void>;
37
+ /**
38
+ * Rate limiting middleware based on subscription tier
39
+ */
40
+ export declare function rateLimitByTier(): (req: Request, res: Response, next: NextFunction) => Promise<void>;
41
+ /**
42
+ * CSRF protection middleware
43
+ */
44
+ export declare function csrfProtection(req: Request, res: Response, next: NextFunction): void;
45
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM5C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE,IAAI,CAAC;YACZ,OAAO,CAAC,EAAE;gBACR,IAAI,EAAE;oBACJ,EAAE,EAAE,MAAM,CAAC;oBACX,KAAK,EAAE,MAAM,CAAC;oBACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;oBACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;iBACvB,CAAC;aACH,CAAC;SACH;KACF;CACF;AAoDD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAMjF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAGlF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,YAAY,EAAE,MAAM,EAAE,IACrC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAU9E;AAED;;GAEG;AACH,wBAAgB,eAAe,KAQf,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAK9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAwBpF"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireAuth = requireAuth;
4
+ exports.optionalAuth = optionalAuth;
5
+ exports.sessionMiddleware = sessionMiddleware;
6
+ exports.requireTier = requireTier;
7
+ exports.rateLimitByTier = rateLimitByTier;
8
+ exports.csrfProtection = csrfProtection;
9
+ const jose_1 = require("jose");
10
+ const core_1 = require("@auth/core");
11
+ const config_js_1 = require("./config.js");
12
+ const service_js_1 = require("./service.js");
13
+ // JWT secret - must match the one in auth routes
14
+ const JWT_SECRET = new TextEncoder().encode(process.env.JWT_SECRET || 'ucp-tools-jwt-secret-dev');
15
+ /**
16
+ * Extract session from request using Auth.js
17
+ */
18
+ async function getSessionFromRequest(req) {
19
+ try {
20
+ // Get session token from cookie or authorization header
21
+ const sessionToken = req.cookies?.['authjs.session-token'] ||
22
+ req.cookies?.['__Secure-authjs.session-token'] ||
23
+ extractBearerToken(req.headers.authorization);
24
+ if (!sessionToken) {
25
+ return null;
26
+ }
27
+ // For JWT sessions, decode the token
28
+ // This is a simplified version - in production you'd verify the JWT
29
+ const config = (0, config_js_1.getAuthConfig)();
30
+ // Create a mock request for Auth.js
31
+ const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
32
+ const headers = new Headers();
33
+ Object.entries(req.headers).forEach(([key, value]) => {
34
+ if (value) {
35
+ headers.set(key, Array.isArray(value) ? value.join(', ') : value);
36
+ }
37
+ });
38
+ const authRequest = new Request(url, {
39
+ method: req.method,
40
+ headers,
41
+ });
42
+ const response = await (0, core_1.Auth)(authRequest, config);
43
+ // Parse session from response if available
44
+ // This is a fallback - primarily we rely on the session cookie
45
+ return null;
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ function extractBearerToken(header) {
52
+ if (!header?.startsWith('Bearer ')) {
53
+ return null;
54
+ }
55
+ return header.slice(7);
56
+ }
57
+ /**
58
+ * Middleware to require authentication
59
+ * Blocks request if user is not authenticated
60
+ */
61
+ function requireAuth(req, res, next) {
62
+ if (!req.user) {
63
+ res.status(401).json({ error: 'Authentication required' });
64
+ return;
65
+ }
66
+ next();
67
+ }
68
+ /**
69
+ * Middleware to optionally load user if authenticated
70
+ * Does not block request if user is not authenticated
71
+ */
72
+ function optionalAuth(req, res, next) {
73
+ // User is loaded by sessionMiddleware if present
74
+ next();
75
+ }
76
+ /**
77
+ * Middleware to load session and user from request
78
+ * Should be applied globally
79
+ */
80
+ async function sessionMiddleware(req, res, next) {
81
+ try {
82
+ // Try to get token from Authorization header or session cookie
83
+ const bearerToken = extractBearerToken(req.headers.authorization);
84
+ const sessionToken = req.cookies?.['authjs.session-token'] ||
85
+ req.cookies?.['__Secure-authjs.session-token'];
86
+ const token = bearerToken || sessionToken;
87
+ if (token) {
88
+ try {
89
+ // Verify JWT token
90
+ const { payload } = await (0, jose_1.jwtVerify)(token, JWT_SECRET);
91
+ if (payload.userId && typeof payload.userId === 'string') {
92
+ // Load user from database
93
+ const user = await service_js_1.authService.getUserById(payload.userId);
94
+ if (user) {
95
+ req.user = user;
96
+ req.userId = user.id;
97
+ }
98
+ }
99
+ }
100
+ catch (jwtError) {
101
+ // Token verification failed - continue without auth
102
+ // This could be an expired token or invalid signature
103
+ }
104
+ }
105
+ // Also check for API key authentication
106
+ const apiKey = req.headers['x-api-key'];
107
+ if (apiKey && !req.user) {
108
+ // API key auth will be handled by a separate middleware
109
+ }
110
+ next();
111
+ }
112
+ catch (error) {
113
+ next();
114
+ }
115
+ }
116
+ /**
117
+ * Middleware to require specific subscription tiers
118
+ */
119
+ function requireTier(...allowedTiers) {
120
+ return async (req, res, next) => {
121
+ if (!req.user) {
122
+ res.status(401).json({ error: 'Authentication required' });
123
+ return;
124
+ }
125
+ // TODO: Load user subscription and check tier
126
+ // For now, allow all authenticated users
127
+ next();
128
+ };
129
+ }
130
+ /**
131
+ * Rate limiting middleware based on subscription tier
132
+ */
133
+ function rateLimitByTier() {
134
+ const limits = {
135
+ free: 100,
136
+ pro: 1000,
137
+ business: 5000,
138
+ agency: 25000,
139
+ };
140
+ return async (req, res, next) => {
141
+ // TODO: Implement rate limiting based on user's subscription tier
142
+ // For now, pass through
143
+ next();
144
+ };
145
+ }
146
+ /**
147
+ * CSRF protection middleware
148
+ */
149
+ function csrfProtection(req, res, next) {
150
+ // Skip CSRF for API routes with API key auth
151
+ if (req.headers['x-api-key']) {
152
+ next();
153
+ return;
154
+ }
155
+ // Skip for safe methods
156
+ if (['GET', 'HEAD', 'OPTIONS'].includes(req.method)) {
157
+ next();
158
+ return;
159
+ }
160
+ // Check CSRF token
161
+ const csrfToken = req.headers['x-csrf-token'] || req.body?._csrf;
162
+ const sessionCsrf = req.cookies?.['csrf-token'];
163
+ if (!csrfToken || csrfToken !== sessionCsrf) {
164
+ // For now, log warning but don't block
165
+ // In production, uncomment the next line:
166
+ // return res.status(403).json({ error: 'Invalid CSRF token' });
167
+ }
168
+ next();
169
+ }
170
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { User } from '../db/schema.js';
2
+ export interface SignupInput {
3
+ email: string;
4
+ password: string;
5
+ name?: string;
6
+ }
7
+ export interface LoginInput {
8
+ email: string;
9
+ password: string;
10
+ }
11
+ export interface AuthResult {
12
+ success: boolean;
13
+ user?: User;
14
+ error?: string;
15
+ }
16
+ export interface TokenResult {
17
+ success: boolean;
18
+ token?: string;
19
+ error?: string;
20
+ }
21
+ /**
22
+ * Auth service for user management
23
+ */
24
+ export declare class AuthService {
25
+ private db;
26
+ /**
27
+ * Register a new user with email and password
28
+ */
29
+ signup(input: SignupInput): Promise<AuthResult>;
30
+ /**
31
+ * Authenticate user with email and password
32
+ */
33
+ login(input: LoginInput): Promise<AuthResult>;
34
+ /**
35
+ * Generate email verification token
36
+ */
37
+ createVerificationToken(email: string): Promise<TokenResult>;
38
+ /**
39
+ * Verify email with token
40
+ */
41
+ verifyEmail(email: string, token: string): Promise<AuthResult>;
42
+ /**
43
+ * Create password reset token
44
+ */
45
+ createPasswordResetToken(email: string): Promise<TokenResult>;
46
+ /**
47
+ * Reset password with token
48
+ */
49
+ resetPassword(email: string, token: string, newPassword: string): Promise<AuthResult>;
50
+ /**
51
+ * Get user by ID
52
+ */
53
+ getUserById(id: string): Promise<User | null>;
54
+ /**
55
+ * Get user by email
56
+ */
57
+ getUserByEmail(email: string): Promise<User | null>;
58
+ /**
59
+ * Update user profile
60
+ */
61
+ updateProfile(userId: string, data: {
62
+ name?: string;
63
+ image?: string;
64
+ }): Promise<AuthResult>;
65
+ /**
66
+ * Change password for authenticated user
67
+ */
68
+ changePassword(userId: string, currentPassword: string, newPassword: string): Promise<AuthResult>;
69
+ /**
70
+ * Delete user account
71
+ */
72
+ deleteAccount(userId: string): Promise<{
73
+ success: boolean;
74
+ error?: string;
75
+ }>;
76
+ private isValidEmail;
77
+ private validatePassword;
78
+ }
79
+ export declare const authService: AuthService;
80
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,iBAAiB,CAAC;AAKrD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAW;IAErB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAiDrD;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA4BnD;;OAEG;IACG,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAalE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmCpE;;OAEG;IACG,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgCnE;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwC3F;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAgBnD;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAWzD;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,UAAU,CAAC;IAmBtB;;OAEG;IACG,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC;IA0BtB;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAOlF,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,gBAAgB;CAezB;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC"}