@maestro-js/agent-skills 1.0.0-alpha.17 → 1.0.0-alpha.19

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 (24) hide show
  1. package/package.json +1 -1
  2. package/skills/maestro-examples/references/cadence/cadence-web/app/components/date-range.tsx +3 -26
  3. package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.reset-password.tsx +1 -14
  4. package/skills/maestro-examples/references/cadence/cadence-web/package.json +6 -6
  5. package/skills/maestro-examples/references/cadence/package.json +4 -4
  6. package/skills/maestro-examples/references/cadence/packages/schemas/package.json +1 -1
  7. package/skills/maestro-examples/references/cadence/packages/services/package.json +19 -19
  8. package/skills/maestro-examples/references/cadence/packages/services/src/auth/auth-use-cases.ts +4 -5
  9. package/skills/maestro-examples/references/cadence/packages/services/src/maestro.ts +5 -2
  10. package/skills/maestro-examples/references/cadence/specs/multi-tenant-security.md +1 -1
  11. package/skills/maestro-examples/references/chorus/chorus-web/package.json +5 -5
  12. package/skills/maestro-examples/references/chorus/infrastructure/package.json +2 -2
  13. package/skills/maestro-examples/references/chorus/package.json +4 -4
  14. package/skills/maestro-examples/references/chorus/packages/schemas/package.json +1 -1
  15. package/skills/maestro-examples/references/chorus/packages/services/package.json +21 -21
  16. package/skills/maestro-examples/references/chorus/packages/services/src/auth/auth-use-cases.ts +2 -2
  17. package/skills/maestro-examples/references/chorus/packages/services/src/auth/password-reset-token-db-provider.ts +1 -2
  18. package/skills/maestro-examples/references/chorus/packages/services/src/maestro.ts +5 -2
  19. package/skills/maestro-examples/references/setlist/infrastructure/package.json +2 -2
  20. package/skills/maestro-examples/references/setlist/package.json +4 -4
  21. package/skills/maestro-examples/references/setlist/packages/schemas/package.json +1 -1
  22. package/skills/maestro-examples/references/setlist/packages/services/package.json +15 -15
  23. package/skills/maestro-examples/references/setlist/queue-processor/package.json +2 -2
  24. package/skills/maestro-examples/references/setlist/setlist-web/package.json +3 -3
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "devDependencies": {
12
12
  "@types/node": "^22.19.11"
13
13
  },
14
- "version": "1.0.0-alpha.17",
14
+ "version": "1.0.0-alpha.19",
15
15
  "publishConfig": {
16
16
  "access": "restricted"
17
17
  },
