@mastra/core 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +236 -0
- package/dist/agent/agent.d.ts +6 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/index.cjs +8 -8
- package/dist/agent/index.js +1 -1
- package/dist/{chunk-VJWRJWSC.cjs → chunk-2X66GWF5.cjs} +94 -16
- package/dist/chunk-2X66GWF5.cjs.map +1 -0
- package/dist/{chunk-YM6245EM.js → chunk-6OXW5E2O.js} +3 -3
- package/dist/{chunk-YM6245EM.js.map → chunk-6OXW5E2O.js.map} +1 -1
- package/dist/{chunk-XWZAKKFT.cjs → chunk-6QBN6MZY.cjs} +14 -14
- package/dist/{chunk-XWZAKKFT.cjs.map → chunk-6QBN6MZY.cjs.map} +1 -1
- package/dist/{chunk-AYHSPIT6.cjs → chunk-7UAJ6LMR.cjs} +820 -259
- package/dist/chunk-7UAJ6LMR.cjs.map +1 -0
- package/dist/{chunk-RZNHRIM7.cjs → chunk-A72NTLFT.cjs} +5 -5
- package/dist/{chunk-RZNHRIM7.cjs.map → chunk-A72NTLFT.cjs.map} +1 -1
- package/dist/{chunk-EEU5NHHU.js → chunk-DFCRXDVK.js} +3 -3
- package/dist/{chunk-EEU5NHHU.js.map → chunk-DFCRXDVK.js.map} +1 -1
- package/dist/{chunk-5K45E5VE.js → chunk-GPJGPARM.js} +3 -2
- package/dist/chunk-GPJGPARM.js.map +1 -0
- package/dist/{chunk-LNKS4TJ6.cjs → chunk-HB6T4554.cjs} +8 -7
- package/dist/chunk-HB6T4554.cjs.map +1 -0
- package/dist/{chunk-DGS2KGDI.js → chunk-KUXNBWN7.js} +6 -5
- package/dist/chunk-KUXNBWN7.js.map +1 -0
- package/dist/{chunk-IHDE4CJV.js → chunk-QSHV7GPT.js} +89 -12
- package/dist/chunk-QSHV7GPT.js.map +1 -0
- package/dist/{chunk-3U3XFMGJ.cjs → chunk-QTAS3HND.cjs} +13 -8
- package/dist/chunk-QTAS3HND.cjs.map +1 -0
- package/dist/{chunk-RHKNKJNM.js → chunk-QWTB53GS.js} +4 -4
- package/dist/{chunk-RHKNKJNM.js.map → chunk-QWTB53GS.js.map} +1 -1
- package/dist/{chunk-4WG5K4CK.js → chunk-R4N65TLG.js} +7 -7
- package/dist/{chunk-4WG5K4CK.js.map → chunk-R4N65TLG.js.map} +1 -1
- package/dist/{chunk-5VQPSWPG.cjs → chunk-RABITNTG.cjs} +48 -48
- package/dist/{chunk-5VQPSWPG.cjs.map → chunk-RABITNTG.cjs.map} +1 -1
- package/dist/{chunk-TVPANHLE.cjs → chunk-SBOHDNIZ.cjs} +3 -2
- package/dist/chunk-SBOHDNIZ.cjs.map +1 -0
- package/dist/{chunk-MWGGSA5Q.js → chunk-T6GAM3SQ.js} +10 -5
- package/dist/chunk-T6GAM3SQ.js.map +1 -0
- package/dist/{chunk-TL2TTA4X.cjs → chunk-YQG7NBPR.cjs} +9 -9
- package/dist/{chunk-TL2TTA4X.cjs.map → chunk-YQG7NBPR.cjs.map} +1 -1
- package/dist/{chunk-XB3DA67Q.js → chunk-ZSBM2SVU.js} +818 -259
- package/dist/chunk-ZSBM2SVU.js.map +1 -0
- package/dist/datasets/experiment/scorer.d.ts.map +1 -1
- package/dist/datasets/index.cjs +17 -17
- package/dist/datasets/index.js +2 -2
- package/dist/evals/index.cjs +20 -20
- package/dist/evals/index.js +3 -3
- package/dist/evals/scoreTraces/index.cjs +7 -6
- package/dist/evals/scoreTraces/index.cjs.map +1 -1
- package/dist/evals/scoreTraces/index.js +4 -3
- package/dist/evals/scoreTraces/index.js.map +1 -1
- package/dist/evals/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
- package/dist/harness/harness.d.ts +21 -1
- package/dist/harness/harness.d.ts.map +1 -1
- package/dist/harness/index.cjs +422 -5
- package/dist/harness/index.cjs.map +1 -1
- package/dist/harness/index.d.ts +2 -1
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +418 -3
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/types.d.ts +151 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/loop/index.cjs +12 -12
- package/dist/loop/index.js +1 -1
- package/dist/loop/test-utils/tools.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
- package/dist/mastra/hooks.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +14 -14
- package/dist/memory/index.js +1 -1
- package/dist/processor-provider/index.cjs +10 -10
- package/dist/processor-provider/index.js +1 -1
- package/dist/processors/index.cjs +45 -41
- package/dist/processors/index.js +1 -1
- package/dist/processors/processors/index.d.ts +1 -0
- package/dist/processors/processors/index.d.ts.map +1 -1
- package/dist/processors/processors/workspace-instructions.d.ts +50 -0
- package/dist/processors/processors/workspace-instructions.d.ts.map +1 -0
- package/dist/relevance/index.cjs +3 -3
- package/dist/relevance/index.js +1 -1
- package/dist/storage/constants.cjs +56 -56
- package/dist/storage/constants.d.ts.map +1 -1
- package/dist/storage/constants.js +1 -1
- package/dist/storage/index.cjs +160 -160
- package/dist/storage/index.js +2 -2
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +8 -8
- package/dist/stream/index.js +1 -1
- package/dist/tool-loop-agent/index.cjs +4 -4
- package/dist/tool-loop-agent/index.js +1 -1
- package/dist/vector/index.cjs +7 -7
- package/dist/vector/index.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/index.cjs +25 -25
- package/dist/workflows/index.js +1 -1
- package/dist/workspace/constants/index.d.ts +2 -0
- package/dist/workspace/constants/index.d.ts.map +1 -1
- package/dist/workspace/errors.d.ts +1 -1
- package/dist/workspace/errors.d.ts.map +1 -1
- package/dist/workspace/filesystem/composite-filesystem.d.ts +4 -1
- package/dist/workspace/filesystem/composite-filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/file-write-lock.d.ts +35 -0
- package/dist/workspace/filesystem/file-write-lock.d.ts.map +1 -0
- package/dist/workspace/filesystem/filesystem.d.ts +5 -1
- package/dist/workspace/filesystem/filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/index.d.ts +1 -0
- package/dist/workspace/filesystem/index.d.ts.map +1 -1
- package/dist/workspace/filesystem/local-filesystem.d.ts +17 -1
- package/dist/workspace/filesystem/local-filesystem.d.ts.map +1 -1
- package/dist/workspace/index.cjs +72 -64
- package/dist/workspace/index.d.ts +3 -2
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/lifecycle.d.ts +1 -9
- package/dist/workspace/lifecycle.d.ts.map +1 -1
- package/dist/workspace/sandbox/index.d.ts +2 -0
- package/dist/workspace/sandbox/index.d.ts.map +1 -1
- package/dist/workspace/sandbox/local-process-manager.d.ts +18 -0
- package/dist/workspace/sandbox/local-process-manager.d.ts.map +1 -0
- package/dist/workspace/sandbox/local-sandbox.d.ts +49 -35
- package/dist/workspace/sandbox/local-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/mastra-sandbox.d.ts +45 -11
- package/dist/workspace/sandbox/mastra-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/native-sandbox/bubblewrap.d.ts +2 -3
- package/dist/workspace/sandbox/native-sandbox/bubblewrap.d.ts.map +1 -1
- package/dist/workspace/sandbox/native-sandbox/seatbelt.d.ts +2 -3
- package/dist/workspace/sandbox/native-sandbox/seatbelt.d.ts.map +1 -1
- package/dist/workspace/sandbox/native-sandbox/wrapper.d.ts +4 -5
- package/dist/workspace/sandbox/native-sandbox/wrapper.d.ts.map +1 -1
- package/dist/workspace/sandbox/process-manager/index.d.ts +4 -0
- package/dist/workspace/sandbox/process-manager/index.d.ts.map +1 -0
- package/dist/workspace/sandbox/process-manager/process-handle.d.ts +107 -0
- package/dist/workspace/sandbox/process-manager/process-handle.d.ts.map +1 -0
- package/dist/workspace/sandbox/process-manager/process-manager.d.ts +59 -0
- package/dist/workspace/sandbox/process-manager/process-manager.d.ts.map +1 -0
- package/dist/workspace/sandbox/process-manager/types.d.ts +24 -0
- package/dist/workspace/sandbox/process-manager/types.d.ts.map +1 -0
- package/dist/workspace/sandbox/sandbox.d.ts +38 -2
- package/dist/workspace/sandbox/sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/types.d.ts +9 -2
- package/dist/workspace/sandbox/types.d.ts.map +1 -1
- package/dist/workspace/sandbox/utils.d.ts +7 -0
- package/dist/workspace/sandbox/utils.d.ts.map +1 -0
- package/dist/workspace/tools/execute-command.d.ts +53 -2
- package/dist/workspace/tools/execute-command.d.ts.map +1 -1
- package/dist/workspace/tools/get-process-output.d.ts +6 -0
- package/dist/workspace/tools/get-process-output.d.ts.map +1 -0
- package/dist/workspace/tools/index.d.ts +4 -1
- package/dist/workspace/tools/index.d.ts.map +1 -1
- package/dist/workspace/tools/kill-process.d.ts +4 -0
- package/dist/workspace/tools/kill-process.d.ts.map +1 -0
- package/dist/workspace/tools/output-helpers.d.ts +21 -0
- package/dist/workspace/tools/output-helpers.d.ts.map +1 -0
- package/dist/workspace/tools/tools.d.ts.map +1 -1
- package/dist/workspace/types.d.ts +31 -0
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/utils.d.ts +11 -0
- package/dist/workspace/utils.d.ts.map +1 -0
- package/dist/workspace/workspace.d.ts +36 -0
- package/dist/workspace/workspace.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/chunk-3U3XFMGJ.cjs.map +0 -1
- package/dist/chunk-5K45E5VE.js.map +0 -1
- package/dist/chunk-AYHSPIT6.cjs.map +0 -1
- package/dist/chunk-DGS2KGDI.js.map +0 -1
- package/dist/chunk-IHDE4CJV.js.map +0 -1
- package/dist/chunk-LNKS4TJ6.cjs.map +0 -1
- package/dist/chunk-MWGGSA5Q.js.map +0 -1
- package/dist/chunk-TVPANHLE.cjs.map +0 -1
- package/dist/chunk-VJWRJWSC.cjs.map +0 -1
- package/dist/chunk-XB3DA67Q.js.map +0 -1
- package/dist/docs/SKILL.md +0 -301
- package/dist/docs/assets/SOURCE_MAP.json +0 -1413
- package/dist/docs/references/docs-agents-adding-voice.md +0 -353
- package/dist/docs/references/docs-agents-agent-approval.md +0 -377
- package/dist/docs/references/docs-agents-agent-memory.md +0 -212
- package/dist/docs/references/docs-agents-guardrails.md +0 -382
- package/dist/docs/references/docs-agents-network-approval.md +0 -275
- package/dist/docs/references/docs-agents-networks.md +0 -290
- package/dist/docs/references/docs-agents-overview.md +0 -309
- package/dist/docs/references/docs-agents-processors.md +0 -632
- package/dist/docs/references/docs-agents-structured-output.md +0 -271
- package/dist/docs/references/docs-agents-using-tools.md +0 -214
- package/dist/docs/references/docs-evals-custom-scorers.md +0 -519
- package/dist/docs/references/docs-evals-overview.md +0 -146
- package/dist/docs/references/docs-evals-running-in-ci.md +0 -106
- package/dist/docs/references/docs-mcp-overview.md +0 -370
- package/dist/docs/references/docs-mcp-publishing-mcp-server.md +0 -95
- package/dist/docs/references/docs-memory-memory-processors.md +0 -316
- package/dist/docs/references/docs-memory-observational-memory.md +0 -246
- package/dist/docs/references/docs-memory-overview.md +0 -45
- package/dist/docs/references/docs-memory-semantic-recall.md +0 -272
- package/dist/docs/references/docs-memory-storage.md +0 -261
- package/dist/docs/references/docs-memory-working-memory.md +0 -400
- package/dist/docs/references/docs-observability-datasets-overview.md +0 -188
- package/dist/docs/references/docs-observability-datasets-running-experiments.md +0 -266
- package/dist/docs/references/docs-observability-logging.md +0 -99
- package/dist/docs/references/docs-observability-overview.md +0 -70
- package/dist/docs/references/docs-observability-tracing-bridges-otel.md +0 -209
- package/dist/docs/references/docs-observability-tracing-exporters-arize.md +0 -274
- package/dist/docs/references/docs-observability-tracing-exporters-braintrust.md +0 -111
- package/dist/docs/references/docs-observability-tracing-exporters-cloud.md +0 -129
- package/dist/docs/references/docs-observability-tracing-exporters-datadog.md +0 -187
- package/dist/docs/references/docs-observability-tracing-exporters-default.md +0 -211
- package/dist/docs/references/docs-observability-tracing-exporters-laminar.md +0 -100
- package/dist/docs/references/docs-observability-tracing-exporters-langfuse.md +0 -217
- package/dist/docs/references/docs-observability-tracing-exporters-langsmith.md +0 -202
- package/dist/docs/references/docs-observability-tracing-exporters-otel.md +0 -479
- package/dist/docs/references/docs-observability-tracing-exporters-posthog.md +0 -148
- package/dist/docs/references/docs-observability-tracing-overview.md +0 -1114
- package/dist/docs/references/docs-rag-chunking-and-embedding.md +0 -183
- package/dist/docs/references/docs-rag-graph-rag.md +0 -215
- package/dist/docs/references/docs-rag-overview.md +0 -72
- package/dist/docs/references/docs-rag-retrieval.md +0 -521
- package/dist/docs/references/docs-rag-vector-databases.md +0 -648
- package/dist/docs/references/docs-server-auth-auth0.md +0 -222
- package/dist/docs/references/docs-server-auth-clerk.md +0 -132
- package/dist/docs/references/docs-server-auth-composite-auth.md +0 -234
- package/dist/docs/references/docs-server-auth-custom-auth-provider.md +0 -513
- package/dist/docs/references/docs-server-auth-firebase.md +0 -272
- package/dist/docs/references/docs-server-auth-jwt.md +0 -110
- package/dist/docs/references/docs-server-auth-simple-auth.md +0 -178
- package/dist/docs/references/docs-server-auth-supabase.md +0 -117
- package/dist/docs/references/docs-server-auth-workos.md +0 -190
- package/dist/docs/references/docs-server-custom-adapters.md +0 -374
- package/dist/docs/references/docs-server-custom-api-routes.md +0 -267
- package/dist/docs/references/docs-server-mastra-client.md +0 -243
- package/dist/docs/references/docs-server-mastra-server.md +0 -71
- package/dist/docs/references/docs-server-middleware.md +0 -228
- package/dist/docs/references/docs-server-request-context.md +0 -478
- package/dist/docs/references/docs-streaming-events.md +0 -247
- package/dist/docs/references/docs-streaming-tool-streaming.md +0 -178
- package/dist/docs/references/docs-streaming-workflow-streaming.md +0 -109
- package/dist/docs/references/docs-voice-overview.md +0 -979
- package/dist/docs/references/docs-voice-speech-to-speech.md +0 -103
- package/dist/docs/references/docs-voice-speech-to-text.md +0 -80
- package/dist/docs/references/docs-voice-text-to-speech.md +0 -84
- package/dist/docs/references/docs-workflows-agents-and-tools.md +0 -170
- package/dist/docs/references/docs-workflows-control-flow.md +0 -823
- package/dist/docs/references/docs-workflows-error-handling.md +0 -360
- package/dist/docs/references/docs-workflows-human-in-the-loop.md +0 -213
- package/dist/docs/references/docs-workflows-overview.md +0 -372
- package/dist/docs/references/docs-workflows-snapshots.md +0 -238
- package/dist/docs/references/docs-workflows-suspend-and-resume.md +0 -205
- package/dist/docs/references/docs-workflows-time-travel.md +0 -309
- package/dist/docs/references/docs-workflows-workflow-state.md +0 -181
- package/dist/docs/references/docs-workspace-filesystem.md +0 -162
- package/dist/docs/references/docs-workspace-overview.md +0 -239
- package/dist/docs/references/docs-workspace-sandbox.md +0 -63
- package/dist/docs/references/docs-workspace-search.md +0 -219
- package/dist/docs/references/docs-workspace-skills.md +0 -126
- package/dist/docs/references/guides-agent-frameworks-ai-sdk.md +0 -140
- package/dist/docs/references/reference-agents-agent.md +0 -142
- package/dist/docs/references/reference-agents-generate.md +0 -174
- package/dist/docs/references/reference-agents-generateLegacy.md +0 -176
- package/dist/docs/references/reference-agents-getDefaultGenerateOptions.md +0 -36
- package/dist/docs/references/reference-agents-getDefaultOptions.md +0 -34
- package/dist/docs/references/reference-agents-getDefaultStreamOptions.md +0 -36
- package/dist/docs/references/reference-agents-getDescription.md +0 -21
- package/dist/docs/references/reference-agents-getInstructions.md +0 -34
- package/dist/docs/references/reference-agents-getLLM.md +0 -37
- package/dist/docs/references/reference-agents-getMemory.md +0 -34
- package/dist/docs/references/reference-agents-getModel.md +0 -34
- package/dist/docs/references/reference-agents-getTools.md +0 -29
- package/dist/docs/references/reference-agents-getVoice.md +0 -34
- package/dist/docs/references/reference-agents-listAgents.md +0 -35
- package/dist/docs/references/reference-agents-listScorers.md +0 -34
- package/dist/docs/references/reference-agents-listTools.md +0 -34
- package/dist/docs/references/reference-agents-listWorkflows.md +0 -34
- package/dist/docs/references/reference-agents-network.md +0 -134
- package/dist/docs/references/reference-ai-sdk-chat-route.md +0 -82
- package/dist/docs/references/reference-ai-sdk-network-route.md +0 -74
- package/dist/docs/references/reference-ai-sdk-to-ai-sdk-stream.md +0 -232
- package/dist/docs/references/reference-ai-sdk-with-mastra.md +0 -59
- package/dist/docs/references/reference-ai-sdk-workflow-route.md +0 -79
- package/dist/docs/references/reference-auth-auth0.md +0 -73
- package/dist/docs/references/reference-auth-clerk.md +0 -36
- package/dist/docs/references/reference-auth-firebase.md +0 -80
- package/dist/docs/references/reference-auth-jwt.md +0 -26
- package/dist/docs/references/reference-auth-supabase.md +0 -33
- package/dist/docs/references/reference-auth-workos.md +0 -84
- package/dist/docs/references/reference-client-js-agents.md +0 -438
- package/dist/docs/references/reference-configuration.md +0 -749
- package/dist/docs/references/reference-core-addGateway.md +0 -42
- package/dist/docs/references/reference-core-getAgent.md +0 -21
- package/dist/docs/references/reference-core-getAgentById.md +0 -21
- package/dist/docs/references/reference-core-getDeployer.md +0 -22
- package/dist/docs/references/reference-core-getGateway.md +0 -38
- package/dist/docs/references/reference-core-getGatewayById.md +0 -41
- package/dist/docs/references/reference-core-getLogger.md +0 -22
- package/dist/docs/references/reference-core-getMCPServer.md +0 -45
- package/dist/docs/references/reference-core-getMCPServerById.md +0 -53
- package/dist/docs/references/reference-core-getMemory.md +0 -50
- package/dist/docs/references/reference-core-getScorer.md +0 -54
- package/dist/docs/references/reference-core-getScorerById.md +0 -54
- package/dist/docs/references/reference-core-getServer.md +0 -22
- package/dist/docs/references/reference-core-getStorage.md +0 -22
- package/dist/docs/references/reference-core-getStoredAgentById.md +0 -89
- package/dist/docs/references/reference-core-getTelemetry.md +0 -22
- package/dist/docs/references/reference-core-getVector.md +0 -22
- package/dist/docs/references/reference-core-getWorkflow.md +0 -40
- package/dist/docs/references/reference-core-listAgents.md +0 -21
- package/dist/docs/references/reference-core-listGateways.md +0 -40
- package/dist/docs/references/reference-core-listLogs.md +0 -38
- package/dist/docs/references/reference-core-listLogsByRunId.md +0 -36
- package/dist/docs/references/reference-core-listMCPServers.md +0 -51
- package/dist/docs/references/reference-core-listMemory.md +0 -56
- package/dist/docs/references/reference-core-listScorers.md +0 -29
- package/dist/docs/references/reference-core-listStoredAgents.md +0 -93
- package/dist/docs/references/reference-core-listVectors.md +0 -22
- package/dist/docs/references/reference-core-listWorkflows.md +0 -21
- package/dist/docs/references/reference-core-mastra-class.md +0 -66
- package/dist/docs/references/reference-core-mastra-model-gateway.md +0 -153
- package/dist/docs/references/reference-core-setLogger.md +0 -26
- package/dist/docs/references/reference-core-setStorage.md +0 -27
- package/dist/docs/references/reference-datasets-addItem.md +0 -35
- package/dist/docs/references/reference-datasets-addItems.md +0 -33
- package/dist/docs/references/reference-datasets-compareExperiments.md +0 -48
- package/dist/docs/references/reference-datasets-create.md +0 -49
- package/dist/docs/references/reference-datasets-dataset.md +0 -78
- package/dist/docs/references/reference-datasets-datasets-manager.md +0 -84
- package/dist/docs/references/reference-datasets-delete.md +0 -23
- package/dist/docs/references/reference-datasets-deleteExperiment.md +0 -25
- package/dist/docs/references/reference-datasets-deleteItem.md +0 -25
- package/dist/docs/references/reference-datasets-deleteItems.md +0 -27
- package/dist/docs/references/reference-datasets-get.md +0 -29
- package/dist/docs/references/reference-datasets-getDetails.md +0 -45
- package/dist/docs/references/reference-datasets-getExperiment.md +0 -28
- package/dist/docs/references/reference-datasets-getItem.md +0 -31
- package/dist/docs/references/reference-datasets-getItemHistory.md +0 -29
- package/dist/docs/references/reference-datasets-list.md +0 -29
- package/dist/docs/references/reference-datasets-listExperimentResults.md +0 -37
- package/dist/docs/references/reference-datasets-listExperiments.md +0 -31
- package/dist/docs/references/reference-datasets-listItems.md +0 -44
- package/dist/docs/references/reference-datasets-listVersions.md +0 -31
- package/dist/docs/references/reference-datasets-startExperiment.md +0 -60
- package/dist/docs/references/reference-datasets-startExperimentAsync.md +0 -41
- package/dist/docs/references/reference-datasets-update.md +0 -46
- package/dist/docs/references/reference-datasets-updateItem.md +0 -36
- package/dist/docs/references/reference-evals-answer-relevancy.md +0 -105
- package/dist/docs/references/reference-evals-answer-similarity.md +0 -99
- package/dist/docs/references/reference-evals-bias.md +0 -120
- package/dist/docs/references/reference-evals-completeness.md +0 -137
- package/dist/docs/references/reference-evals-content-similarity.md +0 -101
- package/dist/docs/references/reference-evals-context-precision.md +0 -196
- package/dist/docs/references/reference-evals-create-scorer.md +0 -270
- package/dist/docs/references/reference-evals-faithfulness.md +0 -114
- package/dist/docs/references/reference-evals-hallucination.md +0 -220
- package/dist/docs/references/reference-evals-keyword-coverage.md +0 -128
- package/dist/docs/references/reference-evals-mastra-scorer.md +0 -123
- package/dist/docs/references/reference-evals-run-evals.md +0 -138
- package/dist/docs/references/reference-evals-scorer-utils.md +0 -330
- package/dist/docs/references/reference-evals-textual-difference.md +0 -113
- package/dist/docs/references/reference-evals-tone-consistency.md +0 -119
- package/dist/docs/references/reference-evals-toxicity.md +0 -123
- package/dist/docs/references/reference-harness-harness-class.md +0 -645
- package/dist/docs/references/reference-logging-pino-logger.md +0 -117
- package/dist/docs/references/reference-memory-deleteMessages.md +0 -40
- package/dist/docs/references/reference-memory-memory-class.md +0 -147
- package/dist/docs/references/reference-memory-observational-memory.md +0 -565
- package/dist/docs/references/reference-observability-tracing-bridges-otel.md +0 -131
- package/dist/docs/references/reference-observability-tracing-configuration.md +0 -178
- package/dist/docs/references/reference-observability-tracing-exporters-console-exporter.md +0 -138
- package/dist/docs/references/reference-observability-tracing-exporters-datadog.md +0 -116
- package/dist/docs/references/reference-observability-tracing-instances.md +0 -109
- package/dist/docs/references/reference-observability-tracing-interfaces.md +0 -749
- package/dist/docs/references/reference-observability-tracing-processors-sensitive-data-filter.md +0 -144
- package/dist/docs/references/reference-observability-tracing-spans.md +0 -224
- package/dist/docs/references/reference-processors-batch-parts-processor.md +0 -61
- package/dist/docs/references/reference-processors-language-detector.md +0 -81
- package/dist/docs/references/reference-processors-message-history-processor.md +0 -85
- package/dist/docs/references/reference-processors-moderation-processor.md +0 -104
- package/dist/docs/references/reference-processors-pii-detector.md +0 -107
- package/dist/docs/references/reference-processors-processor-interface.md +0 -525
- package/dist/docs/references/reference-processors-prompt-injection-detector.md +0 -71
- package/dist/docs/references/reference-processors-semantic-recall-processor.md +0 -123
- package/dist/docs/references/reference-processors-system-prompt-scrubber.md +0 -80
- package/dist/docs/references/reference-processors-token-limiter-processor.md +0 -113
- package/dist/docs/references/reference-processors-tool-call-filter.md +0 -85
- package/dist/docs/references/reference-processors-tool-search-processor.md +0 -113
- package/dist/docs/references/reference-processors-unicode-normalizer.md +0 -62
- package/dist/docs/references/reference-processors-working-memory-processor.md +0 -154
- package/dist/docs/references/reference-rag-database-config.md +0 -264
- package/dist/docs/references/reference-rag-embeddings.md +0 -92
- package/dist/docs/references/reference-server-mastra-server.md +0 -298
- package/dist/docs/references/reference-server-register-api-route.md +0 -249
- package/dist/docs/references/reference-storage-cloudflare-d1.md +0 -218
- package/dist/docs/references/reference-storage-composite.md +0 -235
- package/dist/docs/references/reference-storage-lance.md +0 -131
- package/dist/docs/references/reference-storage-libsql.md +0 -135
- package/dist/docs/references/reference-storage-mongodb.md +0 -262
- package/dist/docs/references/reference-storage-mssql.md +0 -155
- package/dist/docs/references/reference-storage-overview.md +0 -121
- package/dist/docs/references/reference-storage-postgresql.md +0 -529
- package/dist/docs/references/reference-storage-upstash.md +0 -160
- package/dist/docs/references/reference-streaming-ChunkType.md +0 -292
- package/dist/docs/references/reference-streaming-agents-MastraModelOutput.md +0 -182
- package/dist/docs/references/reference-streaming-agents-streamLegacy.md +0 -142
- package/dist/docs/references/reference-streaming-workflows-observeStream.md +0 -42
- package/dist/docs/references/reference-streaming-workflows-resumeStream.md +0 -61
- package/dist/docs/references/reference-streaming-workflows-stream.md +0 -88
- package/dist/docs/references/reference-streaming-workflows-timeTravelStream.md +0 -142
- package/dist/docs/references/reference-templates-overview.md +0 -194
- package/dist/docs/references/reference-tools-create-tool.md +0 -237
- package/dist/docs/references/reference-tools-graph-rag-tool.md +0 -185
- package/dist/docs/references/reference-tools-mcp-client.md +0 -962
- package/dist/docs/references/reference-tools-mcp-server.md +0 -1275
- package/dist/docs/references/reference-tools-vector-query-tool.md +0 -459
- package/dist/docs/references/reference-vectors-libsql.md +0 -305
- package/dist/docs/references/reference-vectors-mongodb.md +0 -295
- package/dist/docs/references/reference-vectors-pg.md +0 -408
- package/dist/docs/references/reference-vectors-upstash.md +0 -294
- package/dist/docs/references/reference-voice-composite-voice.md +0 -121
- package/dist/docs/references/reference-voice-mastra-voice.md +0 -313
- package/dist/docs/references/reference-voice-voice.addInstructions.md +0 -56
- package/dist/docs/references/reference-voice-voice.addTools.md +0 -67
- package/dist/docs/references/reference-voice-voice.connect.md +0 -94
- package/dist/docs/references/reference-voice-voice.events.md +0 -37
- package/dist/docs/references/reference-voice-voice.listen.md +0 -164
- package/dist/docs/references/reference-voice-voice.on.md +0 -111
- package/dist/docs/references/reference-voice-voice.speak.md +0 -157
- package/dist/docs/references/reference-workflows-run-methods-cancel.md +0 -86
- package/dist/docs/references/reference-workflows-run-methods-restart.md +0 -33
- package/dist/docs/references/reference-workflows-run-methods-resume.md +0 -59
- package/dist/docs/references/reference-workflows-run-methods-start.md +0 -58
- package/dist/docs/references/reference-workflows-run-methods-startAsync.md +0 -67
- package/dist/docs/references/reference-workflows-run-methods-timeTravel.md +0 -142
- package/dist/docs/references/reference-workflows-run.md +0 -59
- package/dist/docs/references/reference-workflows-step.md +0 -119
- package/dist/docs/references/reference-workflows-workflow-methods-branch.md +0 -25
- package/dist/docs/references/reference-workflows-workflow-methods-commit.md +0 -17
- package/dist/docs/references/reference-workflows-workflow-methods-create-run.md +0 -63
- package/dist/docs/references/reference-workflows-workflow-methods-dountil.md +0 -25
- package/dist/docs/references/reference-workflows-workflow-methods-dowhile.md +0 -25
- package/dist/docs/references/reference-workflows-workflow-methods-foreach.md +0 -118
- package/dist/docs/references/reference-workflows-workflow-methods-map.md +0 -93
- package/dist/docs/references/reference-workflows-workflow-methods-parallel.md +0 -21
- package/dist/docs/references/reference-workflows-workflow-methods-sleep.md +0 -35
- package/dist/docs/references/reference-workflows-workflow-methods-sleepUntil.md +0 -35
- package/dist/docs/references/reference-workflows-workflow-methods-then.md +0 -21
- package/dist/docs/references/reference-workflows-workflow.md +0 -157
- package/dist/docs/references/reference-workspace-filesystem.md +0 -202
- package/dist/docs/references/reference-workspace-local-filesystem.md +0 -327
- package/dist/docs/references/reference-workspace-local-sandbox.md +0 -285
- package/dist/docs/references/reference-workspace-sandbox.md +0 -81
- package/dist/docs/references/reference-workspace-workspace-class.md +0 -226
- package/dist/docs/references/reference.md +0 -276
|
@@ -1,513 +0,0 @@
|
|
|
1
|
-
# Custom Auth Providers
|
|
2
|
-
|
|
3
|
-
Custom auth providers allow you to implement authentication for identity systems that aren't covered by the built-in providers. Extend the `MastraAuthProvider` base class to integrate with any authentication system.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
Auth providers handle authentication and authorization for incoming requests:
|
|
8
|
-
|
|
9
|
-
- Token verification and user extraction
|
|
10
|
-
- User authorization logic
|
|
11
|
-
- Path-based access control (public/protected routes)
|
|
12
|
-
|
|
13
|
-
Create custom auth providers to support:
|
|
14
|
-
|
|
15
|
-
- Self-hosted identity systems
|
|
16
|
-
- Custom token formats or verification logic
|
|
17
|
-
- Specialized authorization rules
|
|
18
|
-
- Enterprise SSO integrations
|
|
19
|
-
|
|
20
|
-
## Creating a Custom Auth Provider
|
|
21
|
-
|
|
22
|
-
Extend the `MastraAuthProvider` class and implement the required methods:
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
import { MastraAuthProvider } from '@mastra/core/server';
|
|
26
|
-
import type { MastraAuthProviderOptions } from '@mastra/core/server';
|
|
27
|
-
import type { HonoRequest } from 'hono';
|
|
28
|
-
|
|
29
|
-
// Define your user type
|
|
30
|
-
type MyUser = {
|
|
31
|
-
id: string;
|
|
32
|
-
email: string;
|
|
33
|
-
roles: string[];
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
// Define options for your provider
|
|
37
|
-
interface MyAuthOptions extends MastraAuthProviderOptions<MyUser> {
|
|
38
|
-
apiUrl?: string;
|
|
39
|
-
apiKey?: string;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export class MyAuthProvider extends MastraAuthProvider<MyUser> {
|
|
43
|
-
protected apiUrl: string;
|
|
44
|
-
protected apiKey: string;
|
|
45
|
-
|
|
46
|
-
constructor(options?: MyAuthOptions) {
|
|
47
|
-
// Call super with a name for logging/debugging
|
|
48
|
-
super({ name: options?.name ?? 'my-auth' });
|
|
49
|
-
|
|
50
|
-
const apiUrl = options?.apiUrl ?? process.env.MY_AUTH_API_URL;
|
|
51
|
-
const apiKey = options?.apiKey ?? process.env.MY_AUTH_API_KEY;
|
|
52
|
-
|
|
53
|
-
if (!apiUrl || !apiKey) {
|
|
54
|
-
throw new Error(
|
|
55
|
-
'Auth API URL and API key are required. Provide them in options or set MY_AUTH_API_URL and MY_AUTH_API_KEY environment variables.'
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
this.apiUrl = apiUrl;
|
|
60
|
-
this.apiKey = apiKey;
|
|
61
|
-
|
|
62
|
-
// Register any custom options (authorizeUser override, public/protected paths)
|
|
63
|
-
this.registerOptions(options);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Verify the token and return the user
|
|
68
|
-
* Return null if authentication fails
|
|
69
|
-
*/
|
|
70
|
-
async authenticateToken(token: string, request: HonoRequest): Promise<MyUser | null> {
|
|
71
|
-
try {
|
|
72
|
-
const response = await fetch(`${this.apiUrl}/verify`, {
|
|
73
|
-
method: 'POST',
|
|
74
|
-
headers: {
|
|
75
|
-
'Content-Type': 'application/json',
|
|
76
|
-
'X-API-Key': this.apiKey,
|
|
77
|
-
},
|
|
78
|
-
body: JSON.stringify({ token }),
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
if (!response.ok) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const user = await response.json();
|
|
86
|
-
return user;
|
|
87
|
-
} catch (error) {
|
|
88
|
-
console.error('Token verification failed:', error);
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Check if the authenticated user is authorized
|
|
95
|
-
* Return true to allow access, false to deny
|
|
96
|
-
*/
|
|
97
|
-
async authorizeUser(user: MyUser, request: HonoRequest): Promise<boolean> {
|
|
98
|
-
// Basic authorization: user must exist and have an ID
|
|
99
|
-
return !!user?.id;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Required Methods
|
|
105
|
-
|
|
106
|
-
### authenticateToken()
|
|
107
|
-
|
|
108
|
-
Verify the incoming token and return the user object if valid, or `null` if authentication fails.
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
async authenticateToken(token: string, request: HonoRequest): Promise<TUser | null>
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
| Parameter | Type | Description |
|
|
115
|
-
| --------- | ------------- | ----------------------------------------------------------- |
|
|
116
|
-
| `token` | `string` | The bearer token extracted from the `Authorization` header |
|
|
117
|
-
| `request` | `HonoRequest` | The incoming request object (access headers, cookies, etc.) |
|
|
118
|
-
|
|
119
|
-
**Returns**: The user object if authentication succeeds, or `null` if it fails.
|
|
120
|
-
|
|
121
|
-
The token is automatically extracted from the `Authorization: Bearer <token>` header. If you need to access other headers or cookies, use the `request` parameter.
|
|
122
|
-
|
|
123
|
-
### authorizeUser()
|
|
124
|
-
|
|
125
|
-
Determine if the authenticated user is allowed to access the resource.
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
async authorizeUser(user: TUser, request: HonoRequest): Promise<boolean> | boolean
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
| Parameter | Type | Description |
|
|
132
|
-
| --------- | ------------- | ----------------------------------------------- |
|
|
133
|
-
| `user` | `TUser` | The user object returned by `authenticateToken` |
|
|
134
|
-
| `request` | `HonoRequest` | The incoming request object |
|
|
135
|
-
|
|
136
|
-
**Returns**: `true` to allow access, `false` to deny (returns 403 Forbidden).
|
|
137
|
-
|
|
138
|
-
## Configuration Options
|
|
139
|
-
|
|
140
|
-
The `MastraAuthProviderOptions` interface supports these options:
|
|
141
|
-
|
|
142
|
-
| Option | Type | Description |
|
|
143
|
-
| --------------- | -------------------------------------------------------- | ----------------------------------- |
|
|
144
|
-
| `name` | `string` | Provider name for logging/debugging |
|
|
145
|
-
| `authorizeUser` | `(user, request) => Promise<boolean> \| boolean` | Custom authorization function |
|
|
146
|
-
| `protected` | `(RegExp \| string \| [string, Methods \| Methods[]])[]` | Paths that require authentication |
|
|
147
|
-
| `public` | `(RegExp \| string \| [string, Methods \| Methods[]])[]` | Paths that bypass authentication |
|
|
148
|
-
|
|
149
|
-
### Path Patterns
|
|
150
|
-
|
|
151
|
-
Configure which paths require authentication using pattern matching:
|
|
152
|
-
|
|
153
|
-
```typescript
|
|
154
|
-
const auth = new MyAuthProvider({
|
|
155
|
-
// Paths that require authentication
|
|
156
|
-
protected: [
|
|
157
|
-
'/api/*', // Wildcard: all /api routes
|
|
158
|
-
'/admin/*', // Wildcard: all /admin routes
|
|
159
|
-
/^\/secure\/.*/, // Regex pattern
|
|
160
|
-
],
|
|
161
|
-
|
|
162
|
-
// Paths that bypass authentication
|
|
163
|
-
public: [
|
|
164
|
-
'/health', // Exact match
|
|
165
|
-
'/api/status', // Exact match
|
|
166
|
-
['/api/webhook', 'POST'], // Only POST requests to /api/webhook
|
|
167
|
-
],
|
|
168
|
-
});
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## Using Your Auth Provider
|
|
172
|
-
|
|
173
|
-
Register your custom auth provider with the Mastra instance:
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
import { Mastra } from '@mastra/core';
|
|
177
|
-
import { MyAuthProvider } from './my-auth-provider';
|
|
178
|
-
|
|
179
|
-
export const mastra = new Mastra({
|
|
180
|
-
server: {
|
|
181
|
-
auth: new MyAuthProvider({
|
|
182
|
-
apiUrl: process.env.MY_AUTH_API_URL,
|
|
183
|
-
apiKey: process.env.MY_AUTH_API_KEY,
|
|
184
|
-
}),
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## Helper Utilities
|
|
190
|
-
|
|
191
|
-
The `@mastra/auth` package provides utilities for common token verification patterns:
|
|
192
|
-
|
|
193
|
-
### JWT Verification
|
|
194
|
-
|
|
195
|
-
```typescript
|
|
196
|
-
import { verifyHmac, verifyJwks, decodeToken, getTokenIssuer } from '@mastra/auth';
|
|
197
|
-
|
|
198
|
-
// Verify HMAC-signed JWT
|
|
199
|
-
const payload = await verifyHmac(token, 'your-secret-key');
|
|
200
|
-
|
|
201
|
-
// Verify with JWKS (for OAuth providers)
|
|
202
|
-
const payload = await verifyJwks(token, 'https://provider.com/.well-known/jwks.json');
|
|
203
|
-
|
|
204
|
-
// Decode without verification (for inspection)
|
|
205
|
-
const decoded = await decodeToken(token);
|
|
206
|
-
|
|
207
|
-
// Get the issuer from a decoded token
|
|
208
|
-
const issuer = getTokenIssuer(decoded);
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Example: JWKS-based Provider
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
import { MastraAuthProvider } from '@mastra/core/server';
|
|
215
|
-
import type { MastraAuthProviderOptions } from '@mastra/core/server';
|
|
216
|
-
import { verifyJwks } from '@mastra/auth';
|
|
217
|
-
import type { JwtPayload } from '@mastra/auth';
|
|
218
|
-
|
|
219
|
-
type MyUser = JwtPayload;
|
|
220
|
-
|
|
221
|
-
interface MyJwksAuthOptions extends MastraAuthProviderOptions<MyUser> {
|
|
222
|
-
jwksUri?: string;
|
|
223
|
-
issuer?: string;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
export class MyJwksAuth extends MastraAuthProvider<MyUser> {
|
|
227
|
-
protected jwksUri: string;
|
|
228
|
-
protected issuer: string;
|
|
229
|
-
|
|
230
|
-
constructor(options?: MyJwksAuthOptions) {
|
|
231
|
-
super({ name: options?.name ?? 'my-jwks-auth' });
|
|
232
|
-
|
|
233
|
-
const jwksUri = options?.jwksUri ?? process.env.MY_JWKS_URI;
|
|
234
|
-
const issuer = options?.issuer ?? process.env.MY_AUTH_ISSUER;
|
|
235
|
-
|
|
236
|
-
if (!jwksUri) {
|
|
237
|
-
throw new Error('JWKS URI is required');
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
this.jwksUri = jwksUri;
|
|
241
|
-
this.issuer = issuer ?? '';
|
|
242
|
-
|
|
243
|
-
this.registerOptions(options);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
async authenticateToken(token: string): Promise<MyUser | null> {
|
|
247
|
-
try {
|
|
248
|
-
const payload = await verifyJwks(token, this.jwksUri);
|
|
249
|
-
|
|
250
|
-
// Optionally validate issuer
|
|
251
|
-
if (this.issuer && payload.iss !== this.issuer) {
|
|
252
|
-
return null;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
return payload;
|
|
256
|
-
} catch {
|
|
257
|
-
return null;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
async authorizeUser(user: MyUser): Promise<boolean> {
|
|
262
|
-
// Check token hasn't expired
|
|
263
|
-
if (user.exp && user.exp * 1000 < Date.now()) {
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
return !!user.sub;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
## Custom Authorization Logic
|
|
272
|
-
|
|
273
|
-
Override the default authorization by providing a custom `authorizeUser` function:
|
|
274
|
-
|
|
275
|
-
```typescript
|
|
276
|
-
const auth = new MyAuthProvider({
|
|
277
|
-
apiUrl: process.env.MY_AUTH_API_URL,
|
|
278
|
-
apiKey: process.env.MY_AUTH_API_KEY,
|
|
279
|
-
|
|
280
|
-
// Custom authorization: require admin role for all requests
|
|
281
|
-
async authorizeUser(user, request) {
|
|
282
|
-
return user.roles.includes('admin');
|
|
283
|
-
},
|
|
284
|
-
});
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
### Role-based Authorization
|
|
288
|
-
|
|
289
|
-
```typescript
|
|
290
|
-
const auth = new MyAuthProvider({
|
|
291
|
-
async authorizeUser(user, request) {
|
|
292
|
-
const path = request.url;
|
|
293
|
-
const method = request.method;
|
|
294
|
-
|
|
295
|
-
// Admin routes require admin role
|
|
296
|
-
if (path.startsWith('/admin/')) {
|
|
297
|
-
return user.roles.includes('admin');
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// Write operations require write role
|
|
301
|
-
if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) {
|
|
302
|
-
return user.roles.includes('write') || user.roles.includes('admin');
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// Read operations allowed for all authenticated users
|
|
306
|
-
return true;
|
|
307
|
-
},
|
|
308
|
-
});
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
## Testing Custom Auth Providers
|
|
312
|
-
|
|
313
|
-
Example test structure using Vitest:
|
|
314
|
-
|
|
315
|
-
```typescript
|
|
316
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
317
|
-
import { MyAuthProvider } from './my-auth-provider';
|
|
318
|
-
|
|
319
|
-
// Mock fetch for API calls
|
|
320
|
-
global.fetch = vi.fn();
|
|
321
|
-
|
|
322
|
-
describe('MyAuthProvider', () => {
|
|
323
|
-
const mockOptions = {
|
|
324
|
-
apiUrl: 'https://auth.example.com',
|
|
325
|
-
apiKey: 'test-api-key',
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
beforeEach(() => {
|
|
329
|
-
vi.clearAllMocks();
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
describe('initialization', () => {
|
|
333
|
-
it('should initialize with provided options', () => {
|
|
334
|
-
const auth = new MyAuthProvider(mockOptions);
|
|
335
|
-
expect(auth).toBeInstanceOf(MyAuthProvider);
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
it('should throw error when required options are missing', () => {
|
|
339
|
-
expect(() => new MyAuthProvider({})).toThrow('Auth API URL and API key are required');
|
|
340
|
-
});
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
describe('authenticateToken', () => {
|
|
344
|
-
it('should return user when token is valid', async () => {
|
|
345
|
-
const mockUser = { id: 'user123', email: 'test@example.com', roles: ['read'] };
|
|
346
|
-
(fetch as any).mockResolvedValue({
|
|
347
|
-
ok: true,
|
|
348
|
-
json: () => Promise.resolve(mockUser),
|
|
349
|
-
});
|
|
350
|
-
|
|
351
|
-
const auth = new MyAuthProvider(mockOptions);
|
|
352
|
-
const result = await auth.authenticateToken('valid-token', {} as any);
|
|
353
|
-
|
|
354
|
-
expect(fetch).toHaveBeenCalledWith(
|
|
355
|
-
'https://auth.example.com/verify',
|
|
356
|
-
expect.objectContaining({
|
|
357
|
-
method: 'POST',
|
|
358
|
-
body: JSON.stringify({ token: 'valid-token' }),
|
|
359
|
-
})
|
|
360
|
-
);
|
|
361
|
-
expect(result).toEqual(mockUser);
|
|
362
|
-
});
|
|
363
|
-
|
|
364
|
-
it('should return null when token is invalid', async () => {
|
|
365
|
-
(fetch as any).mockResolvedValue({ ok: false });
|
|
366
|
-
|
|
367
|
-
const auth = new MyAuthProvider(mockOptions);
|
|
368
|
-
const result = await auth.authenticateToken('invalid-token', {} as any);
|
|
369
|
-
|
|
370
|
-
expect(result).toBeNull();
|
|
371
|
-
});
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
describe('authorizeUser', () => {
|
|
375
|
-
it('should return true when user has valid id', async () => {
|
|
376
|
-
const auth = new MyAuthProvider(mockOptions);
|
|
377
|
-
const result = await auth.authorizeUser(
|
|
378
|
-
{ id: 'user123', email: 'test@example.com', roles: [] },
|
|
379
|
-
{} as any
|
|
380
|
-
);
|
|
381
|
-
|
|
382
|
-
expect(result).toBe(true);
|
|
383
|
-
});
|
|
384
|
-
|
|
385
|
-
it('should return false when user has no id', async () => {
|
|
386
|
-
const auth = new MyAuthProvider(mockOptions);
|
|
387
|
-
const result = await auth.authorizeUser(
|
|
388
|
-
{ id: '', email: 'test@example.com', roles: [] },
|
|
389
|
-
{} as any
|
|
390
|
-
);
|
|
391
|
-
|
|
392
|
-
expect(result).toBe(false);
|
|
393
|
-
});
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
describe('custom authorization', () => {
|
|
397
|
-
it('should use custom authorizeUser when provided', async () => {
|
|
398
|
-
const auth = new MyAuthProvider({
|
|
399
|
-
...mockOptions,
|
|
400
|
-
authorizeUser: (user) => user.roles.includes('admin'),
|
|
401
|
-
});
|
|
402
|
-
|
|
403
|
-
const adminUser = { id: 'user123', email: 'admin@example.com', roles: ['admin'] };
|
|
404
|
-
const regularUser = { id: 'user456', email: 'user@example.com', roles: ['read'] };
|
|
405
|
-
|
|
406
|
-
expect(await auth.authorizeUser(adminUser, {} as any)).toBe(true);
|
|
407
|
-
expect(await auth.authorizeUser(regularUser, {} as any)).toBe(false);
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
|
|
411
|
-
describe('route configuration', () => {
|
|
412
|
-
it('should store public routes configuration', () => {
|
|
413
|
-
const publicRoutes = ['/health', '/api/status'];
|
|
414
|
-
const auth = new MyAuthProvider({
|
|
415
|
-
...mockOptions,
|
|
416
|
-
public: publicRoutes,
|
|
417
|
-
});
|
|
418
|
-
|
|
419
|
-
expect(auth.public).toEqual(publicRoutes);
|
|
420
|
-
});
|
|
421
|
-
|
|
422
|
-
it('should store protected routes configuration', () => {
|
|
423
|
-
const protectedRoutes = ['/api/*', '/admin/*'];
|
|
424
|
-
const auth = new MyAuthProvider({
|
|
425
|
-
...mockOptions,
|
|
426
|
-
protected: protectedRoutes,
|
|
427
|
-
});
|
|
428
|
-
|
|
429
|
-
expect(auth.protected).toEqual(protectedRoutes);
|
|
430
|
-
});
|
|
431
|
-
});
|
|
432
|
-
});
|
|
433
|
-
```
|
|
434
|
-
|
|
435
|
-
## Error Handling
|
|
436
|
-
|
|
437
|
-
Provide descriptive errors for common failure scenarios:
|
|
438
|
-
|
|
439
|
-
```typescript
|
|
440
|
-
export class MyAuthProvider extends MastraAuthProvider<MyUser> {
|
|
441
|
-
constructor(options?: MyAuthOptions) {
|
|
442
|
-
super({ name: options?.name ?? 'my-auth' });
|
|
443
|
-
|
|
444
|
-
const apiUrl = options?.apiUrl ?? process.env.MY_AUTH_API_URL;
|
|
445
|
-
const apiKey = options?.apiKey ?? process.env.MY_AUTH_API_KEY;
|
|
446
|
-
|
|
447
|
-
if (!apiUrl) {
|
|
448
|
-
throw new Error(
|
|
449
|
-
'Missing MY_AUTH_API_URL. Set the environment variable or pass apiUrl in options.'
|
|
450
|
-
);
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
if (!apiKey) {
|
|
454
|
-
throw new Error(
|
|
455
|
-
'Missing MY_AUTH_API_KEY. Set the environment variable or pass apiKey in options.'
|
|
456
|
-
);
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
this.apiUrl = apiUrl;
|
|
460
|
-
this.apiKey = apiKey;
|
|
461
|
-
this.registerOptions(options);
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
async authenticateToken(token: string): Promise<MyUser | null> {
|
|
465
|
-
if (!token || typeof token !== 'string') {
|
|
466
|
-
return null; // Immediate safe fail
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
try {
|
|
470
|
-
const response = await fetch(`${this.apiUrl}/verify`, {
|
|
471
|
-
method: 'POST',
|
|
472
|
-
headers: {
|
|
473
|
-
'Content-Type': 'application/json',
|
|
474
|
-
'X-API-Key': this.apiKey,
|
|
475
|
-
},
|
|
476
|
-
body: JSON.stringify({ token }),
|
|
477
|
-
});
|
|
478
|
-
|
|
479
|
-
if (!response.ok) {
|
|
480
|
-
return null;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
return await response.json();
|
|
484
|
-
} catch (error) {
|
|
485
|
-
// Log error for debugging, but don't expose details to client
|
|
486
|
-
console.error('Auth verification error:', error);
|
|
487
|
-
return null;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
## Built-in Providers
|
|
494
|
-
|
|
495
|
-
Mastra includes these auth providers as reference implementations:
|
|
496
|
-
|
|
497
|
-
- **MastraJwtAuth**: Simple JWT verification with HMAC secrets (`@mastra/auth`)
|
|
498
|
-
- **MastraAuthClerk**: Clerk authentication (`@mastra/auth-clerk`)
|
|
499
|
-
- **MastraAuthAuth0**: Auth0 authentication (`@mastra/auth-auth0`)
|
|
500
|
-
- **MastraAuthSupabase**: Supabase authentication (`@mastra/auth-supabase`)
|
|
501
|
-
- **MastraAuthFirebase**: Firebase authentication (`@mastra/auth-firebase`)
|
|
502
|
-
- **MastraAuthWorkOS**: WorkOS authentication (`@mastra/auth-workos`)
|
|
503
|
-
- **MastraAuthBetterAuth**: Better Auth integration (`@mastra/auth-better-auth`)
|
|
504
|
-
- **SimpleAuth**: Token-to-user mapping for development (`@mastra/core/server`)
|
|
505
|
-
|
|
506
|
-
See the [source code](https://github.com/mastra-ai/mastra/tree/main/auth) for implementation details.
|
|
507
|
-
|
|
508
|
-
## Related
|
|
509
|
-
|
|
510
|
-
- [Auth Overview](https://mastra.ai/docs/server/auth) - Authentication concepts and configuration
|
|
511
|
-
- [JWT Auth](https://mastra.ai/docs/server/auth/jwt) - Simple JWT authentication
|
|
512
|
-
- [Clerk Auth](https://mastra.ai/docs/server/auth/clerk) - Clerk integration
|
|
513
|
-
- [Custom API Routes](https://mastra.ai/docs/server/custom-api-routes) - Controlling authentication on custom endpoints
|