@db3.ai/app 0.1.0-beta.1

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 (1024) hide show
  1. package/LICENSE +31 -0
  2. package/README.md +241 -0
  3. package/agent-instructions.md +69 -0
  4. package/bin/db3-agents.mjs +140 -0
  5. package/bin/db3.mjs +11 -0
  6. package/dist/ai/AIErrors.d.ts +33 -0
  7. package/dist/ai/AIErrors.js +43 -0
  8. package/dist/ai/AIFailover.d.ts +25 -0
  9. package/dist/ai/AIFailover.js +96 -0
  10. package/dist/ai/AIProviders.d.ts +35 -0
  11. package/dist/ai/AIProviders.js +197 -0
  12. package/dist/ai/AIQuotaDeferredError.d.ts +19 -0
  13. package/dist/ai/AIQuotaDeferredError.js +25 -0
  14. package/dist/ai/AIRateLimiter.d.ts +103 -0
  15. package/dist/ai/AIRateLimiter.js +690 -0
  16. package/dist/ai/Agent.d.ts +633 -0
  17. package/dist/ai/Agent.js +2976 -0
  18. package/dist/ai/AgentHistory.d.ts +11 -0
  19. package/dist/ai/AgentHistory.js +495 -0
  20. package/dist/ai/AgentRunJob.d.ts +21 -0
  21. package/dist/ai/AgentRunJob.js +53 -0
  22. package/dist/ai/Ai.d.ts +375 -0
  23. package/dist/ai/Ai.js +1771 -0
  24. package/dist/ai/AiConversation.d.ts +17 -0
  25. package/dist/ai/AiConversation.js +38 -0
  26. package/dist/ai/AiExecutionContext.d.ts +7 -0
  27. package/dist/ai/AiExecutionContext.js +16 -0
  28. package/dist/ai/AiMessage.d.ts +43 -0
  29. package/dist/ai/AiMessage.js +105 -0
  30. package/dist/ai/AiRateLimitBucket.d.ts +69 -0
  31. package/dist/ai/AiRateLimitBucket.js +138 -0
  32. package/dist/ai/AiRateLimitReservation.d.ts +56 -0
  33. package/dist/ai/AiRateLimitReservation.js +101 -0
  34. package/dist/ai/AiRequest.d.ts +78 -0
  35. package/dist/ai/AiRequest.js +384 -0
  36. package/dist/ai/Estimates.d.ts +26 -0
  37. package/dist/ai/Estimates.js +34 -0
  38. package/dist/ai/Models.d.ts +88 -0
  39. package/dist/ai/Models.js +328 -0
  40. package/dist/ai/OpenAIProviderError.d.ts +30 -0
  41. package/dist/ai/OpenAIProviderError.js +77 -0
  42. package/dist/ai/OpenAIQuotaRetry.d.ts +27 -0
  43. package/dist/ai/OpenAIQuotaRetry.js +144 -0
  44. package/dist/ai/ProviderCosts.d.ts +55 -0
  45. package/dist/ai/ProviderCosts.js +108 -0
  46. package/dist/ai/ResponsesProviderCall.d.ts +13 -0
  47. package/dist/ai/ResponsesProviderCall.js +29 -0
  48. package/dist/ai/agentCitations.d.ts +27 -0
  49. package/dist/ai/agentCitations.js +153 -0
  50. package/dist/ai/contracts/AI.d.ts +347 -0
  51. package/dist/ai/contracts/AI.js +13 -0
  52. package/dist/ai/contracts/Agent.d.ts +476 -0
  53. package/dist/ai/contracts/Agent.js +1 -0
  54. package/dist/ai/contracts/AiRequestRunCostSummary.d.ts +31 -0
  55. package/dist/ai/contracts/AiRequestRunCostSummary.js +1 -0
  56. package/dist/ai/contracts/Pricing.d.ts +88 -0
  57. package/dist/ai/contracts/Pricing.js +1 -0
  58. package/dist/ai/contracts/Providers.d.ts +68 -0
  59. package/dist/ai/contracts/Providers.js +1 -0
  60. package/dist/ai/contracts/QuotaRetry.d.ts +38 -0
  61. package/dist/ai/contracts/QuotaRetry.js +1 -0
  62. package/dist/ai/contracts/RateLimits.d.ts +45 -0
  63. package/dist/ai/contracts/RateLimits.js +1 -0
  64. package/dist/ai/contracts/ResponsesProviderCall.d.ts +28 -0
  65. package/dist/ai/contracts/ResponsesProviderCall.js +1 -0
  66. package/dist/ai/contracts/index.d.ts +8 -0
  67. package/dist/ai/contracts/index.js +8 -0
  68. package/dist/ai/index.d.ts +27 -0
  69. package/dist/ai/index.js +27 -0
  70. package/dist/ai/registry.d.ts +28 -0
  71. package/dist/ai/registry.js +49 -0
  72. package/dist/ai/sdkNodeCompatibility.d.ts +76 -0
  73. package/dist/ai/toolCallRecovery.d.ts +16 -0
  74. package/dist/ai/toolCallRecovery.js +71 -0
  75. package/dist/ai/toolHelpers.d.ts +65 -0
  76. package/dist/ai/toolHelpers.js +106 -0
  77. package/dist/auth/Auth.d.ts +641 -0
  78. package/dist/auth/Auth.js +927 -0
  79. package/dist/auth/AuthProvider.d.ts +104 -0
  80. package/dist/auth/AuthProvider.js +185 -0
  81. package/dist/auth/AuthToken.d.ts +123 -0
  82. package/dist/auth/AuthToken.js +156 -0
  83. package/dist/auth/PasswordResetToken.d.ts +33 -0
  84. package/dist/auth/PasswordResetToken.js +64 -0
  85. package/dist/auth/UserIdentity.d.ts +46 -0
  86. package/dist/auth/UserIdentity.js +72 -0
  87. package/dist/auth/contracts/AuthProviderDriver.d.ts +94 -0
  88. package/dist/auth/contracts/AuthProviderDriver.js +1 -0
  89. package/dist/auth/contracts/index.d.ts +1 -0
  90. package/dist/auth/contracts/index.js +1 -0
  91. package/dist/auth/index.d.ts +8 -0
  92. package/dist/auth/index.js +8 -0
  93. package/dist/auth/passwordHash.d.ts +26 -0
  94. package/dist/auth/passwordHash.js +96 -0
  95. package/dist/auth/providers/GoogleAuthProvider.d.ts +135 -0
  96. package/dist/auth/providers/GoogleAuthProvider.js +305 -0
  97. package/dist/auth/providers/PasswordAuthProvider.d.ts +115 -0
  98. package/dist/auth/providers/PasswordAuthProvider.js +195 -0
  99. package/dist/auth/providers/index.d.ts +3 -0
  100. package/dist/auth/providers/index.js +3 -0
  101. package/dist/auth/providers/resolveAuthProviders.d.ts +29 -0
  102. package/dist/auth/providers/resolveAuthProviders.js +111 -0
  103. package/dist/cache/Cache.d.ts +67 -0
  104. package/dist/cache/Cache.js +115 -0
  105. package/dist/cache/contracts/CacheDriver.d.ts +10 -0
  106. package/dist/cache/contracts/CacheDriver.js +1 -0
  107. package/dist/cache/contracts/CacheOperations.d.ts +26 -0
  108. package/dist/cache/contracts/CacheOperations.js +1 -0
  109. package/dist/cache/contracts/CacheOptions.d.ts +51 -0
  110. package/dist/cache/contracts/CacheOptions.js +1 -0
  111. package/dist/cache/contracts/CacheRepository.d.ts +45 -0
  112. package/dist/cache/contracts/CacheRepository.js +1 -0
  113. package/dist/cache/contracts/index.d.ts +4 -0
  114. package/dist/cache/contracts/index.js +4 -0
  115. package/dist/cache/drivers/CacheManagerDriver.d.ts +55 -0
  116. package/dist/cache/drivers/CacheManagerDriver.js +68 -0
  117. package/dist/cache/drivers/createCacheDriver.d.ts +8 -0
  118. package/dist/cache/drivers/createCacheDriver.js +147 -0
  119. package/dist/cache/index.d.ts +2 -0
  120. package/dist/cache/index.js +2 -0
  121. package/dist/cli/Cli.d.ts +17 -0
  122. package/dist/cli/Cli.js +120 -0
  123. package/dist/cli/commands/repl.d.ts +9 -0
  124. package/dist/cli/commands/repl.js +27 -0
  125. package/dist/cli/contracts/CliCommand.d.ts +30 -0
  126. package/dist/cli/contracts/CliCommand.js +1 -0
  127. package/dist/cli/contracts/CliConfig.d.ts +9 -0
  128. package/dist/cli/contracts/CliConfig.js +1 -0
  129. package/dist/cli/contracts/CliOptions.d.ts +13 -0
  130. package/dist/cli/contracts/CliOptions.js +1 -0
  131. package/dist/cli/contracts/CommandDefinition.d.ts +18 -0
  132. package/dist/cli/contracts/CommandDefinition.js +1 -0
  133. package/dist/cli/contracts/ReplOptions.d.ts +11 -0
  134. package/dist/cli/contracts/ReplOptions.js +1 -0
  135. package/dist/cli/contracts/index.d.ts +5 -0
  136. package/dist/cli/contracts/index.js +1 -0
  137. package/dist/cli/defineCommand.d.ts +10 -0
  138. package/dist/cli/defineCommand.js +25 -0
  139. package/dist/cli/index.d.ts +5 -0
  140. package/dist/cli/index.js +5 -0
  141. package/dist/cli/runDb3.d.ts +11 -0
  142. package/dist/cli/runDb3.js +70 -0
  143. package/dist/cli/runRepl.d.ts +12 -0
  144. package/dist/cli/runRepl.js +54 -0
  145. package/dist/config/Config.d.ts +48 -0
  146. package/dist/config/Config.js +80 -0
  147. package/dist/config/env.d.ts +26 -0
  148. package/dist/config/env.js +117 -0
  149. package/dist/config/index.d.ts +2 -0
  150. package/dist/config/index.js +2 -0
  151. package/dist/db/ActiveProjection.d.ts +90 -0
  152. package/dist/db/ActiveProjection.js +134 -0
  153. package/dist/db/ActiveQueryBuilder.d.ts +268 -0
  154. package/dist/db/ActiveQueryBuilder.js +621 -0
  155. package/dist/db/ActiveRecord.d.ts +483 -0
  156. package/dist/db/ActiveRecord.js +765 -0
  157. package/dist/db/Database.d.ts +277 -0
  158. package/dist/db/Database.js +827 -0
  159. package/dist/db/FieldType.d.ts +540 -0
  160. package/dist/db/FieldType.js +706 -0
  161. package/dist/db/SoftDeletes.d.ts +30 -0
  162. package/dist/db/SoftDeletes.js +93 -0
  163. package/dist/db/commands/check.d.ts +6 -0
  164. package/dist/db/commands/check.js +8 -0
  165. package/dist/db/commands/index.d.ts +6 -0
  166. package/dist/db/commands/index.js +17 -0
  167. package/dist/db/commands/makeMigration.d.ts +7 -0
  168. package/dist/db/commands/makeMigration.js +9 -0
  169. package/dist/db/commands/migrate.d.ts +6 -0
  170. package/dist/db/commands/migrate.js +8 -0
  171. package/dist/db/connection.d.ts +10 -0
  172. package/dist/db/connection.js +55 -0
  173. package/dist/db/contracts/ActiveRecordDefinition.d.ts +64 -0
  174. package/dist/db/contracts/ActiveRecordDefinition.js +1 -0
  175. package/dist/db/contracts/DatabaseBackup.d.ts +7 -0
  176. package/dist/db/contracts/DatabaseBackup.js +1 -0
  177. package/dist/db/contracts/DatabaseMigrationsConfig.d.ts +9 -0
  178. package/dist/db/contracts/DatabaseMigrationsConfig.js +1 -0
  179. package/dist/db/contracts/index.d.ts +3 -0
  180. package/dist/db/contracts/index.js +3 -0
  181. package/dist/db/dialects/columnTypes.d.ts +20 -0
  182. package/dist/db/dialects/columnTypes.js +67 -0
  183. package/dist/db/dialects/index.d.ts +6 -0
  184. package/dist/db/dialects/index.js +6 -0
  185. package/dist/db/dialects/mariadb.d.ts +7 -0
  186. package/dist/db/dialects/mariadb.js +35 -0
  187. package/dist/db/dialects/mysql.d.ts +14 -0
  188. package/dist/db/dialects/mysql.js +203 -0
  189. package/dist/db/dialects/postgres.d.ts +5 -0
  190. package/dist/db/dialects/postgres.js +106 -0
  191. package/dist/db/dialects/resolveDialect.d.ts +14 -0
  192. package/dist/db/dialects/resolveDialect.js +57 -0
  193. package/dist/db/dialects/types.d.ts +44 -0
  194. package/dist/db/dialects/types.js +1 -0
  195. package/dist/db/errors.d.ts +15 -0
  196. package/dist/db/errors.js +20 -0
  197. package/dist/db/fields/BooleanField.d.ts +29 -0
  198. package/dist/db/fields/BooleanField.js +89 -0
  199. package/dist/db/fields/CharUuidField.d.ts +29 -0
  200. package/dist/db/fields/CharUuidField.js +63 -0
  201. package/dist/db/fields/ChoiceStringField.d.ts +25 -0
  202. package/dist/db/fields/ChoiceStringField.js +58 -0
  203. package/dist/db/fields/DecimalField.d.ts +20 -0
  204. package/dist/db/fields/DecimalField.js +105 -0
  205. package/dist/db/fields/EmailField.d.ts +31 -0
  206. package/dist/db/fields/EmailField.js +52 -0
  207. package/dist/db/fields/EncryptedJsonField.d.ts +82 -0
  208. package/dist/db/fields/EncryptedJsonField.js +169 -0
  209. package/dist/db/fields/IntegerField.d.ts +35 -0
  210. package/dist/db/fields/IntegerField.js +139 -0
  211. package/dist/db/fields/JsonField.d.ts +40 -0
  212. package/dist/db/fields/JsonField.js +79 -0
  213. package/dist/db/fields/JsonStringField.d.ts +21 -0
  214. package/dist/db/fields/JsonStringField.js +41 -0
  215. package/dist/db/fields/LinkField.d.ts +180 -0
  216. package/dist/db/fields/LinkField.js +359 -0
  217. package/dist/db/fields/PasswordField.d.ts +93 -0
  218. package/dist/db/fields/PasswordField.js +180 -0
  219. package/dist/db/fields/StringField.d.ts +43 -0
  220. package/dist/db/fields/StringField.js +102 -0
  221. package/dist/db/fields/StringListField.d.ts +54 -0
  222. package/dist/db/fields/StringListField.js +124 -0
  223. package/dist/db/fields/TextField.d.ts +25 -0
  224. package/dist/db/fields/TextField.js +44 -0
  225. package/dist/db/fields/TimestampField.d.ts +47 -0
  226. package/dist/db/fields/TimestampField.js +97 -0
  227. package/dist/db/fields/UlidField.d.ts +69 -0
  228. package/dist/db/fields/UlidField.js +114 -0
  229. package/dist/db/fields/UrlField.d.ts +30 -0
  230. package/dist/db/fields/UrlField.js +61 -0
  231. package/dist/db/fields/VectorField.d.ts +64 -0
  232. package/dist/db/fields/VectorField.js +180 -0
  233. package/dist/db/fields/createField.d.ts +2 -0
  234. package/dist/db/fields/createField.js +13 -0
  235. package/dist/db/fields/field.d.ts +36 -0
  236. package/dist/db/fields/field.js +101 -0
  237. package/dist/db/fields/index.d.ts +18 -0
  238. package/dist/db/fields/index.js +18 -0
  239. package/dist/db/fields/resolveFields.d.ts +17 -0
  240. package/dist/db/fields/resolveFields.js +38 -0
  241. package/dist/db/index.d.ts +13 -0
  242. package/dist/db/index.js +13 -0
  243. package/dist/db/migrations/DatabaseMigrationManager.d.ts +57 -0
  244. package/dist/db/migrations/DatabaseMigrationManager.js +589 -0
  245. package/dist/db/migrations/DatabaseSchemaInspector.d.ts +19 -0
  246. package/dist/db/migrations/DatabaseSchemaInspector.js +384 -0
  247. package/dist/db/migrations/KnexMigrationRenderer.d.ts +11 -0
  248. package/dist/db/migrations/KnexMigrationRenderer.js +390 -0
  249. package/dist/db/migrations/ModelSchemaCollector.d.ts +29 -0
  250. package/dist/db/migrations/ModelSchemaCollector.js +183 -0
  251. package/dist/db/migrations/SchemaDiffer.d.ts +13 -0
  252. package/dist/db/migrations/SchemaDiffer.js +427 -0
  253. package/dist/db/migrations/SchemaNames.d.ts +27 -0
  254. package/dist/db/migrations/SchemaNames.js +46 -0
  255. package/dist/db/migrations/SchemaSnapshotSerializer.d.ts +30 -0
  256. package/dist/db/migrations/SchemaSnapshotSerializer.js +49 -0
  257. package/dist/db/migrations/contracts/DatabaseMigration.d.ts +118 -0
  258. package/dist/db/migrations/contracts/DatabaseMigration.js +1 -0
  259. package/dist/db/migrations/contracts/SchemaChange.d.ts +83 -0
  260. package/dist/db/migrations/contracts/SchemaChange.js +1 -0
  261. package/dist/db/migrations/contracts/SchemaSnapshot.d.ts +94 -0
  262. package/dist/db/migrations/contracts/SchemaSnapshot.js +1 -0
  263. package/dist/db/migrations/contracts/index.d.ts +3 -0
  264. package/dist/db/migrations/contracts/index.js +3 -0
  265. package/dist/db/migrations/errors.d.ts +35 -0
  266. package/dist/db/migrations/errors.js +45 -0
  267. package/dist/db/migrations/index.d.ts +10 -0
  268. package/dist/db/migrations/index.js +10 -0
  269. package/dist/db/migrations/promoteDestructiveSchemaChanges.d.ts +19 -0
  270. package/dist/db/migrations/promoteDestructiveSchemaChanges.js +102 -0
  271. package/dist/db/queryMonitor.d.ts +142 -0
  272. package/dist/db/queryMonitor.js +357 -0
  273. package/dist/db/sqlErrors.d.ts +11 -0
  274. package/dist/db/sqlErrors.js +17 -0
  275. package/dist/db/test/db.d.ts +11 -0
  276. package/dist/db/test/db.js +109 -0
  277. package/dist/devtools/HttpEventDispatcher.d.ts +19 -0
  278. package/dist/devtools/HttpEventDispatcher.js +180 -0
  279. package/dist/devtools/contracts/DevtoolsEventDispatcher.d.ts +53 -0
  280. package/dist/devtools/contracts/DevtoolsEventDispatcher.js +1 -0
  281. package/dist/devtools/contracts/index.d.ts +1 -0
  282. package/dist/devtools/contracts/index.js +1 -0
  283. package/dist/devtools/environment.d.ts +10 -0
  284. package/dist/devtools/environment.js +14 -0
  285. package/dist/devtools/index.d.ts +3 -0
  286. package/dist/devtools/index.js +3 -0
  287. package/dist/events/Events.d.ts +70 -0
  288. package/dist/events/Events.js +126 -0
  289. package/dist/events/contracts/EventConstructor.d.ts +12 -0
  290. package/dist/events/contracts/EventConstructor.js +1 -0
  291. package/dist/events/contracts/EventListener.d.ts +6 -0
  292. package/dist/events/contracts/EventListener.js +1 -0
  293. package/dist/events/contracts/EventUnsubscribe.d.ts +4 -0
  294. package/dist/events/contracts/EventUnsubscribe.js +1 -0
  295. package/dist/events/contracts/index.d.ts +3 -0
  296. package/dist/events/contracts/index.js +3 -0
  297. package/dist/events/index.d.ts +2 -0
  298. package/dist/events/index.js +2 -0
  299. package/dist/flows/FlowBlockRegistry.d.ts +39 -0
  300. package/dist/flows/FlowBlockRegistry.js +66 -0
  301. package/dist/flows/FlowCompiler.d.ts +26 -0
  302. package/dist/flows/FlowCompiler.js +488 -0
  303. package/dist/flows/FlowDefinitionError.d.ts +21 -0
  304. package/dist/flows/FlowDefinitionError.js +16 -0
  305. package/dist/flows/FlowStepJob.d.ts +28 -0
  306. package/dist/flows/FlowStepJob.js +31 -0
  307. package/dist/flows/FlowValueValidator.d.ts +32 -0
  308. package/dist/flows/FlowValueValidator.js +105 -0
  309. package/dist/flows/Flows.d.ts +102 -0
  310. package/dist/flows/Flows.js +871 -0
  311. package/dist/flows/blocks/FlowInput.d.ts +10 -0
  312. package/dist/flows/blocks/FlowInput.js +29 -0
  313. package/dist/flows/blocks/FlowOutput.d.ts +10 -0
  314. package/dist/flows/blocks/FlowOutput.js +29 -0
  315. package/dist/flows/blocks/Subflow.d.ts +10 -0
  316. package/dist/flows/blocks/Subflow.js +21 -0
  317. package/dist/flows/blocks/index.d.ts +6 -0
  318. package/dist/flows/blocks/index.js +8 -0
  319. package/dist/flows/constants.d.ts +55 -0
  320. package/dist/flows/constants.js +47 -0
  321. package/dist/flows/contracts/FlowBlock.d.ts +64 -0
  322. package/dist/flows/contracts/FlowBlock.js +1 -0
  323. package/dist/flows/contracts/FlowCompiler.d.ts +30 -0
  324. package/dist/flows/contracts/FlowCompiler.js +1 -0
  325. package/dist/flows/contracts/FlowDefinition.d.ts +118 -0
  326. package/dist/flows/contracts/FlowDefinition.js +1 -0
  327. package/dist/flows/contracts/FlowDefinitionStore.d.ts +47 -0
  328. package/dist/flows/contracts/FlowDefinitionStore.js +1 -0
  329. package/dist/flows/contracts/FlowRun.d.ts +40 -0
  330. package/dist/flows/contracts/FlowRun.js +1 -0
  331. package/dist/flows/contracts/FlowValue.d.ts +49 -0
  332. package/dist/flows/contracts/FlowValue.js +1 -0
  333. package/dist/flows/contracts/FlowsService.d.ts +37 -0
  334. package/dist/flows/contracts/FlowsService.js +1 -0
  335. package/dist/flows/contracts/index.d.ts +7 -0
  336. package/dist/flows/contracts/index.js +7 -0
  337. package/dist/flows/defineBlock.d.ts +18 -0
  338. package/dist/flows/defineBlock.js +19 -0
  339. package/dist/flows/drivers/FileFlowDefinitionStore.d.ts +53 -0
  340. package/dist/flows/drivers/FileFlowDefinitionStore.js +313 -0
  341. package/dist/flows/drivers/index.d.ts +1 -0
  342. package/dist/flows/drivers/index.js +1 -0
  343. package/dist/flows/errors.d.ts +8 -0
  344. package/dist/flows/errors.js +19 -0
  345. package/dist/flows/index.d.ts +13 -0
  346. package/dist/flows/index.js +13 -0
  347. package/dist/flows/models/FlowRun.d.ts +55 -0
  348. package/dist/flows/models/FlowRun.js +126 -0
  349. package/dist/flows/models/FlowRunEvent.d.ts +41 -0
  350. package/dist/flows/models/FlowRunEvent.js +85 -0
  351. package/dist/flows/models/FlowStepRun.d.ts +56 -0
  352. package/dist/flows/models/FlowStepRun.js +137 -0
  353. package/dist/flows/models/index.d.ts +10 -0
  354. package/dist/flows/models/index.js +14 -0
  355. package/dist/index.d.ts +25 -0
  356. package/dist/index.js +16 -0
  357. package/dist/logging/Log.d.ts +66 -0
  358. package/dist/logging/Log.js +79 -0
  359. package/dist/logging/contracts/HttpExchange.d.ts +50 -0
  360. package/dist/logging/contracts/HttpExchange.js +1 -0
  361. package/dist/logging/contracts/Logger.d.ts +41 -0
  362. package/dist/logging/contracts/Logger.js +1 -0
  363. package/dist/logging/contracts/LoggerDriver.d.ts +16 -0
  364. package/dist/logging/contracts/LoggerDriver.js +1 -0
  365. package/dist/logging/contracts/LoggingOptions.d.ts +49 -0
  366. package/dist/logging/contracts/LoggingOptions.js +1 -0
  367. package/dist/logging/contracts/index.d.ts +4 -0
  368. package/dist/logging/contracts/index.js +4 -0
  369. package/dist/logging/drivers/PinoLoggerDriver.d.ts +24 -0
  370. package/dist/logging/drivers/PinoLoggerDriver.js +291 -0
  371. package/dist/logging/drivers/index.d.ts +1 -0
  372. package/dist/logging/drivers/index.js +1 -0
  373. package/dist/logging/index.d.ts +3 -0
  374. package/dist/logging/index.js +3 -0
  375. package/dist/logging/transports/DevtoolsLogTransport.d.ts +35 -0
  376. package/dist/logging/transports/DevtoolsLogTransport.js +96 -0
  377. package/dist/mail/Mail.d.ts +62 -0
  378. package/dist/mail/Mail.js +98 -0
  379. package/dist/mail/index.d.ts +4 -0
  380. package/dist/mail/index.js +4 -0
  381. package/dist/mail/transports/FileMailTransport.d.ts +12 -0
  382. package/dist/mail/transports/FileMailTransport.js +41 -0
  383. package/dist/mail/transports/MailgunTransport.d.ts +22 -0
  384. package/dist/mail/transports/MailgunTransport.js +57 -0
  385. package/dist/mail/transports/ResendTransport.d.ts +14 -0
  386. package/dist/mail/transports/ResendTransport.js +55 -0
  387. package/dist/media/MediaFile.d.ts +48 -0
  388. package/dist/media/MediaFile.js +104 -0
  389. package/dist/media/MediaItem.d.ts +47 -0
  390. package/dist/media/MediaItem.js +106 -0
  391. package/dist/media/MediaLibrary.d.ts +42 -0
  392. package/dist/media/MediaLibrary.js +94 -0
  393. package/dist/media/MediaManager.d.ts +159 -0
  394. package/dist/media/MediaManager.js +754 -0
  395. package/dist/media/constants.d.ts +27 -0
  396. package/dist/media/constants.js +19 -0
  397. package/dist/media/contracts/MediaOptions.d.ts +8 -0
  398. package/dist/media/contracts/MediaOptions.js +1 -0
  399. package/dist/media/contracts/index.d.ts +1 -0
  400. package/dist/media/contracts/index.js +1 -0
  401. package/dist/media/image/ImageReconstructionError.d.ts +15 -0
  402. package/dist/media/image/ImageReconstructionError.js +18 -0
  403. package/dist/media/image/ImageVariantRenderer.d.ts +44 -0
  404. package/dist/media/image/ImageVariantRenderer.js +337 -0
  405. package/dist/media/image/ImageVariantRequest.d.ts +28 -0
  406. package/dist/media/image/ImageVariantRequest.js +55 -0
  407. package/dist/media/image/contracts/ImageProcessor.d.ts +46 -0
  408. package/dist/media/image/contracts/ImageProcessor.js +1 -0
  409. package/dist/media/image/contracts/ImageVariant.d.ts +31 -0
  410. package/dist/media/image/contracts/ImageVariant.js +7 -0
  411. package/dist/media/image/contracts/ImageVariantCacheOptions.d.ts +20 -0
  412. package/dist/media/image/contracts/ImageVariantCacheOptions.js +1 -0
  413. package/dist/media/image/contracts/index.d.ts +3 -0
  414. package/dist/media/image/contracts/index.js +3 -0
  415. package/dist/media/image/index.d.ts +5 -0
  416. package/dist/media/image/index.js +5 -0
  417. package/dist/media/image/processors/SharpImageProcessor.d.ts +25 -0
  418. package/dist/media/image/processors/SharpImageProcessor.js +112 -0
  419. package/dist/media/image/processors/index.d.ts +1 -0
  420. package/dist/media/image/processors/index.js +1 -0
  421. package/dist/media/index.d.ts +8 -0
  422. package/dist/media/index.js +8 -0
  423. package/dist/media/types.d.ts +129 -0
  424. package/dist/media/types.js +1 -0
  425. package/dist/queue/FailedJob.d.ts +31 -0
  426. package/dist/queue/FailedJob.js +41 -0
  427. package/dist/queue/Queue.d.ts +208 -0
  428. package/dist/queue/Queue.js +685 -0
  429. package/dist/queue/QueueEvents.d.ts +31 -0
  430. package/dist/queue/QueueEvents.js +49 -0
  431. package/dist/queue/QueueRetryLaterError.d.ts +23 -0
  432. package/dist/queue/QueueRetryLaterError.js +34 -0
  433. package/dist/queue/QueueWorker.d.ts +72 -0
  434. package/dist/queue/QueueWorker.js +236 -0
  435. package/dist/queue/QueueableJob.d.ts +109 -0
  436. package/dist/queue/QueueableJob.js +137 -0
  437. package/dist/queue/QueuedJob.d.ts +31 -0
  438. package/dist/queue/QueuedJob.js +52 -0
  439. package/dist/queue/RetryPolicy.d.ts +51 -0
  440. package/dist/queue/RetryPolicy.js +84 -0
  441. package/dist/queue/commands/index.d.ts +4 -0
  442. package/dist/queue/commands/index.js +11 -0
  443. package/dist/queue/commands/makeJob.d.ts +7 -0
  444. package/dist/queue/commands/makeJob.js +9 -0
  445. package/dist/queue/console.d.ts +60 -0
  446. package/dist/queue/console.js +348 -0
  447. package/dist/queue/contracts/CreateJob.d.ts +12 -0
  448. package/dist/queue/contracts/CreateJob.js +1 -0
  449. package/dist/queue/contracts/QueueDriver.d.ts +122 -0
  450. package/dist/queue/contracts/QueueDriver.js +1 -0
  451. package/dist/queue/contracts/QueueEvents.d.ts +61 -0
  452. package/dist/queue/contracts/QueueEvents.js +1 -0
  453. package/dist/queue/contracts/QueuePayload.d.ts +136 -0
  454. package/dist/queue/contracts/QueuePayload.js +1 -0
  455. package/dist/queue/contracts/QueueRetry.d.ts +43 -0
  456. package/dist/queue/contracts/QueueRetry.js +1 -0
  457. package/dist/queue/contracts/QueueService.d.ts +199 -0
  458. package/dist/queue/contracts/QueueService.js +1 -0
  459. package/dist/queue/contracts/QueueWorkerLifecycle.d.ts +65 -0
  460. package/dist/queue/contracts/QueueWorkerLifecycle.js +1 -0
  461. package/dist/queue/contracts/QueueableJob.d.ts +50 -0
  462. package/dist/queue/contracts/QueueableJob.js +1 -0
  463. package/dist/queue/contracts/RedisQueueDriver.d.ts +37 -0
  464. package/dist/queue/contracts/RedisQueueDriver.js +1 -0
  465. package/dist/queue/contracts/index.d.ts +9 -0
  466. package/dist/queue/contracts/index.js +9 -0
  467. package/dist/queue/createJob.d.ts +18 -0
  468. package/dist/queue/createJob.js +52 -0
  469. package/dist/queue/drivers/DatabaseQueueDriver.d.ts +83 -0
  470. package/dist/queue/drivers/DatabaseQueueDriver.js +393 -0
  471. package/dist/queue/drivers/RedisQueueDriver.d.ts +102 -0
  472. package/dist/queue/drivers/RedisQueueDriver.js +641 -0
  473. package/dist/queue/index.d.ts +13 -0
  474. package/dist/queue/index.js +13 -0
  475. package/dist/queue/queueMonitor.d.ts +133 -0
  476. package/dist/queue/queueMonitor.js +238 -0
  477. package/dist/scheduler/ScheduledCall.d.ts +25 -0
  478. package/dist/scheduler/ScheduledCall.js +31 -0
  479. package/dist/scheduler/ScheduledEvent.d.ts +74 -0
  480. package/dist/scheduler/ScheduledEvent.js +115 -0
  481. package/dist/scheduler/ScheduledJob.d.ts +34 -0
  482. package/dist/scheduler/ScheduledJob.js +50 -0
  483. package/dist/scheduler/ScheduledOccurrence.d.ts +74 -0
  484. package/dist/scheduler/ScheduledOccurrence.js +194 -0
  485. package/dist/scheduler/ScheduledOccurrenceRecorder.d.ts +34 -0
  486. package/dist/scheduler/ScheduledOccurrenceRecorder.js +106 -0
  487. package/dist/scheduler/Scheduler.d.ts +76 -0
  488. package/dist/scheduler/Scheduler.js +186 -0
  489. package/dist/scheduler/SchedulerWorker.d.ts +37 -0
  490. package/dist/scheduler/SchedulerWorker.js +119 -0
  491. package/dist/scheduler/console.d.ts +18 -0
  492. package/dist/scheduler/console.js +288 -0
  493. package/dist/scheduler/constants.d.ts +13 -0
  494. package/dist/scheduler/constants.js +23 -0
  495. package/dist/scheduler/contracts/Scheduler.d.ts +104 -0
  496. package/dist/scheduler/contracts/Scheduler.js +1 -0
  497. package/dist/scheduler/contracts/SchedulerConsole.d.ts +37 -0
  498. package/dist/scheduler/contracts/SchedulerConsole.js +1 -0
  499. package/dist/scheduler/contracts/SchedulerWorker.d.ts +18 -0
  500. package/dist/scheduler/contracts/SchedulerWorker.js +1 -0
  501. package/dist/scheduler/contracts/index.d.ts +3 -0
  502. package/dist/scheduler/contracts/index.js +3 -0
  503. package/dist/scheduler/index.d.ts +9 -0
  504. package/dist/scheduler/index.js +9 -0
  505. package/dist/scheduler/scheduleTime.d.ts +30 -0
  506. package/dist/scheduler/scheduleTime.js +64 -0
  507. package/dist/security/Security.d.ts +60 -0
  508. package/dist/security/Security.js +252 -0
  509. package/dist/security/SecurityError.d.ts +13 -0
  510. package/dist/security/SecurityError.js +16 -0
  511. package/dist/security/contracts/SecurityOptions.d.ts +17 -0
  512. package/dist/security/contracts/SecurityOptions.js +1 -0
  513. package/dist/security/contracts/SecurityPayload.d.ts +13 -0
  514. package/dist/security/contracts/SecurityPayload.js +1 -0
  515. package/dist/security/contracts/index.d.ts +2 -0
  516. package/dist/security/contracts/index.js +2 -0
  517. package/dist/security/ensureAppKey.d.ts +16 -0
  518. package/dist/security/ensureAppKey.js +69 -0
  519. package/dist/security/index.d.ts +4 -0
  520. package/dist/security/index.js +4 -0
  521. package/dist/serialization/Serializable.d.ts +17 -0
  522. package/dist/serialization/Serializable.js +1 -0
  523. package/dist/serialization/SerializationError.d.ts +40 -0
  524. package/dist/serialization/SerializationError.js +42 -0
  525. package/dist/serialization/SerializationRegistry.d.ts +76 -0
  526. package/dist/serialization/SerializationRegistry.js +153 -0
  527. package/dist/serialization/SerializationRegistryError.d.ts +18 -0
  528. package/dist/serialization/SerializationRegistryError.js +18 -0
  529. package/dist/serialization/Serializer.d.ts +37 -0
  530. package/dist/serialization/Serializer.js +477 -0
  531. package/dist/serialization/contracts/SerializableClass.d.ts +20 -0
  532. package/dist/serialization/contracts/SerializableClass.js +1 -0
  533. package/dist/serialization/contracts/SerializedValue.d.ts +59 -0
  534. package/dist/serialization/contracts/SerializedValue.js +19 -0
  535. package/dist/serialization/contracts/SerializerOptions.d.ts +17 -0
  536. package/dist/serialization/contracts/SerializerOptions.js +1 -0
  537. package/dist/serialization/contracts/SerializerService.d.ts +26 -0
  538. package/dist/serialization/contracts/SerializerService.js +1 -0
  539. package/dist/serialization/contracts/index.d.ts +4 -0
  540. package/dist/serialization/contracts/index.js +4 -0
  541. package/dist/serialization/index.d.ts +6 -0
  542. package/dist/serialization/index.js +6 -0
  543. package/dist/server/App.d.ts +141 -0
  544. package/dist/server/App.js +225 -0
  545. package/dist/server/RequestContext.d.ts +42 -0
  546. package/dist/server/RequestContext.js +95 -0
  547. package/dist/server/appContext.d.ts +34 -0
  548. package/dist/server/appContext.js +42 -0
  549. package/dist/server/index.d.ts +3 -0
  550. package/dist/server/index.js +3 -0
  551. package/dist/ssr/constants.d.ts +6 -0
  552. package/dist/ssr/constants.js +6 -0
  553. package/dist/ssr/contracts/DocumentHead.d.ts +32 -0
  554. package/dist/ssr/contracts/DocumentHead.js +1 -0
  555. package/dist/ssr/contracts/SsrRenderContext.d.ts +23 -0
  556. package/dist/ssr/contracts/SsrRenderContext.js +1 -0
  557. package/dist/ssr/contracts/SsrRenderResult.d.ts +21 -0
  558. package/dist/ssr/contracts/SsrRenderResult.js +1 -0
  559. package/dist/ssr/contracts/SsrRenderer.d.ts +9 -0
  560. package/dist/ssr/contracts/SsrRenderer.js +1 -0
  561. package/dist/ssr/contracts/SsrRequest.d.ts +16 -0
  562. package/dist/ssr/contracts/SsrRequest.js +1 -0
  563. package/dist/ssr/contracts/index.d.ts +5 -0
  564. package/dist/ssr/contracts/index.js +1 -0
  565. package/dist/ssr/createSsrRenderContext.d.ts +9 -0
  566. package/dist/ssr/createSsrRenderContext.js +20 -0
  567. package/dist/ssr/fastify/contracts/FastifySsrOptions.d.ts +21 -0
  568. package/dist/ssr/fastify/contracts/FastifySsrOptions.js +1 -0
  569. package/dist/ssr/fastify/contracts/index.d.ts +1 -0
  570. package/dist/ssr/fastify/contracts/index.js +1 -0
  571. package/dist/ssr/fastify/fastifySsr.d.ts +25 -0
  572. package/dist/ssr/fastify/fastifySsr.js +89 -0
  573. package/dist/ssr/fastify/index.d.ts +2 -0
  574. package/dist/ssr/fastify/index.js +1 -0
  575. package/dist/ssr/index.d.ts +6 -0
  576. package/dist/ssr/index.js +5 -0
  577. package/dist/ssr/renderDocumentHead.d.ts +8 -0
  578. package/dist/ssr/renderDocumentHead.js +62 -0
  579. package/dist/ssr/renderSsrDocument.d.ts +14 -0
  580. package/dist/ssr/renderSsrDocument.js +28 -0
  581. package/dist/ssr/serializeSsrState.d.ts +10 -0
  582. package/dist/ssr/serializeSsrState.js +18 -0
  583. package/dist/ssr/vite/contracts/ViteSsrOptions.d.ts +45 -0
  584. package/dist/ssr/vite/contracts/ViteSsrOptions.js +1 -0
  585. package/dist/ssr/vite/contracts/index.d.ts +1 -0
  586. package/dist/ssr/vite/contracts/index.js +1 -0
  587. package/dist/ssr/vite/fastifyViteSsr.d.ts +24 -0
  588. package/dist/ssr/vite/fastifyViteSsr.js +213 -0
  589. package/dist/ssr/vite/index.d.ts +4 -0
  590. package/dist/ssr/vite/index.js +2 -0
  591. package/dist/ssr/vite/viteSsrManifest.d.ts +16 -0
  592. package/dist/ssr/vite/viteSsrManifest.js +63 -0
  593. package/dist/storage/Storage.d.ts +244 -0
  594. package/dist/storage/Storage.js +348 -0
  595. package/dist/storage/contents.d.ts +8 -0
  596. package/dist/storage/contents.js +18 -0
  597. package/dist/storage/contracts/StorageListing.d.ts +50 -0
  598. package/dist/storage/contracts/StorageListing.js +1 -0
  599. package/dist/storage/contracts/index.d.ts +1 -0
  600. package/dist/storage/contracts/index.js +1 -0
  601. package/dist/storage/drivers/FlystorageDisk.d.ts +185 -0
  602. package/dist/storage/drivers/FlystorageDisk.js +250 -0
  603. package/dist/storage/drivers/FlystorageListing.d.ts +27 -0
  604. package/dist/storage/drivers/FlystorageListing.js +69 -0
  605. package/dist/storage/drivers/LocalStorageDisk.d.ts +25 -0
  606. package/dist/storage/drivers/LocalStorageDisk.js +38 -0
  607. package/dist/storage/drivers/S3StorageDisk.d.ts +17 -0
  608. package/dist/storage/drivers/S3StorageDisk.js +102 -0
  609. package/dist/storage/drivers/index.d.ts +3 -0
  610. package/dist/storage/drivers/index.js +3 -0
  611. package/dist/storage/index.d.ts +7 -0
  612. package/dist/storage/index.js +7 -0
  613. package/dist/storage/mime.d.ts +7 -0
  614. package/dist/storage/mime.js +28 -0
  615. package/dist/storage/path.d.ts +22 -0
  616. package/dist/storage/path.js +61 -0
  617. package/dist/storage/types.d.ts +218 -0
  618. package/dist/storage/types.js +1 -0
  619. package/dist/url/UrlGenerator.d.ts +32 -0
  620. package/dist/url/UrlGenerator.js +61 -0
  621. package/dist/url/contracts/UrlGeneratorOptions.d.ts +13 -0
  622. package/dist/url/contracts/UrlGeneratorOptions.js +1 -0
  623. package/dist/url/contracts/index.d.ts +1 -0
  624. package/dist/url/contracts/index.js +1 -0
  625. package/dist/url/index.d.ts +2 -0
  626. package/dist/url/index.js +2 -0
  627. package/dist/validation/index.d.ts +28 -0
  628. package/dist/validation/index.js +260 -0
  629. package/package.json +290 -0
  630. package/src/ai/AIErrors.ts +46 -0
  631. package/src/ai/AIFailover.ts +101 -0
  632. package/src/ai/AIProviders.ts +228 -0
  633. package/src/ai/AIQuotaDeferredError.ts +26 -0
  634. package/src/ai/AIRateLimiter.ts +880 -0
  635. package/src/ai/Agent.ts +3630 -0
  636. package/src/ai/AgentHistory.ts +576 -0
  637. package/src/ai/AgentRunJob.ts +65 -0
  638. package/src/ai/Ai.ts +2176 -0
  639. package/src/ai/AiConversation.ts +49 -0
  640. package/src/ai/AiExecutionContext.ts +19 -0
  641. package/src/ai/AiMessage.ts +131 -0
  642. package/src/ai/AiRateLimitBucket.ts +163 -0
  643. package/src/ai/AiRateLimitReservation.ts +117 -0
  644. package/src/ai/AiRequest.ts +466 -0
  645. package/src/ai/Estimates.ts +36 -0
  646. package/src/ai/Models.ts +373 -0
  647. package/src/ai/OpenAIProviderError.ts +98 -0
  648. package/src/ai/OpenAIQuotaRetry.ts +183 -0
  649. package/src/ai/ProviderCosts.ts +156 -0
  650. package/src/ai/README.md +187 -0
  651. package/src/ai/ResponsesProviderCall.ts +34 -0
  652. package/src/ai/agentCitations.ts +186 -0
  653. package/src/ai/contracts/AI.ts +380 -0
  654. package/src/ai/contracts/Agent.ts +539 -0
  655. package/src/ai/contracts/AiRequestRunCostSummary.ts +31 -0
  656. package/src/ai/contracts/Pricing.ts +95 -0
  657. package/src/ai/contracts/Providers.ts +73 -0
  658. package/src/ai/contracts/QuotaRetry.ts +39 -0
  659. package/src/ai/contracts/RateLimits.ts +49 -0
  660. package/src/ai/contracts/ResponsesProviderCall.ts +30 -0
  661. package/src/ai/contracts/index.ts +8 -0
  662. package/src/ai/examples/Conversation.ts +12 -0
  663. package/src/ai/examples/HelpAgent.ts +27 -0
  664. package/src/ai/examples/createHelpImage.ts +13 -0
  665. package/src/ai/index.ts +27 -0
  666. package/src/ai/registry.ts +70 -0
  667. package/src/ai/sdkNodeCompatibility.d.ts +76 -0
  668. package/src/ai/toolCallRecovery.ts +82 -0
  669. package/src/ai/toolHelpers.ts +145 -0
  670. package/src/auth/Auth.ts +1422 -0
  671. package/src/auth/AuthProvider.ts +251 -0
  672. package/src/auth/AuthToken.ts +239 -0
  673. package/src/auth/PasswordResetToken.ts +93 -0
  674. package/src/auth/README.md +396 -0
  675. package/src/auth/UserIdentity.ts +112 -0
  676. package/src/auth/contracts/AuthProviderDriver.ts +114 -0
  677. package/src/auth/contracts/index.ts +1 -0
  678. package/src/auth/examples/runPasswordAuth.ts +45 -0
  679. package/src/auth/index.ts +8 -0
  680. package/src/auth/passwordHash.ts +160 -0
  681. package/src/auth/providers/GoogleAuthProvider.ts +470 -0
  682. package/src/auth/providers/PasswordAuthProvider.ts +256 -0
  683. package/src/auth/providers/index.ts +3 -0
  684. package/src/auth/providers/resolveAuthProviders.ts +166 -0
  685. package/src/cache/Cache.ts +151 -0
  686. package/src/cache/README.md +137 -0
  687. package/src/cache/contracts/CacheDriver.ts +11 -0
  688. package/src/cache/contracts/CacheOperations.ts +28 -0
  689. package/src/cache/contracts/CacheOptions.ts +56 -0
  690. package/src/cache/contracts/CacheRepository.ts +62 -0
  691. package/src/cache/contracts/index.ts +4 -0
  692. package/src/cache/drivers/CacheManagerDriver.ts +84 -0
  693. package/src/cache/drivers/createCacheDriver.ts +191 -0
  694. package/src/cache/examples/runNoteCache.ts +37 -0
  695. package/src/cache/index.ts +2 -0
  696. package/src/cli/Cli.ts +110 -0
  697. package/src/cli/README.md +164 -0
  698. package/src/cli/commands/repl.ts +29 -0
  699. package/src/cli/contracts/CliCommand.ts +33 -0
  700. package/src/cli/contracts/CliConfig.ts +10 -0
  701. package/src/cli/contracts/CliOptions.ts +13 -0
  702. package/src/cli/contracts/CommandDefinition.ts +19 -0
  703. package/src/cli/contracts/ReplOptions.ts +11 -0
  704. package/src/cli/contracts/index.ts +5 -0
  705. package/src/cli/defineCommand.ts +25 -0
  706. package/src/cli/index.ts +5 -0
  707. package/src/cli/runDb3.ts +63 -0
  708. package/src/cli/runRepl.ts +55 -0
  709. package/src/config/Config.ts +110 -0
  710. package/src/config/README.md +142 -0
  711. package/src/config/env.ts +164 -0
  712. package/src/config/examples/loadNotesConfig.ts +29 -0
  713. package/src/config/examples/runConfig.ts +40 -0
  714. package/src/config/index.ts +2 -0
  715. package/src/db/ActiveProjection.ts +311 -0
  716. package/src/db/ActiveQueryBuilder.ts +831 -0
  717. package/src/db/ActiveRecord.ts +1317 -0
  718. package/src/db/Database.ts +1283 -0
  719. package/src/db/FieldType.ts +1243 -0
  720. package/src/db/README.md +508 -0
  721. package/src/db/SoftDeletes.ts +158 -0
  722. package/src/db/commands/check.ts +10 -0
  723. package/src/db/commands/index.ts +19 -0
  724. package/src/db/commands/makeMigration.ts +11 -0
  725. package/src/db/commands/migrate.ts +10 -0
  726. package/src/db/connection.ts +68 -0
  727. package/src/db/contracts/ActiveRecordDefinition.ts +69 -0
  728. package/src/db/contracts/DatabaseBackup.ts +7 -0
  729. package/src/db/contracts/DatabaseMigrationsConfig.ts +10 -0
  730. package/src/db/contracts/index.ts +3 -0
  731. package/src/db/dialects/columnTypes.ts +103 -0
  732. package/src/db/dialects/index.ts +6 -0
  733. package/src/db/dialects/mariadb.ts +51 -0
  734. package/src/db/dialects/mysql.ts +277 -0
  735. package/src/db/dialects/postgres.ts +143 -0
  736. package/src/db/dialects/resolveDialect.ts +88 -0
  737. package/src/db/dialects/types.ts +59 -0
  738. package/src/db/errors.ts +22 -0
  739. package/src/db/examples/DefinedUser.ts +20 -0
  740. package/src/db/examples/FieldNote.ts +27 -0
  741. package/src/db/examples/KnowledgeNote.ts +29 -0
  742. package/src/db/examples/NoteCodeField.ts +9 -0
  743. package/src/db/examples/createNotesTogether.ts +24 -0
  744. package/src/db/examples/outputs/workspace-notes.json +9 -0
  745. package/src/db/examples/runFieldNotes.ts +51 -0
  746. package/src/db/examples/runNoteMigrations.ts +64 -0
  747. package/src/db/examples/runWorkspaceNotes.ts +86 -0
  748. package/src/db/examples/workspaceNotes.ts +57 -0
  749. package/src/db/fields/BooleanField.ts +128 -0
  750. package/src/db/fields/CharUuidField.ts +91 -0
  751. package/src/db/fields/ChoiceStringField.ts +97 -0
  752. package/src/db/fields/DecimalField.ts +157 -0
  753. package/src/db/fields/EmailField.ts +79 -0
  754. package/src/db/fields/EncryptedJsonField.ts +211 -0
  755. package/src/db/fields/IntegerField.ts +200 -0
  756. package/src/db/fields/JsonField.ts +108 -0
  757. package/src/db/fields/JsonStringField.ts +63 -0
  758. package/src/db/fields/LinkField.ts +502 -0
  759. package/src/db/fields/PasswordField.ts +294 -0
  760. package/src/db/fields/StringField.ts +154 -0
  761. package/src/db/fields/StringListField.ts +179 -0
  762. package/src/db/fields/TextField.ts +71 -0
  763. package/src/db/fields/TimestampField.ts +164 -0
  764. package/src/db/fields/UlidField.ts +189 -0
  765. package/src/db/fields/UrlField.ts +97 -0
  766. package/src/db/fields/VectorField.ts +266 -0
  767. package/src/db/fields/createField.ts +22 -0
  768. package/src/db/fields/field.ts +209 -0
  769. package/src/db/fields/index.ts +76 -0
  770. package/src/db/fields/resolveFields.ts +69 -0
  771. package/src/db/index.ts +13 -0
  772. package/src/db/migrations/DatabaseMigrationManager.ts +756 -0
  773. package/src/db/migrations/DatabaseSchemaInspector.ts +541 -0
  774. package/src/db/migrations/KnexMigrationRenderer.ts +490 -0
  775. package/src/db/migrations/ModelSchemaCollector.ts +240 -0
  776. package/src/db/migrations/SchemaDiffer.ts +541 -0
  777. package/src/db/migrations/SchemaNames.ts +62 -0
  778. package/src/db/migrations/SchemaSnapshotSerializer.ts +59 -0
  779. package/src/db/migrations/contracts/DatabaseMigration.ts +143 -0
  780. package/src/db/migrations/contracts/SchemaChange.ts +113 -0
  781. package/src/db/migrations/contracts/SchemaSnapshot.ts +122 -0
  782. package/src/db/migrations/contracts/index.ts +3 -0
  783. package/src/db/migrations/errors.ts +45 -0
  784. package/src/db/migrations/index.ts +10 -0
  785. package/src/db/migrations/promoteDestructiveSchemaChanges.ts +120 -0
  786. package/src/db/queryMonitor.ts +549 -0
  787. package/src/db/sqlErrors.ts +36 -0
  788. package/src/db/test/db.ts +159 -0
  789. package/src/devtools/HttpEventDispatcher.ts +214 -0
  790. package/src/devtools/contracts/DevtoolsEventDispatcher.ts +57 -0
  791. package/src/devtools/contracts/index.ts +1 -0
  792. package/src/devtools/environment.ts +18 -0
  793. package/src/devtools/index.ts +3 -0
  794. package/src/events/Events.ts +165 -0
  795. package/src/events/README.md +106 -0
  796. package/src/events/contracts/EventConstructor.ts +12 -0
  797. package/src/events/contracts/EventListener.ts +8 -0
  798. package/src/events/contracts/EventUnsubscribe.ts +4 -0
  799. package/src/events/contracts/index.ts +3 -0
  800. package/src/events/examples/NoteSaved.ts +9 -0
  801. package/src/events/examples/runNoteEvents.ts +31 -0
  802. package/src/events/index.ts +2 -0
  803. package/src/flows/FlowBlockRegistry.ts +79 -0
  804. package/src/flows/FlowCompiler.ts +624 -0
  805. package/src/flows/FlowDefinitionError.ts +24 -0
  806. package/src/flows/FlowStepJob.ts +54 -0
  807. package/src/flows/FlowValueValidator.ts +120 -0
  808. package/src/flows/Flows.ts +1118 -0
  809. package/src/flows/README.md +144 -0
  810. package/src/flows/blocks/FlowInput.ts +32 -0
  811. package/src/flows/blocks/FlowOutput.ts +32 -0
  812. package/src/flows/blocks/Subflow.ts +24 -0
  813. package/src/flows/blocks/index.ts +11 -0
  814. package/src/flows/constants.ts +62 -0
  815. package/src/flows/contracts/FlowBlock.ts +73 -0
  816. package/src/flows/contracts/FlowCompiler.ts +32 -0
  817. package/src/flows/contracts/FlowDefinition.ts +126 -0
  818. package/src/flows/contracts/FlowDefinitionStore.ts +52 -0
  819. package/src/flows/contracts/FlowRun.ts +44 -0
  820. package/src/flows/contracts/FlowValue.ts +54 -0
  821. package/src/flows/contracts/FlowsService.ts +39 -0
  822. package/src/flows/contracts/index.ts +7 -0
  823. package/src/flows/defineBlock.ts +25 -0
  824. package/src/flows/drivers/FileFlowDefinitionStore.ts +372 -0
  825. package/src/flows/drivers/index.ts +1 -0
  826. package/src/flows/errors.ts +22 -0
  827. package/src/flows/examples/FlowExampleApp.ts +15 -0
  828. package/src/flows/examples/createTextFlow.ts +14 -0
  829. package/src/flows/examples/normalizeTextBlock.ts +15 -0
  830. package/src/flows/examples/runTextFlow.ts +46 -0
  831. package/src/flows/examples/uppercaseTextBlock.ts +11 -0
  832. package/src/flows/index.ts +13 -0
  833. package/src/flows/models/FlowRun.ts +164 -0
  834. package/src/flows/models/FlowRunEvent.ts +108 -0
  835. package/src/flows/models/FlowStepRun.ts +176 -0
  836. package/src/flows/models/index.ts +16 -0
  837. package/src/index.ts +40 -0
  838. package/src/logging/Log.ts +100 -0
  839. package/src/logging/README.md +139 -0
  840. package/src/logging/contracts/HttpExchange.ts +53 -0
  841. package/src/logging/contracts/Logger.ts +45 -0
  842. package/src/logging/contracts/LoggerDriver.ts +19 -0
  843. package/src/logging/contracts/LoggingOptions.ts +51 -0
  844. package/src/logging/contracts/index.ts +4 -0
  845. package/src/logging/drivers/PinoLoggerDriver.ts +376 -0
  846. package/src/logging/drivers/index.ts +1 -0
  847. package/src/logging/examples/runNoteLogs.ts +38 -0
  848. package/src/logging/index.ts +3 -0
  849. package/src/logging/transports/DevtoolsLogTransport.ts +142 -0
  850. package/src/mail/Mail.ts +188 -0
  851. package/src/mail/README.md +206 -0
  852. package/src/mail/examples/runMailPreview.ts +44 -0
  853. package/src/mail/examples/welcomeMessage.ts +26 -0
  854. package/src/mail/index.ts +4 -0
  855. package/src/mail/transports/FileMailTransport.ts +58 -0
  856. package/src/mail/transports/MailgunTransport.ts +85 -0
  857. package/src/mail/transports/ResendTransport.ts +80 -0
  858. package/src/media/MediaFile.ts +132 -0
  859. package/src/media/MediaItem.ts +132 -0
  860. package/src/media/MediaLibrary.ts +117 -0
  861. package/src/media/MediaManager.ts +874 -0
  862. package/src/media/README.md +358 -0
  863. package/src/media/constants.ts +31 -0
  864. package/src/media/contracts/MediaOptions.ts +9 -0
  865. package/src/media/contracts/index.ts +1 -0
  866. package/src/media/examples/createPrivateFileServer.ts +55 -0
  867. package/src/media/examples/runPrivateFiles.ts +45 -0
  868. package/src/media/examples/runProjectMedia.ts +46 -0
  869. package/src/media/image/ImageReconstructionError.ts +18 -0
  870. package/src/media/image/ImageVariantRenderer.ts +386 -0
  871. package/src/media/image/ImageVariantRequest.ts +65 -0
  872. package/src/media/image/contracts/ImageProcessor.ts +53 -0
  873. package/src/media/image/contracts/ImageVariant.ts +37 -0
  874. package/src/media/image/contracts/ImageVariantCacheOptions.ts +21 -0
  875. package/src/media/image/contracts/index.ts +3 -0
  876. package/src/media/image/index.ts +5 -0
  877. package/src/media/image/processors/SharpImageProcessor.ts +121 -0
  878. package/src/media/image/processors/index.ts +1 -0
  879. package/src/media/index.ts +8 -0
  880. package/src/media/types.ts +168 -0
  881. package/src/queue/FailedJob.ts +58 -0
  882. package/src/queue/Queue.ts +938 -0
  883. package/src/queue/QueueEvents.ts +57 -0
  884. package/src/queue/QueueRetryLaterError.ts +40 -0
  885. package/src/queue/QueueWorker.ts +296 -0
  886. package/src/queue/QueueableJob.ts +167 -0
  887. package/src/queue/QueuedJob.ts +69 -0
  888. package/src/queue/README.md +368 -0
  889. package/src/queue/RetryPolicy.ts +129 -0
  890. package/src/queue/commands/index.ts +13 -0
  891. package/src/queue/commands/makeJob.ts +11 -0
  892. package/src/queue/console.ts +518 -0
  893. package/src/queue/contracts/CreateJob.ts +13 -0
  894. package/src/queue/contracts/QueueDriver.ts +135 -0
  895. package/src/queue/contracts/QueueEvents.ts +77 -0
  896. package/src/queue/contracts/QueuePayload.ts +150 -0
  897. package/src/queue/contracts/QueueRetry.ts +47 -0
  898. package/src/queue/contracts/QueueService.ts +219 -0
  899. package/src/queue/contracts/QueueWorkerLifecycle.ts +71 -0
  900. package/src/queue/contracts/QueueableJob.ts +56 -0
  901. package/src/queue/contracts/RedisQueueDriver.ts +37 -0
  902. package/src/queue/contracts/index.ts +9 -0
  903. package/src/queue/createJob.ts +54 -0
  904. package/src/queue/drivers/DatabaseQueueDriver.ts +449 -0
  905. package/src/queue/drivers/RedisQueueDriver.ts +733 -0
  906. package/src/queue/examples/DeferredReportJob.ts +25 -0
  907. package/src/queue/examples/GenerateReportJob.ts +37 -0
  908. package/src/queue/examples/WriteReportJob.ts +37 -0
  909. package/src/queue/examples/createAndProcessReportJob.ts +29 -0
  910. package/src/queue/examples/dispatchReportWorkflows.ts +40 -0
  911. package/src/queue/examples/manageReportRetries.ts +47 -0
  912. package/src/queue/examples/outputs/create-and-process-report-job.json +6 -0
  913. package/src/queue/examples/outputs/dispatch-report-workflows.json +14 -0
  914. package/src/queue/examples/outputs/manage-report-retries.json +24 -0
  915. package/src/queue/examples/outputs/queue-reports.json +11 -0
  916. package/src/queue/examples/reportConsole.ts +47 -0
  917. package/src/queue/examples/runBackpressure.ts +27 -0
  918. package/src/queue/examples/runQueueReports.ts +80 -0
  919. package/src/queue/examples/runQueueWorkflows.ts +43 -0
  920. package/src/queue/index.ts +13 -0
  921. package/src/queue/queueMonitor.ts +368 -0
  922. package/src/scheduler/README.md +139 -0
  923. package/src/scheduler/ScheduledCall.ts +36 -0
  924. package/src/scheduler/ScheduledEvent.ts +149 -0
  925. package/src/scheduler/ScheduledJob.ts +58 -0
  926. package/src/scheduler/ScheduledOccurrence.ts +250 -0
  927. package/src/scheduler/ScheduledOccurrenceRecorder.ts +125 -0
  928. package/src/scheduler/Scheduler.ts +225 -0
  929. package/src/scheduler/SchedulerWorker.ts +151 -0
  930. package/src/scheduler/console.ts +368 -0
  931. package/src/scheduler/constants.ts +27 -0
  932. package/src/scheduler/contracts/Scheduler.ts +123 -0
  933. package/src/scheduler/contracts/SchedulerConsole.ts +40 -0
  934. package/src/scheduler/contracts/SchedulerWorker.ts +23 -0
  935. package/src/scheduler/contracts/index.ts +3 -0
  936. package/src/scheduler/examples/RecoverableSummaryJob.ts +18 -0
  937. package/src/scheduler/examples/WriteDailySummaryJob.ts +17 -0
  938. package/src/scheduler/examples/registerDailySummary.ts +13 -0
  939. package/src/scheduler/examples/runDailySummary.ts +46 -0
  940. package/src/scheduler/examples/runScheduledReplay.ts +60 -0
  941. package/src/scheduler/index.ts +9 -0
  942. package/src/scheduler/scheduleTime.ts +78 -0
  943. package/src/security/README.md +130 -0
  944. package/src/security/Security.ts +346 -0
  945. package/src/security/SecurityError.ts +16 -0
  946. package/src/security/contracts/SecurityOptions.ts +20 -0
  947. package/src/security/contracts/SecurityPayload.ts +14 -0
  948. package/src/security/contracts/index.ts +2 -0
  949. package/src/security/ensureAppKey.ts +82 -0
  950. package/src/security/examples/runSecretRoundTrip.ts +42 -0
  951. package/src/security/index.ts +4 -0
  952. package/src/serialization/README.md +169 -0
  953. package/src/serialization/Serializable.ts +17 -0
  954. package/src/serialization/SerializationError.ts +91 -0
  955. package/src/serialization/SerializationRegistry.ts +208 -0
  956. package/src/serialization/SerializationRegistryError.ts +24 -0
  957. package/src/serialization/Serializer.ts +793 -0
  958. package/src/serialization/contracts/SerializableClass.ts +26 -0
  959. package/src/serialization/contracts/SerializedValue.ts +71 -0
  960. package/src/serialization/contracts/SerializerOptions.ts +19 -0
  961. package/src/serialization/contracts/SerializerService.ts +29 -0
  962. package/src/serialization/contracts/index.ts +4 -0
  963. package/src/serialization/examples/ExportRequest.ts +25 -0
  964. package/src/serialization/examples/runExportSerialization.ts +24 -0
  965. package/src/serialization/index.ts +6 -0
  966. package/src/server/App.ts +326 -0
  967. package/src/server/README.md +219 -0
  968. package/src/server/RequestContext.ts +122 -0
  969. package/src/server/appContext.ts +59 -0
  970. package/src/server/examples/createFirstServer.ts +25 -0
  971. package/src/server/examples/startFirstServer.ts +19 -0
  972. package/src/server/index.ts +16 -0
  973. package/src/ssr/README.md +158 -0
  974. package/src/ssr/constants.ts +8 -0
  975. package/src/ssr/contracts/DocumentHead.ts +35 -0
  976. package/src/ssr/contracts/SsrRenderContext.ts +25 -0
  977. package/src/ssr/contracts/SsrRenderResult.ts +23 -0
  978. package/src/ssr/contracts/SsrRenderer.ts +12 -0
  979. package/src/ssr/contracts/SsrRequest.ts +17 -0
  980. package/src/ssr/contracts/index.ts +19 -0
  981. package/src/ssr/createSsrRenderContext.ts +25 -0
  982. package/src/ssr/examples/createPublicPageServer.ts +32 -0
  983. package/src/ssr/examples/runPublicPages.ts +25 -0
  984. package/src/ssr/fastify/contracts/FastifySsrOptions.ts +24 -0
  985. package/src/ssr/fastify/contracts/index.ts +5 -0
  986. package/src/ssr/fastify/fastifySsr.ts +110 -0
  987. package/src/ssr/fastify/index.ts +2 -0
  988. package/src/ssr/index.ts +10 -0
  989. package/src/ssr/renderDocumentHead.ts +72 -0
  990. package/src/ssr/renderSsrDocument.ts +35 -0
  991. package/src/ssr/serializeSsrState.ts +19 -0
  992. package/src/ssr/vite/contracts/ViteSsrOptions.ts +52 -0
  993. package/src/ssr/vite/contracts/index.ts +6 -0
  994. package/src/ssr/vite/fastifyViteSsr.ts +279 -0
  995. package/src/ssr/vite/index.ts +4 -0
  996. package/src/ssr/vite/viteSsrManifest.ts +92 -0
  997. package/src/storage/README.md +310 -0
  998. package/src/storage/Storage.ts +392 -0
  999. package/src/storage/contents.ts +23 -0
  1000. package/src/storage/contracts/StorageListing.ts +55 -0
  1001. package/src/storage/contracts/index.ts +1 -0
  1002. package/src/storage/drivers/FlystorageDisk.ts +295 -0
  1003. package/src/storage/drivers/FlystorageListing.ts +78 -0
  1004. package/src/storage/drivers/LocalStorageDisk.ts +45 -0
  1005. package/src/storage/drivers/S3StorageDisk.ts +114 -0
  1006. package/src/storage/drivers/index.ts +3 -0
  1007. package/src/storage/examples/runStorage.ts +37 -0
  1008. package/src/storage/examples/runStreamExport.ts +41 -0
  1009. package/src/storage/examples/writeCsvExport.ts +45 -0
  1010. package/src/storage/index.ts +7 -0
  1011. package/src/storage/mime.ts +30 -0
  1012. package/src/storage/path.ts +76 -0
  1013. package/src/storage/types.ts +251 -0
  1014. package/src/url/README.md +41 -0
  1015. package/src/url/UrlGenerator.ts +72 -0
  1016. package/src/url/contracts/UrlGeneratorOptions.ts +14 -0
  1017. package/src/url/contracts/index.ts +1 -0
  1018. package/src/url/examples/runApplicationLinks.ts +33 -0
  1019. package/src/url/index.ts +2 -0
  1020. package/src/validation/README.md +433 -0
  1021. package/src/validation/examples/runNoteValidation.ts +18 -0
  1022. package/src/validation/examples/validateNoteInput.ts +31 -0
  1023. package/src/validation/index.ts +398 -0
  1024. package/templates/AGENTS.md +15 -0