@@ -16,6 +16,7 @@ import {
16
16
  import { twMerge } from 'tailwind-merge'
17
17
  import { parseDate, type CalendarDate, type DateValue } from '@internationalized/date'
18
18
  import type { Iso } from 'iso-fns'
19
+ import { Icon } from './icon'
19
20
 
20
21
  export type DateRangeRootAdditionalProps = {
21
22
  defaultStart: Iso.Date | null
@@ -77,11 +78,11 @@ export function DateRangePicker(props: DateRangePickerProps) {
77
78
  >
78
79
  <header className="flex items-center justify-between mb-2 px-1">
79
80
  <Button slot="previous" className="p-1 hover:bg-neutral-100 rounded cursor-pointer">
80
- <ChevronLeft />
81
+ <Icon name="chevron-left" />
81
82
  </Button>
82
83
  <Heading className="text-sm font-semibold text-neutral-900 flex-1 text-center" />
83
84
  <Button slot="next" className="p-1 hover:bg-neutral-100 rounded cursor-pointer">
84
- <ChevronRight />
85
+ <Icon name="chevron-right" />
85
86
  </Button>
86
87
  </header>
87
88
  <div className="flex gap-4">
@@ -138,27 +139,3 @@ export function DateRangePicker(props: DateRangePickerProps) {
138
139
  </I18nProvider>
139
140
  )
140
141
  }
141
-
142
- function ChevronLeft() {
143
- return (
144
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" className="w-4 h-4">
145
- <path
146
- fillRule="evenodd"
147
- d="M11.78 5.22a.75.75 0 0 1 0 1.06L8.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z"
148
- clipRule="evenodd"
149
- />
150
- </svg>
151
- )
152
- }
153
-
154
- function ChevronRight() {
155
- return (
156
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" className="w-4 h-4">
157
- <path
158
- fillRule="evenodd"
159
- d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 1 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z"
160
- clipRule="evenodd"
161
- />
162
- </svg>
163
- )
164
- }
@@ -3,7 +3,7 @@ import type { LoaderFunctionArgs, ActionFunctionArgs } from 'react-router'
3
3
  import { z } from 'zod'
4
4
  import { getRequestContext } from '~/features/request-context.server'
5
5
  import { redirectWithToast } from '~/features/redirect-with-toast.server'
6
- import { AuthService, Db, Log } from '~/services.server'
6
+ import { AuthService, Log } from '~/services.server'
7
7
  import { Form } from '~/components/form'
8
8
  import { TextField } from '~/components/text-field'
9
9
  import { Button } from '~/components/button'
@@ -46,21 +46,8 @@ export async function action({ request, context }: ActionFunctionArgs) {
46
46
 
47
47
  const { token, newPassword } = parsed.data
48
48
 
49
- // Extract selector from token to look up authenticatableId
50
- const [selector] = token.split('|')
51
- if (!selector) {
52
- return Form.customValidationError({ message: 'Invalid reset token.', formData })
53
- }
54
-
55
- const rows = await Db.select('SELECT userId FROM passwordResetTokens WHERE selector = ?', [selector])
56
- const row = rows[0] as { userId: number } | undefined
57
- if (!row) {
58
- return Form.customValidationError({ message: 'Invalid or expired reset token.', formData })
59
- }
60
-
61
49
  try {
62
50
  await AuthService.ResetPassword({
63
- authenticatableId: row.userId,
64
51
  token,
65
52
  newPassword
66
53
  })
@@ -14,10 +14,10 @@
14
14
  "@cadence/schemas": "workspace:*",
15
15
  "@cadence/services": "workspace:*",
16
16
  "@internationalized/date": "^3.11.0",
17
- "@maestro-js/custom-errors": "^1.0.0-alpha.17",
18
- "@maestro-js/log": "^1.0.0-alpha.17",
19
- "@maestro-js/form": "^1.0.0-alpha.17",
20
- "@maestro-js/permissions": "^1.0.0-alpha.17",
17
+ "@maestro-js/custom-errors": "^1.0.0-alpha.19",
18
+ "@maestro-js/log": "^1.0.0-alpha.19",
19
+ "@maestro-js/form": "^1.0.0-alpha.19",
20
+ "@maestro-js/permissions": "^1.0.0-alpha.19",
21
21
  "@react-aria/interactions": "^3.27.0",
22
22
  "@react-aria/utils": "^3.33.0",
23
23
  "@react-router/node": "^7.9.0",
@@ -41,8 +41,8 @@
41
41
  "zod": "^4.0.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@maestro-js/cli": "^1.0.0-alpha.17",
45
- "@maestro-js/react-router-file-routes": "^1.0.0-alpha.17",
44
+ "@maestro-js/cli": "^1.0.0-alpha.19",
45
+ "@maestro-js/react-router-file-routes": "^1.0.0-alpha.19",
46
46
  "@playwright/test": "^1.52.0",
47
47
  "@react-router/dev": "^7.9.0",
48
48
  "@tailwindcss/typography": "^0.5.19",
@@ -6,12 +6,12 @@
6
6
  "fks-restrict": "maestro config:run --config services -- node ./scripts/foreign-key-delete-behavior.ts restrict"
7
7
  },
8
8
  "dependencies": {
9
- "@maestro-js/config": "^1.0.0-alpha.17"
9
+ "@maestro-js/config": "^1.0.0-alpha.19"
10
10
  },
11
11
  "devDependencies": {
12
- "@maestro-js/cli": "^1.0.0-alpha.17",
13
- "@maestro-js/db-migrate": "^1.0.0-alpha.17",
14
- "@maestro-js/db": "^1.0.0-alpha.17",
12
+ "@maestro-js/cli": "^1.0.0-alpha.19",
13
+ "@maestro-js/db-migrate": "^1.0.0-alpha.19",
14
+ "@maestro-js/db": "^1.0.0-alpha.19",
15
15
  "@types/node": "^22.19.11"
16
16
  }
17
17
  }
@@ -11,7 +11,7 @@
11
11
  "dependencies": {
12
12
  "iso-fns": "npm:iso-fns@2.0.0-alpha.26",
13
13
  "zod": "^4.3.0",
14
- "@maestro-js/iso-zod": "^1.0.0-alpha.17"
14
+ "@maestro-js/iso-zod": "^1.0.0-alpha.19"
15
15
  },
16
16
  "devDependencies": {}
17
17
  }
@@ -12,30 +12,30 @@
12
12
  "dependencies": {
13
13
  "@aws-sdk/client-ses": "^3.1004.0",
14
14
  "@cadence/schemas": "workspace:*",
15
- "@maestro-js/auth": "^1.0.0-alpha.17",
16
- "@maestro-js/cache": "^1.0.0-alpha.17",
17
- "@maestro-js/config": "^1.0.0-alpha.17",
18
- "@maestro-js/crypt": "^1.0.0-alpha.17",
19
- "@maestro-js/custom-errors": "^1.0.0-alpha.17",
20
- "@maestro-js/db": "^1.0.0-alpha.17",
21
- "@maestro-js/exceptions": "^1.0.0-alpha.17",
22
- "@maestro-js/hash": "^1.0.0-alpha.17",
23
- "@maestro-js/helpers": "^1.0.0-alpha.17",
24
- "@maestro-js/iso-zod": "^1.0.0-alpha.17",
25
- "@maestro-js/log": "^1.0.0-alpha.17",
26
- "@maestro-js/mail": "^1.0.0-alpha.17",
27
- "@maestro-js/password": "^1.0.0-alpha.17",
28
- "@maestro-js/permissions": "^1.0.0-alpha.17",
29
- "@maestro-js/queue": "^1.0.0-alpha.17",
30
- "@maestro-js/rate-limiting": "^1.0.0-alpha.17",
31
- "@maestro-js/recurring-jobs": "^1.0.0-alpha.17",
32
- "@maestro-js/session": "^1.0.0-alpha.17",
15
+ "@maestro-js/auth": "^1.0.0-alpha.19",
16
+ "@maestro-js/cache": "^1.0.0-alpha.19",
17
+ "@maestro-js/config": "^1.0.0-alpha.19",
18
+ "@maestro-js/crypt": "^1.0.0-alpha.19",
19
+ "@maestro-js/custom-errors": "^1.0.0-alpha.19",
20
+ "@maestro-js/db": "^1.0.0-alpha.19",
21
+ "@maestro-js/exceptions": "^1.0.0-alpha.19",
22
+ "@maestro-js/hash": "^1.0.0-alpha.19",
23
+ "@maestro-js/helpers": "^1.0.0-alpha.19",
24
+ "@maestro-js/iso-zod": "^1.0.0-alpha.19",
25
+ "@maestro-js/log": "^1.0.0-alpha.19",
26
+ "@maestro-js/mail": "^1.0.0-alpha.19",
27
+ "@maestro-js/password": "^1.0.0-alpha.19",
28
+ "@maestro-js/permissions": "^1.0.0-alpha.19",
29
+ "@maestro-js/queue": "^1.0.0-alpha.19",
30
+ "@maestro-js/rate-limiting": "^1.0.0-alpha.19",
31
+ "@maestro-js/recurring-jobs": "^1.0.0-alpha.19",
32
+ "@maestro-js/session": "^1.0.0-alpha.19",
33
33
  "iso-fns": "npm:iso-fns@2.0.0-alpha.26",
34
34
  "sanitize-html": "^2.17.2",
35
35
  "zod": "^4.3.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@maestro-js/cli": "^1.0.0-alpha.17",
38
+ "@maestro-js/cli": "^1.0.0-alpha.19",
39
39
  "@types/node": "^22.0.0",
40
40
  "@types/sanitize-html": "^2.16.1",
41
41
  "beartest-js": "^8.0.2"
@@ -122,7 +122,7 @@ export const RequestPasswordReset = z
122
122
  await RateLimiting.increment(throttleKey, 1, REQUEST_RESET_THROTTLE_SECONDS)
123
123
  }
124
124
 
125
- const token = await Password.createPasswordResetToken(user.id)
125
+ const token = await Password.createPasswordResetToken(user.id, { expirationMinutes: 60 })
126
126
 
127
127
  await Mail.send({
128
128
  to: email,
@@ -141,16 +141,15 @@ export const ResetPassword = z
141
141
  .function({
142
142
  input: [
143
143
  z.object({
144
- authenticatableId: z.number(),
145
144
  token: z.string(),
146
145
  newPassword: z.string().min(8)
147
146
  })
148
147
  ]
149
148
  })
150
- .implement(async ({ authenticatableId, token, newPassword }) => {
151
- await Password.resetPassword({ authenticatableId, token, newPassword })
149
+ .implement(async ({ token, newPassword }) => {
150
+ await Password.resetPassword({ token, newPassword })
152
151
 
153
152
  // credentialsInvalidBefore is set by Password.resetPassword() internally,
154
153
  // which invalidates all existing sessions
155
- log.info('Password reset completed', { action: 'auth.resetPassword', userId: authenticatableId })
154
+ log.info('Password reset completed', { action: 'auth.resetPassword' })
156
155
  })
@@ -5,7 +5,7 @@ import { Cache } from '@maestro-js/cache'
5
5
  import { Hash } from '@maestro-js/hash'
6
6
  import { Crypt } from '@maestro-js/crypt'
7
7
  import { Auth } from '@maestro-js/auth'
8
- import { Password } from '@maestro-js/password'
8
+ import { Password, PasswordReset } from '@maestro-js/password'
9
9
  import { Session } from '@maestro-js/session'
10
10
  import { RateLimiting } from '@maestro-js/rate-limiting'
11
11
  import { Queue } from '@maestro-js/queue'
@@ -58,7 +58,10 @@ Password.Provider.register(
58
58
  updatePasswordHash: authDbProvider.updatePasswordHash,
59
59
  updateCredentialsInvalidBefore: authDbProvider.updateCredentialsInvalidBefore,
60
60
  hash: Hash.provider('bcrypt'),
61
- passwordResetOptions: authDbProvider.passwordResetToken
61
+ passwordReset: PasswordReset.create<number>({
62
+ ...authDbProvider.passwordResetToken,
63
+ hash: Hash.provider('bcrypt')
64
+ })
62
65
  })
63
66
  )
64
67
 
@@ -215,7 +215,7 @@ const deleteInteraction = z.function(
215
215
  3. `Password.createPasswordResetToken(userId)` generates a selector-verifier token pair, hashes the verifier, and stores the record
216
216
  4. The token is sent to the user's email (via `@maestro-js/mail`)
217
217
  5. User clicks the link and submits a new password
218
- 6. `Password.resetPassword({ authenticatableId, token, newPassword })` validates the token, updates the hash, and sets `credentialsInvalidBefore` to now — invalidating all existing sessions
218
+ 6. `Password.resetPassword({ token, newPassword })` validates the token, updates the hash, and sets `credentialsInvalidBefore` to now — invalidating all existing sessions
219
219
 
220
220
  Built-in protections:
221
221
  - **Throttling** — A new reset token cannot be generated within 60 seconds of the previous one
@@ -13,9 +13,9 @@
13
13
  "dependencies": {
14
14
  "@bundled-es-modules/pdfjs-dist": "3.6.172-alpha.1",
15
15
  "@internationalized/date": "^3.11.0",
16
- "@maestro-js/form": "^1.0.0-alpha.17",
17
- "@maestro-js/permissions": "^1.0.0-alpha.17",
18
- "@maestro-js/custom-errors": "^1.0.0-alpha.17",
16
+ "@maestro-js/form": "^1.0.0-alpha.19",
17
+ "@maestro-js/permissions": "^1.0.0-alpha.19",
18
+ "@maestro-js/custom-errors": "^1.0.0-alpha.19",
19
19
  "@react-aria/interactions": "^3.27.0",
20
20
  "@react-aria/utils": "^3.33.0",
21
21
  "@react-router/node": "^7.9.0",
@@ -36,8 +36,8 @@
36
36
  "@sentry/react-router": "^9"
37
37
  },
38
38
  "devDependencies": {
39
- "@maestro-js/cli": "^1.0.0-alpha.17",
40
- "@maestro-js/react-router-file-routes": "^1.0.0-alpha.17",
39
+ "@maestro-js/cli": "^1.0.0-alpha.19",
40
+ "@maestro-js/react-router-file-routes": "^1.0.0-alpha.19",
41
41
  "@playwright/test": "^1.58.2",
42
42
  "@react-router/dev": "^7.9.0",
43
43
  "@tailwindcss/vite": "^4.2.0",
@@ -10,8 +10,8 @@
10
10
  "aws-whoami": "aws sts get-caller-identity"
11
11
  },
12
12
  "dependencies": {
13
- "@maestro-js/aws-cdk-recipes": "^1.0.0-alpha.17",
14
- "@maestro-js/db-migrate": "^1.0.0-alpha.17",
13
+ "@maestro-js/aws-cdk-recipes": "^1.0.0-alpha.19",
14
+ "@maestro-js/db-migrate": "^1.0.0-alpha.19",
15
15
  "aws-cdk": "^2.1106.1",
16
16
  "aws-cdk-lib": "^2.178.0",
17
17
  "constructs": "^10.4.2",
@@ -6,12 +6,12 @@
6
6
  "fks-restrict": "maestro config:run --config services -- node ./scripts/foreign-key-delete-behavior.ts restrict"
7
7
  },
8
8
  "dependencies": {
9
- "@maestro-js/config": "^1.0.0-alpha.17"
9
+ "@maestro-js/config": "^1.0.0-alpha.19"
10
10
  },
11
11
  "devDependencies": {
12
- "@maestro-js/cli": "^1.0.0-alpha.17",
13
- "@maestro-js/db-migrate": "^1.0.0-alpha.17",
14
- "@maestro-js/db": "^1.0.0-alpha.17",
12
+ "@maestro-js/cli": "^1.0.0-alpha.19",
13
+ "@maestro-js/db-migrate": "^1.0.0-alpha.19",
14
+ "@maestro-js/db": "^1.0.0-alpha.19",
15
15
  "@types/node": "^22.19.11"
16
16
  }
17
17
  }
@@ -11,7 +11,7 @@
11
11
  "dependencies": {
12
12
  "iso-fns": "npm:iso-fns@2.0.0-alpha.26",
13
13
  "zod": "^4.3.0",
14
- "@maestro-js/iso-zod": "^1.0.0-alpha.17"
14
+ "@maestro-js/iso-zod": "^1.0.0-alpha.19"
15
15
  },
16
16
  "devDependencies": {}
17
17
  }
@@ -14,33 +14,33 @@
14
14
  "@aws-sdk/client-ses": "^3.1004.0",
15
15
  "@dicebear/collection": "^9.4.0",
16
16
  "@dicebear/core": "^9.4.0",
17
- "@maestro-js/auth": "^1.0.0-alpha.17",
18
- "@maestro-js/cache": "^1.0.0-alpha.17",
19
- "@maestro-js/config": "^1.0.0-alpha.17",
20
- "@maestro-js/crypt": "^1.0.0-alpha.17",
21
- "@maestro-js/custom-errors": "^1.0.0-alpha.17",
22
- "@maestro-js/db": "^1.0.0-alpha.17",
23
- "@maestro-js/exceptions": "^1.0.0-alpha.17",
24
- "@maestro-js/file-storage": "^1.0.0-alpha.17",
25
- "@maestro-js/hash": "^1.0.0-alpha.17",
26
- "@maestro-js/helpers": "^1.0.0-alpha.17",
27
- "@maestro-js/iso-zod": "^1.0.0-alpha.17",
28
- "@maestro-js/log": "^1.0.0-alpha.17",
29
- "@maestro-js/mail": "^1.0.0-alpha.17",
30
- "@maestro-js/password": "^1.0.0-alpha.17",
31
- "@maestro-js/permissions": "^1.0.0-alpha.17",
32
- "@maestro-js/queue": "^1.0.0-alpha.17",
33
- "@maestro-js/rate-limiting": "^1.0.0-alpha.17",
34
- "@maestro-js/recurring-jobs": "^1.0.0-alpha.17",
35
- "@maestro-js/session": "^1.0.0-alpha.17",
36
- "@maestro-js/signed-url": "^1.0.0-alpha.17",
17
+ "@maestro-js/auth": "^1.0.0-alpha.19",
18
+ "@maestro-js/cache": "^1.0.0-alpha.19",
19
+ "@maestro-js/config": "^1.0.0-alpha.19",
20
+ "@maestro-js/crypt": "^1.0.0-alpha.19",
21
+ "@maestro-js/custom-errors": "^1.0.0-alpha.19",
22
+ "@maestro-js/db": "^1.0.0-alpha.19",
23
+ "@maestro-js/exceptions": "^1.0.0-alpha.19",
24
+ "@maestro-js/file-storage": "^1.0.0-alpha.19",
25
+ "@maestro-js/hash": "^1.0.0-alpha.19",
26
+ "@maestro-js/helpers": "^1.0.0-alpha.19",
27
+ "@maestro-js/iso-zod": "^1.0.0-alpha.19",
28
+ "@maestro-js/log": "^1.0.0-alpha.19",
29
+ "@maestro-js/mail": "^1.0.0-alpha.19",
30
+ "@maestro-js/password": "^1.0.0-alpha.19",
31
+ "@maestro-js/permissions": "^1.0.0-alpha.19",
32
+ "@maestro-js/queue": "^1.0.0-alpha.19",
33
+ "@maestro-js/rate-limiting": "^1.0.0-alpha.19",
34
+ "@maestro-js/recurring-jobs": "^1.0.0-alpha.19",
35
+ "@maestro-js/session": "^1.0.0-alpha.19",
36
+ "@maestro-js/signed-url": "^1.0.0-alpha.19",
37
37
  "@chorus/email-templates": "workspace:*",
38
38
  "@chorus/schemas": "workspace:*",
39
39
  "iso-fns": "npm:iso-fns@2.0.0-alpha.26",
40
40
  "zod": "^4.3.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@maestro-js/cli": "^1.0.0-alpha.17",
43
+ "@maestro-js/cli": "^1.0.0-alpha.19",
44
44
  "@types/node": "^22.0.0",
45
45
  "beartest-js": "^8.0.2"
46
46
  }
@@ -136,7 +136,7 @@ export const ForgotPassword = z
136
136
 
137
137
  if (!user) return
138
138
 
139
- const token = await Password.createPasswordResetToken(user.id)
139
+ const token = await Password.createPasswordResetToken(user.id, { expirationMinutes: 15 })
140
140
  const signedUrlSearchParams = await SignedUrl.signURL(
141
141
  new URLSearchParams({
142
142
  token,
@@ -173,6 +173,6 @@ export const ResetPassword = z
173
173
  ]
174
174
  })
175
175
  .implement(async ({ token, authenticatableId, newPassword, session, deviceContext }) => {
176
- await Password.resetPassword({ authenticatableId, token, newPassword })
176
+ await Password.resetPassword({ token, newPassword })
177
177
  return Auth.loginById({ id: authenticatableId, session, deviceContext })
178
178
  })
@@ -54,6 +54,5 @@ export const passwordResetTokenDbProvider = {
54
54
  create,
55
55
  getBySelector,
56
56
  getByAuthenticatableId,
57
- deleteByAuthenticatableId,
58
- tokenExpirationMinutes: 15
57
+ deleteByAuthenticatableId
59
58
  }
@@ -3,7 +3,7 @@ import { Cache } from '@maestro-js/cache'
3
3
  import { Hash } from '@maestro-js/hash'
4
4
  import { Crypt } from '@maestro-js/crypt'
5
5
  import { Auth } from '@maestro-js/auth'
6
- import { Password } from '@maestro-js/password'
6
+ import { Password, PasswordReset } from '@maestro-js/password'
7
7
  import { authenticatableDbProvider } from './auth/authenticatable-db-provider.ts'
8
8
  import { rememberMeTokenDbProvider } from './auth/remember-me-token-db-provider.ts'
9
9
  import { passwordResetTokenDbProvider } from './auth/password-reset-token-db-provider.ts'
@@ -70,7 +70,10 @@ Password.Provider.register(
70
70
  updatePasswordHash: authenticatableDbProvider.updatePasswordHash,
71
71
  updateCredentialsInvalidBefore: authenticatableDbProvider.updateCredentialsInvalidBefore,
72
72
  hash: Hash.provider('bcrypt'),
73
- passwordResetOptions: passwordResetTokenDbProvider
73
+ passwordReset: PasswordReset.create<number>({
74
+ ...passwordResetTokenDbProvider,
75
+ hash: Hash.provider('bcrypt')
76
+ })
74
77
  })
