@maestro-js/agent-skills 1.0.0-alpha.22 → 1.0.0-alpha.3
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.
- package/dist/bin.js +9 -5
- package/package.json +1 -1
- package/skills/maestro-examples/references/cadence/cadence-web/app/components/date-range.tsx +26 -3
- package/skills/maestro-examples/references/cadence/cadence-web/app/features/request-context.server.ts +1 -1
- package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.reset-password.tsx +14 -1
- package/skills/maestro-examples/references/cadence/cadence-web/package.json +6 -6
- package/skills/maestro-examples/references/cadence/package.json +4 -4
- package/skills/maestro-examples/references/cadence/packages/schemas/package.json +1 -1
- package/skills/maestro-examples/references/cadence/packages/services/package.json +19 -19
- package/skills/maestro-examples/references/cadence/packages/services/src/auth/auth-use-cases.ts +5 -4
- package/skills/maestro-examples/references/cadence/specs/multi-tenant-security.md +1 -1
- package/skills/maestro-examples/references/chorus/chorus-web/app/features/request-context.server.ts +2 -2
- package/skills/maestro-examples/references/chorus/chorus-web/package.json +6 -6
- package/skills/maestro-examples/references/chorus/infrastructure/package.json +2 -2
- package/skills/maestro-examples/references/chorus/package.json +4 -4
- package/skills/maestro-examples/references/chorus/packages/schemas/package.json +1 -1
- package/skills/maestro-examples/references/chorus/packages/services/package.json +21 -21
- package/skills/maestro-examples/references/chorus/packages/services/src/auth/auth-use-cases.ts +2 -2
- package/skills/maestro-examples/references/chorus/packages/services/src/auth/password-reset-token-db-provider.ts +2 -1
- package/skills/maestro-examples/references/chorus/packages/services/src/maestro.ts +1 -3
- package/skills/maestro-examples/references/setlist/infrastructure/package.json +2 -2
- package/skills/maestro-examples/references/setlist/package.json +4 -4
- package/skills/maestro-examples/references/setlist/packages/schemas/package.json +1 -1
- package/skills/maestro-examples/references/setlist/packages/services/package.json +15 -15
- package/skills/maestro-examples/references/setlist/queue-processor/package.json +2 -2
- package/skills/maestro-examples/references/setlist/setlist-web/app/features/request-context.server.ts +1 -1
- package/skills/maestro-examples/references/setlist/setlist-web/package.json +3 -3
package/dist/bin.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
2
3
|
|
|
3
4
|
// src/bin.ts
|
|
4
5
|
import path from "path";
|
|
5
|
-
import {
|
|
6
|
+
import { execSync } from "child_process";
|
|
6
7
|
import { parseArgs } from "util";
|
|
7
8
|
var { values } = parseArgs({
|
|
8
9
|
options: {
|
|
@@ -12,8 +13,11 @@ var { values } = parseArgs({
|
|
|
12
13
|
strict: false
|
|
13
14
|
});
|
|
14
15
|
var skillsPath = path.resolve(import.meta.dirname, "..");
|
|
15
|
-
var args = ["
|
|
16
|
-
if (!values.interactive) args.push("
|
|
16
|
+
var args = ["npx", "skills", "add", skillsPath];
|
|
17
|
+
if (!values.interactive) args.push("--all");
|
|
17
18
|
if (values.copy) args.push("--copy");
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
try {
|
|
20
|
+
execSync(args.join(" "), { stdio: "inherit" });
|
|
21
|
+
} catch {
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
package/package.json
CHANGED
package/skills/maestro-examples/references/cadence/cadence-web/app/components/date-range.tsx
CHANGED
|
@@ -16,7 +16,6 @@ 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'
|
|
20
19
|
|
|
21
20
|
export type DateRangeRootAdditionalProps = {
|
|
22
21
|
defaultStart: Iso.Date | null
|
|
@@ -78,11 +77,11 @@ export function DateRangePicker(props: DateRangePickerProps) {
|
|
|
78
77
|
>
|
|
79
78
|
<header className="flex items-center justify-between mb-2 px-1">
|
|
80
79
|
<Button slot="previous" className="p-1 hover:bg-neutral-100 rounded cursor-pointer">
|
|
81
|
-
<
|
|
80
|
+
<ChevronLeft />
|
|
82
81
|
</Button>
|
|
83
82
|
<Heading className="text-sm font-semibold text-neutral-900 flex-1 text-center" />
|
|
84
83
|
<Button slot="next" className="p-1 hover:bg-neutral-100 rounded cursor-pointer">
|
|
85
|
-
<
|
|
84
|
+
<ChevronRight />
|
|
86
85
|
</Button>
|
|
87
86
|
</header>
|
|
88
87
|
<div className="flex gap-4">
|
|
@@ -139,3 +138,27 @@ export function DateRangePicker(props: DateRangePickerProps) {
|
|
|
139
138
|
</I18nProvider>
|
|
140
139
|
)
|
|
141
140
|
}
|
|
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
|
+
}
|
|
@@ -17,7 +17,7 @@ export const requestContextMiddleware: MiddlewareFunction<Response> = async ({ r
|
|
|
17
17
|
const requestId = randomUUID()
|
|
18
18
|
const cookieHeader = request.headers.get('Cookie')
|
|
19
19
|
const session = await Session.getSession(cookieHeader)
|
|
20
|
-
const deviceContext = Helpers.getDeviceContext(request
|
|
20
|
+
const deviceContext = Helpers.getDeviceContext(request)
|
|
21
21
|
const authResult = await Auth.authenticate({ session, cookieHeader, deviceContext })
|
|
22
22
|
const profile = authResult.id ? await AuthService.GetProfileByUserId({ userId: authResult.id }) : null
|
|
23
23
|
|
package/skills/maestro-examples/references/cadence/cadence-web/app/routes/auth.reset-password.tsx
CHANGED
|
@@ -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, Log } from '~/services.server'
|
|
6
|
+
import { AuthService, Db, 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,8 +46,21 @@ 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
|
+
|
|
49
61
|
try {
|
|
50
62
|
await AuthService.ResetPassword({
|
|
63
|
+
authenticatableId: row.userId,
|
|
51
64
|
token,
|
|
52
65
|
newPassword
|
|
53
66
|
})
|
|
@@ -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.
|
|
18
|
-
"@maestro-js/log": "^1.0.0-alpha.
|
|
19
|
-
"@maestro-js/form": "^1.0.0-alpha.
|
|
20
|
-
"@maestro-js/permissions": "^1.0.0-alpha.
|
|
17
|
+
"@maestro-js/custom-errors": "^1.0.0-alpha.3",
|
|
18
|
+
"@maestro-js/log": "^1.0.0-alpha.3",
|
|
19
|
+
"@maestro-js/form": "^1.0.0-alpha.3",
|
|
20
|
+
"@maestro-js/permissions": "^1.0.0-alpha.3",
|
|
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.
|
|
45
|
-
"@maestro-js/react-router-file-routes": "^1.0.0-alpha.
|
|
44
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
45
|
+
"@maestro-js/react-router-file-routes": "^1.0.0-alpha.3",
|
|
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.
|
|
9
|
+
"@maestro-js/config": "^1.0.0-alpha.3"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@maestro-js/cli": "^1.0.0-alpha.
|
|
13
|
-
"@maestro-js/db-migrate": "^1.0.0-alpha.
|
|
14
|
-
"@maestro-js/db": "^1.0.0-alpha.
|
|
12
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
13
|
+
"@maestro-js/db-migrate": "^1.0.0-alpha.3",
|
|
14
|
+
"@maestro-js/db": "^1.0.0-alpha.3",
|
|
15
15
|
"@types/node": "^22.19.11"
|
|
16
16
|
}
|
|
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.
|
|
16
|
-
"@maestro-js/cache": "^1.0.0-alpha.
|
|
17
|
-
"@maestro-js/config": "^1.0.0-alpha.
|
|
18
|
-
"@maestro-js/crypt": "^1.0.0-alpha.
|
|
19
|
-
"@maestro-js/custom-errors": "^1.0.0-alpha.
|
|
20
|
-
"@maestro-js/db": "^1.0.0-alpha.
|
|
21
|
-
"@maestro-js/exceptions": "^1.0.0-alpha.
|
|
22
|
-
"@maestro-js/hash": "^1.0.0-alpha.
|
|
23
|
-
"@maestro-js/helpers": "^1.0.0-alpha.
|
|
24
|
-
"@maestro-js/iso-zod": "^1.0.0-alpha.
|
|
25
|
-
"@maestro-js/log": "^1.0.0-alpha.
|
|
26
|
-
"@maestro-js/mail": "^1.0.0-alpha.
|
|
27
|
-
"@maestro-js/password": "^1.0.0-alpha.
|
|
28
|
-
"@maestro-js/permissions": "^1.0.0-alpha.
|
|
29
|
-
"@maestro-js/queue": "^1.0.0-alpha.
|
|
30
|
-
"@maestro-js/rate-limiting": "^1.0.0-alpha.
|
|
31
|
-
"@maestro-js/recurring-jobs": "^1.0.0-alpha.
|
|
32
|
-
"@maestro-js/session": "^1.0.0-alpha.
|
|
15
|
+
"@maestro-js/auth": "^1.0.0-alpha.3",
|
|
16
|
+
"@maestro-js/cache": "^1.0.0-alpha.3",
|
|
17
|
+
"@maestro-js/config": "^1.0.0-alpha.3",
|
|
18
|
+
"@maestro-js/crypt": "^1.0.0-alpha.3",
|
|
19
|
+
"@maestro-js/custom-errors": "^1.0.0-alpha.3",
|
|
20
|
+
"@maestro-js/db": "^1.0.0-alpha.3",
|
|
21
|
+
"@maestro-js/exceptions": "^1.0.0-alpha.3",
|
|
22
|
+
"@maestro-js/hash": "^1.0.0-alpha.3",
|
|
23
|
+
"@maestro-js/helpers": "^1.0.0-alpha.3",
|
|
24
|
+
"@maestro-js/iso-zod": "^1.0.0-alpha.3",
|
|
25
|
+
"@maestro-js/log": "^1.0.0-alpha.3",
|
|
26
|
+
"@maestro-js/mail": "^1.0.0-alpha.3",
|
|
27
|
+
"@maestro-js/password": "^1.0.0-alpha.3",
|
|
28
|
+
"@maestro-js/permissions": "^1.0.0-alpha.3",
|
|
29
|
+
"@maestro-js/queue": "^1.0.0-alpha.3",
|
|
30
|
+
"@maestro-js/rate-limiting": "^1.0.0-alpha.3",
|
|
31
|
+
"@maestro-js/recurring-jobs": "^1.0.0-alpha.3",
|
|
32
|
+
"@maestro-js/session": "^1.0.0-alpha.3",
|
|
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.
|
|
38
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
39
39
|
"@types/node": "^22.0.0",
|
|
40
40
|
"@types/sanitize-html": "^2.16.1",
|
|
41
41
|
"beartest-js": "^8.0.2"
|
package/skills/maestro-examples/references/cadence/packages/services/src/auth/auth-use-cases.ts
CHANGED
|
@@ -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)
|
|
126
126
|
|
|
127
127
|
await Mail.send({
|
|
128
128
|
to: email,
|
|
@@ -141,15 +141,16 @@ export const ResetPassword = z
|
|
|
141
141
|
.function({
|
|
142
142
|
input: [
|
|
143
143
|
z.object({
|
|
144
|
+
authenticatableId: z.number(),
|
|
144
145
|
token: z.string(),
|
|
145
146
|
newPassword: z.string().min(8)
|
|
146
147
|
})
|
|
147
148
|
]
|
|
148
149
|
})
|
|
149
|
-
.implement(async ({ token, newPassword }) => {
|
|
150
|
-
await Password.resetPassword({ token, newPassword })
|
|
150
|
+
.implement(async ({ authenticatableId, token, newPassword }) => {
|
|
151
|
+
await Password.resetPassword({ authenticatableId, token, newPassword })
|
|
151
152
|
|
|
152
153
|
// credentialsInvalidBefore is set by Password.resetPassword() internally,
|
|
153
154
|
// which invalidates all existing sessions
|
|
154
|
-
log.info('Password reset completed', { action: 'auth.resetPassword' })
|
|
155
|
+
log.info('Password reset completed', { action: 'auth.resetPassword', userId: authenticatableId })
|
|
155
156
|
})
|
|
@@ -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({ token, newPassword })` validates the token, updates the hash, and sets `credentialsInvalidBefore` to now — invalidating all existing sessions
|
|
218
|
+
6. `Password.resetPassword({ authenticatableId, 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
|
package/skills/maestro-examples/references/chorus/chorus-web/app/features/request-context.server.ts
CHANGED
|
@@ -17,8 +17,8 @@ export const requestContextMiddleware: MiddlewareFunction<Response> = async ({ r
|
|
|
17
17
|
const requestId = randomUUID()
|
|
18
18
|
const cookieHeader = request.headers.get('Cookie')
|
|
19
19
|
const session = await Session.getSession(cookieHeader)
|
|
20
|
-
const deviceContext = Helpers.getDeviceContext(request
|
|
21
|
-
const authResult = await Auth.authenticate({ session, cookieHeader, deviceContext })
|
|
20
|
+
const deviceContext = Helpers.getDeviceContext(request)
|
|
21
|
+
const authResult = await Auth.authenticate({ session, cookieHeader, deviceContext: Helpers.getDeviceContext(request) })
|
|
22
22
|
const profile = authResult.id ? await AuthService.GetProfileById({ profileId: authResult.id }) : null
|
|
23
23
|
|
|
24
24
|
context.set(requestContext, { profile, requestId, session, deviceContext })
|
|
@@ -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
|
-
"@maestro-js/permissions": "^1.0.0-alpha.
|
|
18
|
-
"@maestro-js/custom-errors": "^1.0.0-alpha.
|
|
16
|
+
"@maestro-js/form": "^1.0.0-alpha.3",
|
|
17
|
+
"@maestro-js/permissions": "^1.0.0-alpha.3",
|
|
18
|
+
"@maestro-js/custom-errors": "^1.0.0-alpha.3",
|
|
19
19
|
"@react-aria/interactions": "^3.27.0",
|
|
20
20
|
"@react-aria/utils": "^3.33.0",
|
|
21
21
|
"@react-router/node": "^7.9.0",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"react": "^19.0.0",
|
|
29
29
|
"react-aria-components": "^1.15.1",
|
|
30
30
|
"react-dom": "^19.0.0",
|
|
31
|
-
"react-pdf-hook": "^1.0.
|
|
31
|
+
"react-pdf-hook": "^1.0.3",
|
|
32
32
|
"react-router": "^7.9.0",
|
|
33
33
|
"tailwind-merge": "^3.5.0",
|
|
34
34
|
"vaul": "^1.1.2",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"@sentry/react-router": "^9"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@maestro-js/cli": "^1.0.0-alpha.
|
|
40
|
-
"@maestro-js/react-router-file-routes": "^1.0.0-alpha.
|
|
39
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
40
|
+
"@maestro-js/react-router-file-routes": "^1.0.0-alpha.3",
|
|
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.
|
|
14
|
-
"@maestro-js/db-migrate": "^1.0.0-alpha.
|
|
13
|
+
"@maestro-js/aws-cdk-recipes": "^1.0.0-alpha.3",
|
|
14
|
+
"@maestro-js/db-migrate": "^1.0.0-alpha.3",
|
|
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.
|
|
9
|
+
"@maestro-js/config": "^1.0.0-alpha.3"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@maestro-js/cli": "^1.0.0-alpha.
|
|
13
|
-
"@maestro-js/db-migrate": "^1.0.0-alpha.
|
|
14
|
-
"@maestro-js/db": "^1.0.0-alpha.
|
|
12
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
13
|
+
"@maestro-js/db-migrate": "^1.0.0-alpha.3",
|
|
14
|
+
"@maestro-js/db": "^1.0.0-alpha.3",
|
|
15
15
|
"@types/node": "^22.19.11"
|
|
16
16
|
}
|
|
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.
|
|
18
|
-
"@maestro-js/cache": "^1.0.0-alpha.
|
|
19
|
-
"@maestro-js/config": "^1.0.0-alpha.
|
|
20
|
-
"@maestro-js/crypt": "^1.0.0-alpha.
|
|
21
|
-
"@maestro-js/custom-errors": "^1.0.0-alpha.
|
|
22
|
-
"@maestro-js/db": "^1.0.0-alpha.
|
|
23
|
-
"@maestro-js/exceptions": "^1.0.0-alpha.
|
|
24
|
-
"@maestro-js/file-storage": "^1.0.0-alpha.
|
|
25
|
-
"@maestro-js/hash": "^1.0.0-alpha.
|
|
26
|
-
"@maestro-js/helpers": "^1.0.0-alpha.
|
|
27
|
-
"@maestro-js/iso-zod": "^1.0.0-alpha.
|
|
28
|
-
"@maestro-js/log": "^1.0.0-alpha.
|
|
29
|
-
"@maestro-js/mail": "^1.0.0-alpha.
|
|
30
|
-
"@maestro-js/password": "^1.0.0-alpha.
|
|
31
|
-
"@maestro-js/permissions": "^1.0.0-alpha.
|
|
32
|
-
"@maestro-js/queue": "^1.0.0-alpha.
|
|
33
|
-
"@maestro-js/rate-limiting": "^1.0.0-alpha.
|
|
34
|
-
"@maestro-js/recurring-jobs": "^1.0.0-alpha.
|
|
35
|
-
"@maestro-js/session": "^1.0.0-alpha.
|
|
36
|
-
"@maestro-js/signed-url": "^1.0.0-alpha.
|
|
17
|
+
"@maestro-js/auth": "^1.0.0-alpha.3",
|
|
18
|
+
"@maestro-js/cache": "^1.0.0-alpha.3",
|
|
19
|
+
"@maestro-js/config": "^1.0.0-alpha.3",
|
|
20
|
+
"@maestro-js/crypt": "^1.0.0-alpha.3",
|
|
21
|
+
"@maestro-js/custom-errors": "^1.0.0-alpha.3",
|
|
22
|
+
"@maestro-js/db": "^1.0.0-alpha.3",
|
|
23
|
+
"@maestro-js/exceptions": "^1.0.0-alpha.3",
|
|
24
|
+
"@maestro-js/file-storage": "^1.0.0-alpha.3",
|
|
25
|
+
"@maestro-js/hash": "^1.0.0-alpha.3",
|
|
26
|
+
"@maestro-js/helpers": "^1.0.0-alpha.3",
|
|
27
|
+
"@maestro-js/iso-zod": "^1.0.0-alpha.3",
|
|
28
|
+
"@maestro-js/log": "^1.0.0-alpha.3",
|
|
29
|
+
"@maestro-js/mail": "^1.0.0-alpha.3",
|
|
30
|
+
"@maestro-js/password": "^1.0.0-alpha.3",
|
|
31
|
+
"@maestro-js/permissions": "^1.0.0-alpha.3",
|
|
32
|
+
"@maestro-js/queue": "^1.0.0-alpha.3",
|
|
33
|
+
"@maestro-js/rate-limiting": "^1.0.0-alpha.3",
|
|
34
|
+
"@maestro-js/recurring-jobs": "^1.0.0-alpha.3",
|
|
35
|
+
"@maestro-js/session": "^1.0.0-alpha.3",
|
|
36
|
+
"@maestro-js/signed-url": "^1.0.0-alpha.3",
|
|
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.
|
|
43
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
44
44
|
"@types/node": "^22.0.0",
|
|
45
45
|
"beartest-js": "^8.0.2"
|
|
46
46
|
}
|
package/skills/maestro-examples/references/chorus/packages/services/src/auth/auth-use-cases.ts
CHANGED
|
@@ -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)
|
|
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({ token, newPassword })
|
|
176
|
+
await Password.resetPassword({ authenticatableId, token, newPassword })
|
|
177
177
|
return Auth.loginById({ id: authenticatableId, session, deviceContext })
|
|
178
178
|
})
|
|
@@ -70,9 +70,7 @@ Password.Provider.register(
|
|
|
70
70
|
updatePasswordHash: authenticatableDbProvider.updatePasswordHash,
|
|
71
71
|
updateCredentialsInvalidBefore: authenticatableDbProvider.updateCredentialsInvalidBefore,
|
|
72
72
|
hash: Hash.provider('bcrypt'),
|
|
73
|
-
passwordResetOptions:
|
|
74
|
-
...passwordResetTokenDbProvider
|
|
75
|
-
}
|
|
73
|
+
passwordResetOptions: passwordResetTokenDbProvider
|
|
76
74
|
})
|
|
77
75
|
)
|
|
78
76
|
|
|
@@ -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.
|
|
14
|
-
"@maestro-js/db-migrate": "^1.0.0-alpha.
|
|
13
|
+
"@maestro-js/aws-cdk-recipes": "^1.0.0-alpha.3",
|
|
14
|
+
"@maestro-js/db-migrate": "^1.0.0-alpha.3",
|
|
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.
|
|
9
|
+
"@maestro-js/config": "^1.0.0-alpha.3",
|
|
10
10
|
"@setlist/services": "workspace:*"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@maestro-js/cli": "^1.0.0-alpha.
|
|
14
|
-
"@maestro-js/db-migrate": "^1.0.0-alpha.
|
|
15
|
-
"@maestro-js/db": "^1.0.0-alpha.
|
|
13
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
14
|
+
"@maestro-js/db-migrate": "^1.0.0-alpha.3",
|
|
15
|
+
"@maestro-js/db": "^1.0.0-alpha.3",
|
|
16
16
|
"@types/node": "^22.19.11",
|
|
17
17
|
"tsx": "^4.21.0"
|
|
18
18
|
}
|
|
@@ -10,27 +10,27 @@
|
|
|
10
10
|
"typecheck": "tsc --noEmit"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@maestro-js/auth": "^1.0.0-alpha.
|
|
14
|
-
"@maestro-js/cache": "^1.0.0-alpha.
|
|
15
|
-
"@maestro-js/crypt": "^1.0.0-alpha.
|
|
16
|
-
"@maestro-js/custom-errors": "^1.0.0-alpha.
|
|
17
|
-
"@maestro-js/db": "^1.0.0-alpha.
|
|
18
|
-
"@maestro-js/iso-zod": "^1.0.0-alpha.
|
|
19
|
-
"@maestro-js/hash": "^1.0.0-alpha.
|
|
20
|
-
"@maestro-js/helpers": "^1.0.0-alpha.
|
|
21
|
-
"@maestro-js/log": "^1.0.0-alpha.
|
|
22
|
-
"@maestro-js/mail": "^1.0.0-alpha.
|
|
23
|
-
"@maestro-js/queue": "^1.0.0-alpha.
|
|
24
|
-
"@maestro-js/rate-limiting": "^1.0.0-alpha.
|
|
25
|
-
"@maestro-js/recurring-jobs": "^1.0.0-alpha.
|
|
26
|
-
"@maestro-js/session": "^1.0.0-alpha.
|
|
13
|
+
"@maestro-js/auth": "^1.0.0-alpha.3",
|
|
14
|
+
"@maestro-js/cache": "^1.0.0-alpha.3",
|
|
15
|
+
"@maestro-js/crypt": "^1.0.0-alpha.3",
|
|
16
|
+
"@maestro-js/custom-errors": "^1.0.0-alpha.3",
|
|
17
|
+
"@maestro-js/db": "^1.0.0-alpha.3",
|
|
18
|
+
"@maestro-js/iso-zod": "^1.0.0-alpha.3",
|
|
19
|
+
"@maestro-js/hash": "^1.0.0-alpha.3",
|
|
20
|
+
"@maestro-js/helpers": "^1.0.0-alpha.3",
|
|
21
|
+
"@maestro-js/log": "^1.0.0-alpha.3",
|
|
22
|
+
"@maestro-js/mail": "^1.0.0-alpha.3",
|
|
23
|
+
"@maestro-js/queue": "^1.0.0-alpha.3",
|
|
24
|
+
"@maestro-js/rate-limiting": "^1.0.0-alpha.3",
|
|
25
|
+
"@maestro-js/recurring-jobs": "^1.0.0-alpha.3",
|
|
26
|
+
"@maestro-js/session": "^1.0.0-alpha.3",
|
|
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.
|
|
33
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
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.
|
|
9
|
+
"@maestro-js/config": "^1.0.0-alpha.3",
|
|
10
10
|
"@setlist/services": "workspace:*"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@maestro-js/cli": "^1.0.0-alpha.
|
|
13
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
14
14
|
"@types/node": "^22.19.11",
|
|
15
15
|
"tsx": "^4.21.0"
|
|
16
16
|
}
|
|
@@ -21,7 +21,7 @@ export const requestContextMiddleware: MiddlewareFunction<Response> = async ({ r
|
|
|
21
21
|
const requestId = randomUUID()
|
|
22
22
|
const cookieHeader = request.headers.get('Cookie')
|
|
23
23
|
const session = await Session.getSession(cookieHeader)
|
|
24
|
-
const deviceContext = Helpers.getDeviceContext(request
|
|
24
|
+
const deviceContext = Helpers.getDeviceContext(request)
|
|
25
25
|
const authResult = await Auth.authenticate({ session, cookieHeader, deviceContext })
|
|
26
26
|
|
|
27
27
|
let user: User | null = null
|
|
@@ -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.
|
|
20
|
-
"@maestro-js/react-router-file-routes": "^1.0.0-alpha.
|
|
19
|
+
"@maestro-js/form": "^1.0.0-alpha.3",
|
|
20
|
+
"@maestro-js/react-router-file-routes": "^1.0.0-alpha.3",
|
|
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.
|
|
39
|
+
"@maestro-js/cli": "^1.0.0-alpha.3",
|
|
40
40
|
"@react-router/dev": "^7.9.0",
|
|
41
41
|
"@tailwindcss/vite": "^4.2.0",
|
|
42
42
|
"@types/node": "^22.19.11",
|