@@ -0,0 +1,927 @@
1
+ import { ActiveRecord } from '../db/index.js';
2
+ import { isPromiseLike } from '@db3.ai/pure';
3
+ import { AuthProvider, PASSWORD_AUTH_PROVIDER } from './AuthProvider.js';
4
+ import { AuthToken } from './AuthToken.js';
5
+ import { PasswordResetToken } from './PasswordResetToken.js';
6
+ import { defaultPasswordHash } from './passwordHash.js';
7
+ import { UserIdentity } from './UserIdentity.js';
8
+ import { PasswordAuthProvider, resolveAuthProviders } from './providers/index.js';
9
+ /**
10
+ * Error thrown when registration would duplicate an existing identity.
11
+ */
12
+ export class AuthIdentityExistsError extends Error {
13
+ field;
14
+ value;
15
+ /**
16
+ * Creates an identity duplication error.
17
+ *
18
+ * @param field - Logical identity field that collided.
19
+ * @param value - Submitted identity value.
20
+ */
21
+ constructor(field, value) {
22
+ super(`An identity already exists for ${field}.`);
23
+ this.field = field;
24
+ this.value = value;
25
+ this.name = 'AuthIdentityExistsError';
26
+ }
27
+ }
28
+ /**
29
+ * Error thrown when code attempts to use a disabled auth provider.
30
+ */
31
+ export class AuthProviderNotConfiguredError extends Error {
32
+ provider;
33
+ /**
34
+ * Creates a provider configuration error.
35
+ *
36
+ * @param provider - Provider name that is not enabled.
37
+ */
38
+ constructor(provider) {
39
+ super(`Auth provider "${provider}" is not configured.`);
40
+ this.provider = provider;
41
+ this.name = 'AuthProviderNotConfiguredError';
42
+ }
43
+ }
44
+ /**
45
+ * Error thrown when unlinking a provider would leave a user unable to log in.
46
+ */
47
+ export class AuthLastProviderError extends Error {
48
+ /**
49
+ * Creates a last-provider removal error.
50
+ */
51
+ constructor() {
52
+ super('Cannot remove the last authentication provider from a user.');
53
+ this.name = 'AuthLastProviderError';
54
+ }
55
+ }
56
+ export const AUTH_USER_CONTEXT_KEY = 'auth.user';
57
+ const AUTH_TOKEN_CONTEXT_KEY_PREFIX = 'auth.token';
58
+ const AUTH_TOKEN_RECORD_CONTEXT_KEY = 'auth.token.record';
59
+ /**
60
+ * Authentication service for the current app/request scope.
61
+ */
62
+ export class Auth {
63
+ fallbackAuthenticatedUser = null;
64
+ fallbackAuthenticatedToken = null;
65
+ db;
66
+ IdentityModel;
67
+ ProviderModel;
68
+ TokenModel;
69
+ PasswordResetTokenModel;
70
+ providerRegistry;
71
+ passwordHash;
72
+ tokenLifetimeMs;
73
+ passwordResetTokenLifetimeMs;
74
+ requestContext;
75
+ /**
76
+ * Creates an auth service bound to a database and provider registry.
77
+ *
78
+ * @param options - Auth runtime options.
79
+ */
80
+ constructor(options) {
81
+ this.db = options.db;
82
+ this.IdentityModel = options.identityModel
83
+ ?? UserIdentity;
84
+ this.ProviderModel = options.providerModel ?? AuthProvider;
85
+ this.TokenModel = options.tokenModel ?? AuthToken;
86
+ this.PasswordResetTokenModel = options.passwordResetTokenModel ?? PasswordResetToken;
87
+ this.passwordHash = options.passwordHash ?? defaultPasswordHash;
88
+ this.providerRegistry = resolveAuthProviders(options.providers ?? options.config?.get('auth.providers') ?? {
89
+ [PASSWORD_AUTH_PROVIDER]: true,
90
+ }, {
91
+ identityModel: this.IdentityModel,
92
+ providerModel: this.ProviderModel,
93
+ passwordHash: this.passwordHash,
94
+ });
95
+ this.tokenLifetimeMs = options.tokenLifetimeMs ?? 30 * 24 * 60 * 60 * 1000;
96
+ this.passwordResetTokenLifetimeMs = options.passwordResetTokenLifetimeMs ?? 60 * 60 * 1000;
97
+ this.requestContext = options.requestContext;
98
+ }
99
+ /**
100
+ * Hashes a plaintext password using the configured auth password service.
101
+ *
102
+ * @param plainText - Plaintext password to hash.
103
+ * @returns Stored password hash.
104
+ */
105
+ hashPassword(plainText) {
106
+ return this.passwordHash.hash(plainText);
107
+ }
108
+ /**
109
+ * Verifies a plaintext password against a stored password hash.
110
+ *
111
+ * @param plainText - Plaintext password supplied by the user.
112
+ * @param hash - Stored password hash.
113
+ * @returns True when the password matches.
114
+ */
115
+ verifyPassword(plainText, hash) {
116
+ return this.passwordHash.verify(plainText, hash);
117
+ }
118
+ /**
119
+ * Returns configured authentication provider names.
120
+ *
121
+ * @returns Enabled provider names.
122
+ */
123
+ configuredProviders() {
124
+ return Object.keys(this.providerRegistry);
125
+ }
126
+ /**
127
+ * True when a user is currently authenticated.
128
+ */
129
+ get check() {
130
+ return this.user !== null;
131
+ }
132
+ /**
133
+ * The currently authenticated user, or null when no user is authenticated.
134
+ */
135
+ get user() {
136
+ if (this.requestContext?.active) {
137
+ return this.requestContext.get(AUTH_USER_CONTEXT_KEY) ?? null;
138
+ }
139
+ return this.fallbackAuthenticatedUser;
140
+ }
141
+ /**
142
+ * Returns the bearer-token record authenticated for the current request.
143
+ */
144
+ get token() {
145
+ if (this.requestContext?.active) {
146
+ return this.requestContext.get(AUTH_TOKEN_RECORD_CONTEXT_KEY) ?? null;
147
+ }
148
+ return this.fallbackAuthenticatedToken;
149
+ }
150
+ /**
151
+ * Runs work inside an isolated auth scope.
152
+ *
153
+ * HTTP routes should use this so `auth.user` cannot bleed between concurrent
154
+ * requests on the shared app singleton.
155
+ *
156
+ * @param user - User to expose as authenticated inside the callback.
157
+ * @param callback - Work to run inside the auth scope.
158
+ * @returns The callback result.
159
+ */
160
+ runWithUser(user, callback) {
161
+ if (this.requestContext) {
162
+ return this.requestContext.run(callback, {
163
+ [AUTH_USER_CONTEXT_KEY]: user,
164
+ });
165
+ }
166
+ return this.runWithFallbackUser(user, callback);
167
+ }
168
+ /**
169
+ * Attempts to authenticate password credentials and stores the user on success.
170
+ *
171
+ * @param credentials - Password provider credentials.
172
+ * @returns True when credentials authenticated successfully.
173
+ */
174
+ async attempt(credentials) {
175
+ return await this.authenticatePassword(credentials) !== null;
176
+ }
177
+ /**
178
+ * Authenticates password credentials and returns the user on success.
179
+ *
180
+ * @param credentials - Password provider credentials.
181
+ * @returns Authenticated user, or null when credentials fail.
182
+ */
183
+ async authenticate(credentials) {
184
+ return this.authenticatePassword(credentials);
185
+ }
186
+ /**
187
+ * Authenticates password credentials and returns the user on success.
188
+ *
189
+ * @param credentials - Password provider credentials.
190
+ * @returns Authenticated user, or null when credentials fail.
191
+ */
192
+ async authenticatePassword(credentials) {
193
+ return this.authenticateProvider(PASSWORD_AUTH_PROVIDER, credentials);
194
+ }
195
+ /**
196
+ * Authenticates credentials and creates a bearer token on success.
197
+ *
198
+ * @param credentials - Password provider credentials.
199
+ * @param options - Token creation options.
200
+ * @returns Issued token, or null when credentials fail.
201
+ */
202
+ async issueToken(credentials, options = {}) {
203
+ return this.issueTokenForPassword(credentials, options);
204
+ }
205
+ /**
206
+ * Authenticates password credentials and creates a bearer token on success.
207
+ *
208
+ * @param credentials - Password provider credentials.
209
+ * @param options - Token creation options.
210
+ * @returns Issued token, or null when credentials fail.
211
+ */
212
+ async issueTokenForPassword(credentials, options = {}) {
213
+ const user = await this.authenticatePassword(credentials);
214
+ if (!user) {
215
+ return null;
216
+ }
217
+ return this.createToken(user, options);
218
+ }
219
+ /**
220
+ * Authenticates through a configured provider and creates a bearer token.
221
+ *
222
+ * @param provider - Configured provider name.
223
+ * @param input - Provider-specific credential payload.
224
+ * @param options - Token creation options.
225
+ * @returns Issued token, or null when provider verification fails.
226
+ */
227
+ async issueTokenForProvider(provider, input, options = {}) {
228
+ const user = await this.authenticateProvider(provider, input);
229
+ if (!user) {
230
+ return null;
231
+ }
232
+ return this.createToken(user, options);
233
+ }
234
+ /**
235
+ * Creates a new password-backed identity and returns its first bearer token.
236
+ *
237
+ * @param input - User fields and password provider credential.
238
+ * @param options - Token creation options.
239
+ * @returns Issued token for the new user.
240
+ */
241
+ async register(input, options = {}) {
242
+ return this.registerWithPassword(input, options);
243
+ }
244
+ /**
245
+ * Creates a new user and links the built-in password provider.
246
+ *
247
+ * @param input - User fields and password provider credential.
248
+ * @param options - Token creation options.
249
+ * @returns Issued token for the new user.
250
+ */
251
+ async registerWithPassword(input, options = {}) {
252
+ this.requireProvider(PASSWORD_AUTH_PROVIDER);
253
+ const identity = this.normalizedIdentity(input);
254
+ if (identity) {
255
+ const existing = await this.findIdentity(input);
256
+ if (existing) {
257
+ throw new AuthIdentityExistsError(this.IdentityModel.identityField, identity);
258
+ }
259
+ }
260
+ const { password: _password, ...userInput } = input;
261
+ const user = new this.IdentityModel(userInput, {
262
+ db: this.db.knex,
263
+ });
264
+ await user.save();
265
+ await this.setPasswordProvider(user, input.password);
266
+ await this.login(user);
267
+ return this.createToken(user, options);
268
+ }
269
+ /**
270
+ * Returns the authentication providers linked to a user.
271
+ *
272
+ * @param user - User whose providers should be loaded.
273
+ * @returns Provider rows linked to the user.
274
+ */
275
+ async providersFor(user) {
276
+ const userId = this.userPrimaryKey(user);
277
+ if (!userId)
278
+ return [];
279
+ return this.ProviderModel
280
+ .query(this.db.knex)
281
+ .where('userId', userId)
282
+ .orderBy('createdAt', 'asc')
283
+ .all();
284
+ }
285
+ /**
286
+ * Links a configured provider to an existing user.
287
+ *
288
+ * @param user - User receiving the new provider link.
289
+ * @param provider - Configured provider name.
290
+ * @param input - Provider-specific credential payload.
291
+ * @returns Linked provider row, or null when verification fails.
292
+ */
293
+ async linkProvider(user, provider, input) {
294
+ const driver = this.requireProvider(provider);
295
+ if (hasProviderLink(driver)) {
296
+ return ActiveRecord.withDb(this.db.knex, () => driver.link(user, input));
297
+ }
298
+ const profile = await this.verifyProvider(provider, input, user);
299
+ if (!profile)
300
+ return null;
301
+ return this.saveLinkedProvider(user, profile);
302
+ }
303
+ /**
304
+ * Removes one provider from a user while preserving at least one login path.
305
+ *
306
+ * @param user - User whose provider should be removed.
307
+ * @param providerIdOrName - Provider row id or provider name to remove.
308
+ * @returns True when a provider row was deleted.
309
+ */
310
+ async unlinkProvider(user, providerIdOrName) {
311
+ const providers = await this.providersFor(user);
312
+ if (providers.length <= 1) {
313
+ throw new AuthLastProviderError();
314
+ }
315
+ const provider = providers.find(candidate => {
316
+ return candidate.id === providerIdOrName || candidate.provider === providerIdOrName;
317
+ });
318
+ if (!provider)
319
+ return false;
320
+ await provider.delete(this.db.knex);
321
+ return true;
322
+ }
323
+ /**
324
+ * Creates or replaces the built-in password provider for a user.
325
+ *
326
+ * @param user - User who owns the password provider.
327
+ * @param password - New plaintext password to hash and store.
328
+ * @returns Saved password provider row.
329
+ */
330
+ async setPasswordProvider(user, password) {
331
+ return ActiveRecord.withDb(this.db.knex, () => {
332
+ return this.passwordProvider().setPassword(user, password);
333
+ });
334
+ }
335
+ /**
336
+ * Changes a user's password provider after verifying the current password.
337
+ *
338
+ * @param user - User whose password should change.
339
+ * @param currentPassword - Current plaintext password for verification.
340
+ * @param nextPassword - Replacement plaintext password.
341
+ * @returns True when the password was changed.
342
+ */
343
+ async changePasswordProvider(user, currentPassword, nextPassword) {
344
+ return ActiveRecord.withDb(this.db.knex, () => {
345
+ return this.passwordProvider().changePassword(user, currentPassword, nextPassword);
346
+ });
347
+ }
348
+ /**
349
+ * Authenticates through a non-password provider and stores the user on success.
350
+ *
351
+ * @param provider - Configured provider name.
352
+ * @param input - Provider-specific credential payload.
353
+ * @returns Authenticated user, or null when verification fails.
354
+ */
355
+ async authenticateProvider(provider, input) {
356
+ const profile = await this.verifyProvider(provider, input, null);
357
+ if (!profile) {
358
+ this.logout();
359
+ return null;
360
+ }
361
+ const providerRecord = await this.findProvider(profile.provider, profile.providerUserId);
362
+ const user = providerRecord
363
+ ? await this.userForProvider(providerRecord)
364
+ : await this.createIdentityForProvider(profile);
365
+ if (!user) {
366
+ this.logout();
367
+ return null;
368
+ }
369
+ this.applyProviderProfileDefaults(user, profile);
370
+ const linkedProvider = providerRecord ?? new this.ProviderModel({}, {
371
+ db: this.db.knex,
372
+ });
373
+ linkedProvider.userId = this.userPrimaryKey(user);
374
+ linkedProvider.applyProfile(profile);
375
+ linkedProvider.markUsed();
376
+ await linkedProvider.save();
377
+ await this.login(user);
378
+ return user;
379
+ }
380
+ /**
381
+ * Creates a single-use password reset token for an already-loaded identity.
382
+ *
383
+ * Callers should find the identity at the request boundary and pass the
384
+ * loaded model here so token creation only owns token persistence.
385
+ *
386
+ * @param user - Identity receiving the reset token.
387
+ * @param options - Reset token creation options.
388
+ * @returns Issued password reset token.
389
+ */
390
+ async createPasswordResetToken(user, options = {}) {
391
+ this.requireProvider(PASSWORD_AUTH_PROVIDER);
392
+ const userId = this.userPrimaryKey(user);
393
+ const email = this.userIdentityValue(user);
394
+ if (!userId) {
395
+ throw new Error('Cannot create a password reset token for a user without an ID.');
396
+ }
397
+ if (!email) {
398
+ throw new Error('Cannot create a password reset token for a user without an email.');
399
+ }
400
+ const token = this.PasswordResetTokenModel.generatePlainTextToken();
401
+ const expiresAt = options.expiresAt ?? this.defaultPasswordResetTokenExpiry(options.expiresInMs);
402
+ const tokenRecord = new this.PasswordResetTokenModel({
403
+ userId,
404
+ email,
405
+ tokenHash: this.PasswordResetTokenModel.hashToken(token),
406
+ expiresAt,
407
+ }, {
408
+ db: this.db.knex,
409
+ });
410
+ await tokenRecord.save();
411
+ return {
412
+ type: 'password_reset',
413
+ token,
414
+ expiresAt,
415
+ user,
416
+ };
417
+ }
418
+ /**
419
+ * Resets the password provider using a valid password reset token.
420
+ *
421
+ * @param input - Reset token, new password, and optional identity value.
422
+ * @returns Identity whose password changed, or null when redemption fails.
423
+ */
424
+ async resetPassword(input) {
425
+ this.requireProvider(PASSWORD_AUTH_PROVIDER);
426
+ if (!input.token || !input.password) {
427
+ return null;
428
+ }
429
+ const tokenRecord = await this.PasswordResetTokenModel
430
+ .query(this.db.knex)
431
+ .where('tokenHash', this.PasswordResetTokenModel.hashToken(input.token))
432
+ .first();
433
+ if (!tokenRecord || !tokenRecord.isUsable()) {
434
+ return null;
435
+ }
436
+ const user = await this.IdentityModel.findByPk(tokenRecord.userId, this.db.knex);
437
+ if (!user) {
438
+ return null;
439
+ }
440
+ if (!await this.passwordResetIdentityMatches(input, user)) {
441
+ return null;
442
+ }
443
+ await this.setPasswordProvider(user, input.password);
444
+ tokenRecord.markUsed();
445
+ await tokenRecord.save();
446
+ return user;
447
+ }
448
+ /**
449
+ * Creates a bearer token for an already-authenticated identity.
450
+ *
451
+ * @param user - Identity receiving the bearer token.
452
+ * @param options - Token creation options.
453
+ * @returns Issued bearer token.
454
+ */
455
+ async createToken(user, options = {}) {
456
+ const userId = this.userPrimaryKey(user);
457
+ if (!userId) {
458
+ throw new Error('Cannot create an auth token for a user without an ID.');
459
+ }
460
+ const token = this.TokenModel.generatePlainTextToken();
461
+ const expiresAt = options.expiresAt === undefined
462
+ ? this.defaultTokenExpiry(options.expiresInMs)
463
+ : options.expiresAt;
464
+ const tokenRecord = new this.TokenModel({
465
+ userId,
466
+ tokenHash: this.TokenModel.hashToken(token),
467
+ name: options.name,
468
+ ipAddress: options.ipAddress,
469
+ userAgent: options.userAgent,
470
+ browser: options.browser,
471
+ operatingSystem: options.operatingSystem,
472
+ device: options.device,
473
+ expiresAt,
474
+ }, {
475
+ db: this.db.knex,
476
+ });
477
+ await tokenRecord.save();
478
+ return {
479
+ type: 'Bearer',
480
+ token,
481
+ expiresAt,
482
+ user,
483
+ };
484
+ }
485
+ /**
486
+ * Authenticates a bearer token and stores the matching identity on success.
487
+ *
488
+ * @param token - Plaintext bearer token.
489
+ * @param usage - Request metadata observed while authenticating the token.
490
+ * @returns Authenticated identity, or null when the token is invalid.
491
+ */
492
+ async authenticateToken(token, usage = {}) {
493
+ const tokenHash = this.TokenModel.hashToken(token);
494
+ if (this.requestContext?.active) {
495
+ const user = await this.requestContext.remember(this.tokenContextKey(tokenHash), () => this.authenticateTokenHash(tokenHash, usage));
496
+ if (user) {
497
+ this.setAuthenticatedUser(user);
498
+ }
499
+ else {
500
+ this.logout();
501
+ }
502
+ return user;
503
+ }
504
+ return this.authenticateTokenHash(tokenHash, usage);
505
+ }
506
+ /**
507
+ * Returns active bearer sessions belonging to a user.
508
+ *
509
+ * @param user - Account whose sessions should be listed.
510
+ * @returns Active, non-expired sessions ordered newest first.
511
+ */
512
+ async tokensFor(user) {
513
+ const userId = this.userPrimaryKey(user);
514
+ if (!userId)
515
+ return [];
516
+ const tokens = await this.TokenModel
517
+ .query(this.db.knex)
518
+ .where('userId', userId)
519
+ .whereNull('revokedAt')
520
+ .orderBy('createdAt', 'desc')
521
+ .all();
522
+ return tokens.filter(token => token.isActive());
523
+ }
524
+ /**
525
+ * Revokes one bearer session owned by a user.
526
+ *
527
+ * @param user - Account that owns the session.
528
+ * @param tokenId - Auth token primary key.
529
+ * @returns True when an active session was revoked.
530
+ */
531
+ async revokeToken(user, tokenId) {
532
+ const userId = this.userPrimaryKey(user);
533
+ if (!userId || !tokenId)
534
+ return false;
535
+ const token = await this.TokenModel
536
+ .query(this.db.knex)
537
+ .where('id', tokenId)
538
+ .where('userId', userId)
539
+ .first();
540
+ if (!token || !token.isActive())
541
+ return false;
542
+ token.revoke();
543
+ await token.save();
544
+ return true;
545
+ }
546
+ /**
547
+ * Revokes the bearer session authenticated for the current request.
548
+ *
549
+ * @returns True when the current session was revoked.
550
+ */
551
+ async revokeCurrentToken() {
552
+ const token = this.token;
553
+ if (!token || !token.isActive())
554
+ return false;
555
+ token.revoke();
556
+ await token.save();
557
+ this.logout();
558
+ return true;
559
+ }
560
+ /**
561
+ * Builds the request-context key used to memoize bearer-token authentication.
562
+ *
563
+ * @param tokenHash - Hashed bearer token.
564
+ * @returns Request-context cache key.
565
+ */
566
+ tokenContextKey(tokenHash) {
567
+ return `${AUTH_TOKEN_CONTEXT_KEY_PREFIX}.${this.TokenModel.table}.${tokenHash}`;
568
+ }
569
+ /**
570
+ * Authenticates a pre-hashed bearer token against persistent auth records.
571
+ *
572
+ * @param tokenHash - Hashed bearer token.
573
+ * @returns Authenticated identity, or null when the token is invalid.
574
+ */
575
+ async authenticateTokenHash(tokenHash, usage) {
576
+ const tokenRecord = await this.TokenModel
577
+ .query(this.db.knex)
578
+ .where('tokenHash', tokenHash)
579
+ .first();
580
+ if (!tokenRecord || !tokenRecord.isActive()) {
581
+ this.logout();
582
+ return null;
583
+ }
584
+ const user = await this.IdentityModel.findByPk(tokenRecord.userId, this.db.knex);
585
+ if (!user) {
586
+ this.logout();
587
+ return null;
588
+ }
589
+ tokenRecord.markUsed(new Date(), usage);
590
+ await tokenRecord.save();
591
+ this.setAuthenticatedToken(tokenRecord);
592
+ await this.login(user);
593
+ return user;
594
+ }
595
+ /**
596
+ * Marks a user model as authenticated.
597
+ *
598
+ * @param user - User to mark as authenticated.
599
+ * @returns The saved authenticated user.
600
+ */
601
+ async login(user) {
602
+ this.setAuthenticatedUser(user);
603
+ user.setDb(this.db.knex);
604
+ user.lastLoginAt = new Date();
605
+ await user.save();
606
+ return user;
607
+ }
608
+ /**
609
+ * Clears the authenticated user.
610
+ */
611
+ logout() {
612
+ this.setAuthenticatedUser(null);
613
+ this.setAuthenticatedToken(null);
614
+ }
615
+ /**
616
+ * Returns the authenticated user or throws when auth is missing.
617
+ *
618
+ * @returns The current authenticated user.
619
+ */
620
+ requireUser() {
621
+ const user = this.user;
622
+ if (!user) {
623
+ throw new Error('No authenticated user.');
624
+ }
625
+ return user;
626
+ }
627
+ /**
628
+ * Verifies provider-specific input and normalizes the returned profile.
629
+ *
630
+ * @param provider - Configured provider name.
631
+ * @param input - Provider-specific credential payload.
632
+ * @param user - Current user when linking a provider.
633
+ * @returns Normalized provider profile, or null when verification fails.
634
+ */
635
+ async verifyProvider(provider, input, user) {
636
+ const driver = this.requireProvider(provider);
637
+ const profile = await ActiveRecord.withDb(this.db.knex, () => {
638
+ return driver.verify(input);
639
+ });
640
+ if (!profile)
641
+ return null;
642
+ return {
643
+ ...profile,
644
+ provider,
645
+ };
646
+ }
647
+ /**
648
+ * Resolves a configured provider or throws a configuration error.
649
+ *
650
+ * @param provider - Provider name to resolve.
651
+ * @returns Provider configuration.
652
+ */
653
+ requireProvider(provider) {
654
+ if (!Object.prototype.hasOwnProperty.call(this.providerRegistry, provider)) {
655
+ throw new AuthProviderNotConfiguredError(provider);
656
+ }
657
+ return this.providerRegistry[provider];
658
+ }
659
+ /**
660
+ * Resolves the configured password provider.
661
+ *
662
+ * @returns Password provider driver with password mutation helpers.
663
+ */
664
+ passwordProvider() {
665
+ const provider = this.requireProvider(PASSWORD_AUTH_PROVIDER);
666
+ if (!(provider instanceof PasswordAuthProvider)) {
667
+ throw new AuthProviderNotConfiguredError(PASSWORD_AUTH_PROVIDER);
668
+ }
669
+ return provider;
670
+ }
671
+ /**
672
+ * Saves a verified provider profile onto a user account.
673
+ *
674
+ * @param user - User receiving the provider link.
675
+ * @param profile - Verified provider profile.
676
+ * @returns Saved provider row.
677
+ */
678
+ async saveLinkedProvider(user, profile) {
679
+ const existing = await this.findProvider(profile.provider, profile.providerUserId);
680
+ const userId = this.userPrimaryKey(user);
681
+ if (!userId) {
682
+ throw new Error('Cannot link an auth provider to a user without an ID.');
683
+ }
684
+ if (existing && existing.userId !== userId) {
685
+ throw new AuthIdentityExistsError('provider', `${profile.provider}:${profile.providerUserId}`);
686
+ }
687
+ const providerRecord = existing ?? new this.ProviderModel({}, {
688
+ db: this.db.knex,
689
+ });
690
+ providerRecord.userId = userId;
691
+ providerRecord.applyProfile(profile);
692
+ await providerRecord.save();
693
+ return providerRecord;
694
+ }
695
+ /**
696
+ * Finds a provider row by provider-owned identity.
697
+ *
698
+ * @param provider - Provider name.
699
+ * @param providerUserId - Provider-owned account id.
700
+ * @returns Matching provider row, or null.
701
+ */
702
+ async findProvider(provider, providerUserId) {
703
+ return this.ProviderModel
704
+ .query(this.db.knex)
705
+ .where('provider', provider)
706
+ .where('providerUserId', providerUserId)
707
+ .first();
708
+ }
709
+ /**
710
+ * Loads the user attached to a provider row.
711
+ *
712
+ * @param provider - Persisted provider row.
713
+ * @returns Linked identity, or null when missing.
714
+ */
715
+ async userForProvider(provider) {
716
+ if (!provider.userId)
717
+ return null;
718
+ return this.IdentityModel.findByPk(provider.userId, this.db.knex);
719
+ }
720
+ /**
721
+ * Creates a user account from a verified external provider profile.
722
+ *
723
+ * @param profile - Verified provider profile.
724
+ * @returns Created identity, or null when no email is available.
725
+ */
726
+ async createIdentityForProvider(profile) {
727
+ const email = profile.email ? normalizeIdentity(profile.email) : null;
728
+ if (!email)
729
+ return null;
730
+ const existing = await this.findIdentity({
731
+ [this.IdentityModel.identityField]: email,
732
+ });
733
+ if (existing) {
734
+ throw new AuthIdentityExistsError(this.IdentityModel.identityField, email);
735
+ }
736
+ const user = new this.IdentityModel({
737
+ name: profile.name || defaultNameForEmail(email),
738
+ email,
739
+ emailVerifiedAt: profile.emailVerifiedAt ?? null,
740
+ avatarUrl: profile.avatarUrl ?? null,
741
+ }, {
742
+ db: this.db.knex,
743
+ });
744
+ await user.save();
745
+ return user;
746
+ }
747
+ /**
748
+ * Backfills account-owned profile fields from a verified provider profile.
749
+ *
750
+ * Provider values are defaults only. Existing account values are preserved
751
+ * so a later user-selected avatar is not overwritten during provider login.
752
+ * The normal login save persists any backfilled values.
753
+ *
754
+ * @param user - Authenticated account receiving missing defaults.
755
+ * @param profile - Verified provider profile.
756
+ */
757
+ applyProviderProfileDefaults(user, profile) {
758
+ if (!user.avatarUrl && profile.avatarUrl) {
759
+ user.avatarUrl = profile.avatarUrl;
760
+ }
761
+ }
762
+ /**
763
+ * Stores the current authenticated user in request or fallback scope.
764
+ *
765
+ * @param user - User to expose as authenticated.
766
+ */
767
+ setAuthenticatedUser(user) {
768
+ if (this.requestContext?.active) {
769
+ this.requestContext.set(AUTH_USER_CONTEXT_KEY, user);
770
+ return;
771
+ }
772
+ this.fallbackAuthenticatedUser = user;
773
+ }
774
+ /**
775
+ * Stores the authenticated token in request or fallback scope.
776
+ *
777
+ * @param token - Token record to expose for session management.
778
+ */
779
+ setAuthenticatedToken(token) {
780
+ if (this.requestContext?.active) {
781
+ this.requestContext.set(AUTH_TOKEN_RECORD_CONTEXT_KEY, token);
782
+ return;
783
+ }
784
+ this.fallbackAuthenticatedToken = token;
785
+ }
786
+ /**
787
+ * Runs a callback with a temporary fallback user outside request scope.
788
+ *
789
+ * @param user - User to expose during the callback.
790
+ * @param callback - Work to run with the temporary user.
791
+ * @returns The callback result.
792
+ */
793
+ runWithFallbackUser(user, callback) {
794
+ const previousUser = this.fallbackAuthenticatedUser;
795
+ this.fallbackAuthenticatedUser = user;
796
+ try {
797
+ const result = callback();
798
+ if (isPromiseLike(result)) {
799
+ return Promise.resolve(result).finally(() => {
800
+ this.fallbackAuthenticatedUser = previousUser;
801
+ });
802
+ }
803
+ this.fallbackAuthenticatedUser = previousUser;
804
+ return result;
805
+ }
806
+ catch (error) {
807
+ this.fallbackAuthenticatedUser = previousUser;
808
+ throw error;
809
+ }
810
+ }
811
+ /**
812
+ * Finds an identity by the configured identity field.
813
+ *
814
+ * @param input - Payload containing the configured identity value.
815
+ * @returns Matching identity, or null.
816
+ */
817
+ async findIdentity(input) {
818
+ const identityField = this.IdentityModel.identityField;
819
+ const identityValue = input[identityField];
820
+ if (identityValue === undefined || identityValue === null) {
821
+ return null;
822
+ }
823
+ return await this.IdentityModel
824
+ .query(this.db.knex)
825
+ .where(identityField, '=', identityValue)
826
+ .first();
827
+ }
828
+ /**
829
+ * Checks whether password reset input belongs to the loaded user.
830
+ *
831
+ * @param input - Reset password payload.
832
+ * @param user - User loaded from the reset token.
833
+ * @returns True when the submitted identity is absent or matches the token user.
834
+ */
835
+ async passwordResetIdentityMatches(input, user) {
836
+ const identityField = this.IdentityModel.identityField;
837
+ const inputIdentity = input[identityField];
838
+ if (inputIdentity === undefined || inputIdentity === null || inputIdentity === '') {
839
+ return true;
840
+ }
841
+ const inputUser = await this.findIdentity(input);
842
+ return inputUser?.get(this.IdentityModel.primaryKey) === user.get(this.IdentityModel.primaryKey);
843
+ }
844
+ /**
845
+ * Reads a user primary key as a non-empty string.
846
+ *
847
+ * @param user - User model to inspect.
848
+ * @returns Primary key string, or null when missing.
849
+ */
850
+ userPrimaryKey(user) {
851
+ const value = user.get(this.IdentityModel.primaryKey);
852
+ return value === null || value === undefined || value === ''
853
+ ? null
854
+ : String(value);
855
+ }
856
+ /**
857
+ * Reads the configured identity value from a user.
858
+ *
859
+ * @param user - User model to inspect.
860
+ * @returns Normalized identity value, or null when missing.
861
+ */
862
+ userIdentityValue(user) {
863
+ return normalizeIdentity(user.get(this.IdentityModel.identityField));
864
+ }
865
+ /**
866
+ * Reads the configured identity value from a payload.
867
+ *
868
+ * @param input - Payload to inspect.
869
+ * @returns Normalized identity value, or null when missing.
870
+ */
871
+ normalizedIdentity(input) {
872
+ return normalizeIdentity(input[this.IdentityModel.identityField]);
873
+ }
874
+ /**
875
+ * Calculates the default bearer token expiry.
876
+ *
877
+ * @param expiresInMs - Optional token lifetime override.
878
+ * @returns Absolute expiry time, or null for a non-expiring token.
879
+ */
880
+ defaultTokenExpiry(expiresInMs) {
881
+ const lifetime = expiresInMs === undefined
882
+ ? this.tokenLifetimeMs
883
+ : expiresInMs;
884
+ return lifetime === null
885
+ ? null
886
+ : new Date(Date.now() + lifetime);
887
+ }
888
+ /**
889
+ * Calculates the default password reset token expiry.
890
+ *
891
+ * @param expiresInMs - Optional reset token lifetime override.
892
+ * @returns Absolute expiry time.
893
+ */
894
+ defaultPasswordResetTokenExpiry(expiresInMs) {
895
+ return new Date(Date.now() + (expiresInMs ?? this.passwordResetTokenLifetimeMs));
896
+ }
897
+ }
898
+ /**
899
+ * Normalizes an auth identity value for provider matching.
900
+ *
901
+ * @param value - Unknown identity value.
902
+ * @returns Lowercase trimmed identity string, or null.
903
+ */
904
+ function normalizeIdentity(value) {
905
+ if (typeof value !== 'string')
906
+ return null;
907
+ const normalized = value.trim().toLowerCase();
908
+ return normalized || null;
909
+ }
910
+ /**
911
+ * Builds a fallback display name from an email address.
912
+ *
913
+ * @param email - Normalized email address.
914
+ * @returns Human-readable display name.
915
+ */
916
+ function defaultNameForEmail(email) {
917
+ return email.replace(/@.+$/, '') || 'User';
918
+ }
919
+ /**
920
+ * Checks whether a driver owns custom provider-link behavior.
921
+ *
922
+ * @param driver - Provider driver to inspect.
923
+ * @returns True when a custom link method is available.
924
+ */
925
+ function hasProviderLink(driver) {
926
+ return typeof driver.link === 'function';
927
+ }