75
78
  )
76
79
 
@@ -10,8 +10,8 @@
10
10
  "aws-whoami": "aws sts get-caller-identity"
11
11
  },
12
12
  "dependencies": {
13
- "@maestro-js/aws-cdk-recipes": "^1.0.0-alpha.17",
14
- "@maestro-js/db-migrate": "^1.0.0-alpha.17",
13
+ "@maestro-js/aws-cdk-recipes": "^1.0.0-alpha.19",
14
+ "@maestro-js/db-migrate": "^1.0.0-alpha.19",
15
15
  "aws-cdk": "^2.1106.1",
16
16
  "aws-cdk-lib": "^2.178.0",
17
17
  "constructs": "^10.4.2",
@@ -6,13 +6,13 @@
6
6
  "fks-restrict": "maestro config:run --config services -- node ./scripts/foreign-key-delete-behavior.ts restrict"
7
7
  },
8
8
  "dependencies": {
9
- "@maestro-js/config": "^1.0.0-alpha.17",
9
+ "@maestro-js/config": "^1.0.0-alpha.19",
10
10
  "@setlist/services": "workspace:*"
11
11
  },
12
12
  "devDependencies": {
13
- "@maestro-js/cli": "^1.0.0-alpha.17",
14
- "@maestro-js/db-migrate": "^1.0.0-alpha.17",
15
- "@maestro-js/db": "^1.0.0-alpha.17",
13
+ "@maestro-js/cli": "^1.0.0-alpha.19",
14
+ "@maestro-js/db-migrate": "^1.0.0-alpha.19",
15
+ "@maestro-js/db": "^1.0.0-alpha.19",
16
16
  "@types/node": "^22.19.11",
17
17
  "tsx": "^4.21.0"
18
18
  }
@@ -12,7 +12,7 @@
12
12
  "dependencies": {
13
13
  "iso-fns": "npm:iso-fns@2.0.0-alpha.26",
14
14
  "zod": "^4.3.0",
15
- "@maestro-js/iso-zod": "^1.0.0-alpha.17"
15
+ "@maestro-js/iso-zod": "^1.0.0-alpha.19"
16
16
  },
17
17
  "devDependencies": {
18
18
  "tsup": "^8.0.2",
@@ -10,27 +10,27 @@
10
10
  "typecheck": "tsc --noEmit"
11
11
  },
12
12
  "dependencies": {
13
- "@maestro-js/auth": "^1.0.0-alpha.17",
14
- "@maestro-js/cache": "^1.0.0-alpha.17",
15
- "@maestro-js/crypt": "^1.0.0-alpha.17",
16
- "@maestro-js/custom-errors": "^1.0.0-alpha.17",
17
- "@maestro-js/db": "^1.0.0-alpha.17",
18
- "@maestro-js/iso-zod": "^1.0.0-alpha.17",
19
- "@maestro-js/hash": "^1.0.0-alpha.17",
20
- "@maestro-js/helpers": "^1.0.0-alpha.17",
21
- "@maestro-js/log": "^1.0.0-alpha.17",
22
- "@maestro-js/mail": "^1.0.0-alpha.17",
23
- "@maestro-js/queue": "^1.0.0-alpha.17",
24
- "@maestro-js/rate-limiting": "^1.0.0-alpha.17",
25
- "@maestro-js/recurring-jobs": "^1.0.0-alpha.17",
26
- "@maestro-js/session": "^1.0.0-alpha.17",
13
+ "@maestro-js/auth": "^1.0.0-alpha.19",
14
+ "@maestro-js/cache": "^1.0.0-alpha.19",
15
+ "@maestro-js/crypt": "^1.0.0-alpha.19",
16
+ "@maestro-js/custom-errors": "^1.0.0-alpha.19",
17
+ "@maestro-js/db": "^1.0.0-alpha.19",
18
+ "@maestro-js/iso-zod": "^1.0.0-alpha.19",
19
+ "@maestro-js/hash": "^1.0.0-alpha.19",
20
+ "@maestro-js/helpers": "^1.0.0-alpha.19",
21
+ "@maestro-js/log": "^1.0.0-alpha.19",
22
+ "@maestro-js/mail": "^1.0.0-alpha.19",
23
+ "@maestro-js/queue": "^1.0.0-alpha.19",
24
+ "@maestro-js/rate-limiting": "^1.0.0-alpha.19",
25
+ "@maestro-js/recurring-jobs": "^1.0.0-alpha.19",
26
+ "@maestro-js/session": "^1.0.0-alpha.19",
27
27
  "@setlist/email-templates": "workspace:*",
28
28
  "@setlist/schemas": "workspace:*",
29
29
  "iso-fns": "npm:iso-fns@2.0.0-alpha.26",
30
30
  "zod": "^4.3.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@maestro-js/cli": "^1.0.0-alpha.17",
33
+ "@maestro-js/cli": "^1.0.0-alpha.19",
34
34
  "@aws-sdk/client-ses": "^3.0.0",
35
35
  "@types/node": "^22.0.0",
36
36
  "mailtrap": "^4.0.0",
@@ -6,11 +6,11 @@
6
6
  "start": "maestro config:run --config queue-processor -- tsx src/index.ts"
7
7
  },
8
8
  "dependencies": {
9
- "@maestro-js/config": "^1.0.0-alpha.17",
9
+ "@maestro-js/config": "^1.0.0-alpha.19",
10
10
  "@setlist/services": "workspace:*"
11
11
  },
12
12
  "devDependencies": {
13
- "@maestro-js/cli": "^1.0.0-alpha.17",
13
+ "@maestro-js/cli": "^1.0.0-alpha.19",
14
14
  "@types/node": "^22.19.11",
15
15
  "tsx": "^4.21.0"
16
16
  }
@@ -16,8 +16,8 @@
16
16
  "@dnd-kit/core": "^6.3.1",
17
17
  "@dnd-kit/sortable": "^10.0.0",
18
18
  "@dnd-kit/utilities": "^3.2.2",
19
- "@maestro-js/form": "^1.0.0-alpha.17",
20
- "@maestro-js/react-router-file-routes": "^1.0.0-alpha.17",
19
+ "@maestro-js/form": "^1.0.0-alpha.19",
20
+ "@maestro-js/react-router-file-routes": "^1.0.0-alpha.19",
21
21
  "@react-aria/interactions": "^3.27.0",
22
22
  "@react-aria/utils": "^3.33.0",
23
23
  "@react-router/node": "^7.9.0",
@@ -36,7 +36,7 @@
36
36
  "zod": "^4.0.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@maestro-js/cli": "^1.0.0-alpha.17",
39
+ "@maestro-js/cli": "^1.0.0-alpha.19",
40
40
  "@react-router/dev": "^7.9.0",
41
41
  "@tailwindcss/vite": "^4.2.0",
42
42
  "@types/node": "^22.19.11",