@mastra/core 0.24.5 → 0.24.6
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 +612 -0
- package/dist/agent/agent.d.ts +8 -6
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.types.d.ts +2 -0
- package/dist/agent/agent.types.d.ts.map +1 -1
- package/dist/agent/index.cjs +13 -13
- package/dist/agent/index.js +2 -2
- package/dist/agent/input-processor/index.cjs +6 -6
- package/dist/agent/input-processor/index.js +1 -1
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/message-list/prompt/attachments-to-parts.d.ts.map +1 -1
- package/dist/agent/test-utils.d.ts +4 -3
- package/dist/agent/test-utils.d.ts.map +1 -1
- package/dist/agent/utils.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts +4 -4
- package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +4 -4
- package/dist/agent/workflows/prepare-stream/schema.d.ts +4 -4
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts +8 -1
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
- package/dist/ai-tracing/index.cjs +36 -36
- package/dist/ai-tracing/index.js +1 -1
- package/dist/chunk-3PSWNGBF.js +3 -0
- package/dist/{chunk-ZV5CC35D.js.map → chunk-3PSWNGBF.js.map} +1 -1
- package/dist/{chunk-XHKMGOON.cjs → chunk-42RUESSD.cjs} +204 -150
- package/dist/chunk-42RUESSD.cjs.map +1 -0
- package/dist/{chunk-UD7DS7OY.cjs → chunk-46XGIEXM.cjs} +4 -4
- package/dist/{chunk-UD7DS7OY.cjs.map → chunk-46XGIEXM.cjs.map} +1 -1
- package/dist/{chunk-HGNRQ3OG.js → chunk-5O52O25J.js} +15 -8
- package/dist/chunk-5O52O25J.js.map +1 -0
- package/dist/{chunk-OLERJ2OU.js → chunk-6D2K2CAA.js} +7 -5
- package/dist/chunk-6D2K2CAA.js.map +1 -0
- package/dist/chunk-6XCINXZ7.cjs +194 -0
- package/dist/chunk-6XCINXZ7.cjs.map +1 -0
- package/dist/chunk-BJ6XIEC6.js +13 -0
- package/dist/chunk-BJ6XIEC6.js.map +1 -0
- package/dist/chunk-BWYU7D33.js +192 -0
- package/dist/chunk-BWYU7D33.js.map +1 -0
- package/dist/{chunk-R7UDZZA5.cjs → chunk-CT2DMHGC.cjs} +8 -8
- package/dist/{chunk-R7UDZZA5.cjs.map → chunk-CT2DMHGC.cjs.map} +1 -1
- package/dist/{chunk-YSQE5IHK.cjs → chunk-CYEQK4PM.cjs} +10 -8
- package/dist/chunk-CYEQK4PM.cjs.map +1 -0
- package/dist/{chunk-FCJ5INK7.js → chunk-DHLW4AP7.js} +3 -3
- package/dist/{chunk-FCJ5INK7.js.map → chunk-DHLW4AP7.js.map} +1 -1
- package/dist/{chunk-4UOIJRD6.cjs → chunk-GZDIHQDK.cjs} +4 -4
- package/dist/{chunk-4UOIJRD6.cjs.map → chunk-GZDIHQDK.cjs.map} +1 -1
- package/dist/{chunk-WCHE6FJ7.js → chunk-HCCXJ5YJ.js} +111 -6
- package/dist/chunk-HCCXJ5YJ.js.map +1 -0
- package/dist/{chunk-34ZCWSUA.js → chunk-HSX2K7HB.js} +15 -14
- package/dist/chunk-HSX2K7HB.js.map +1 -0
- package/dist/{chunk-LZFCR2SE.cjs → chunk-IAJHRFO4.cjs} +4 -4
- package/dist/{chunk-LZFCR2SE.cjs.map → chunk-IAJHRFO4.cjs.map} +1 -1
- package/dist/{chunk-4HQPVSGA.cjs → chunk-ICF3MCIN.cjs} +64 -12
- package/dist/chunk-ICF3MCIN.cjs.map +1 -0
- package/dist/{chunk-N2DOZAFH.js → chunk-INOOZ2A2.js} +760 -508
- package/dist/chunk-INOOZ2A2.js.map +1 -0
- package/dist/{chunk-3JX2Y3WH.cjs → chunk-IWU4YSYT.cjs} +16 -15
- package/dist/chunk-IWU4YSYT.cjs.map +1 -0
- package/dist/{chunk-3KVI2HLS.cjs → chunk-KWF3J2Q4.cjs} +11 -11
- package/dist/{chunk-3KVI2HLS.cjs.map → chunk-KWF3J2Q4.cjs.map} +1 -1
- package/dist/{chunk-TEW3ODXX.js → chunk-LAQQETGP.js} +36 -34
- package/dist/chunk-LAQQETGP.js.map +1 -0
- package/dist/{chunk-EUNOQ7HN.js → chunk-MRSBLBQ5.js} +4 -4
- package/dist/{chunk-EUNOQ7HN.js.map → chunk-MRSBLBQ5.js.map} +1 -1
- package/dist/{chunk-LLSLFDO6.js → chunk-NRQC7DQW.js} +57 -5
- package/dist/chunk-NRQC7DQW.js.map +1 -0
- package/dist/{chunk-WBAXXG34.cjs → chunk-PAOBGBU7.cjs} +112 -5
- package/dist/chunk-PAOBGBU7.cjs.map +1 -0
- package/dist/chunk-PE3V7GUL.cjs +4 -0
- package/dist/{chunk-LJFJTTZQ.cjs.map → chunk-PE3V7GUL.cjs.map} +1 -1
- package/dist/{chunk-DOLSYVNJ.cjs → chunk-PIH5FBNQ.cjs} +12 -12
- package/dist/{chunk-DOLSYVNJ.cjs.map → chunk-PIH5FBNQ.cjs.map} +1 -1
- package/dist/{chunk-4SXWN3RR.js → chunk-Q6LWNLAJ.js} +203 -149
- package/dist/chunk-Q6LWNLAJ.js.map +1 -0
- package/dist/{chunk-SL7VKAQ3.js → chunk-R6XC4DV5.js} +7 -7
- package/dist/chunk-R6XC4DV5.js.map +1 -0
- package/dist/{chunk-WNFLWMEP.cjs → chunk-RJOVFHWN.cjs} +765 -511
- package/dist/chunk-RJOVFHWN.cjs.map +1 -0
- package/dist/chunk-UCPGYU55.cjs +15 -0
- package/dist/chunk-UCPGYU55.cjs.map +1 -0
- package/dist/{chunk-K7MEUZ3O.js → chunk-UWTYVVVZ.js} +3 -3
- package/dist/{chunk-K7MEUZ3O.js.map → chunk-UWTYVVVZ.js.map} +1 -1
- package/dist/{chunk-ZISECZZO.js → chunk-VHEA3YXS.js} +2 -2
- package/dist/chunk-VHEA3YXS.js.map +1 -0
- package/dist/chunk-VXHOOZSK.js +446 -0
- package/dist/chunk-VXHOOZSK.js.map +1 -0
- package/dist/{chunk-NUAURT4I.cjs → chunk-W4UVO3HL.cjs} +2 -2
- package/dist/chunk-W4UVO3HL.cjs.map +1 -0
- package/dist/{chunk-ZIHEKHUB.js → chunk-WIMFJ2BA.js} +3 -3
- package/dist/{chunk-ZIHEKHUB.js.map → chunk-WIMFJ2BA.js.map} +1 -1
- package/dist/{chunk-LRSB62Z6.cjs → chunk-X7F4CSGR.cjs} +15 -8
- package/dist/chunk-X7F4CSGR.cjs.map +1 -0
- package/dist/{chunk-WUFFST2N.cjs → chunk-XDMQQZNX.cjs} +70 -68
- package/dist/chunk-XDMQQZNX.cjs.map +1 -0
- package/dist/chunk-XWGHD4C7.cjs +450 -0
- package/dist/chunk-XWGHD4C7.cjs.map +1 -0
- package/dist/{chunk-FZXAPBVV.js → chunk-Z6QCWTTO.js} +3 -3
- package/dist/{chunk-FZXAPBVV.js.map → chunk-Z6QCWTTO.js.map} +1 -1
- package/dist/{chunk-GWACPQ56.js → chunk-ZIWN73GQ.js} +5 -5
- package/dist/{chunk-GWACPQ56.js.map → chunk-ZIWN73GQ.js.map} +1 -1
- package/dist/{chunk-IJRERAWQ.cjs → chunk-ZOYE65RA.cjs} +8 -8
- package/dist/chunk-ZOYE65RA.cjs.map +1 -0
- package/dist/index.cjs +75 -54
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -10
- package/dist/index.js.map +1 -1
- package/dist/llm/index.cjs +24 -8
- package/dist/llm/index.d.ts +1 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +5 -1
- package/dist/llm/model/gateways/base.d.ts +9 -4
- package/dist/llm/model/gateways/base.d.ts.map +1 -1
- package/dist/llm/model/gateways/index.d.ts +3 -1
- package/dist/llm/model/gateways/index.d.ts.map +1 -1
- package/dist/llm/model/gateways/models-dev.d.ts +3 -2
- package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
- package/dist/llm/model/gateways/netlify.d.ts +4 -3
- package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
- package/dist/llm/model/model.d.ts.map +1 -1
- package/dist/llm/model/model.loop.d.ts +1 -1
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/provider-registry.d.ts +11 -1
- package/dist/llm/model/provider-registry.d.ts.map +1 -1
- package/dist/llm/model/provider-types.generated.d.ts +324 -29
- package/dist/llm/model/registry-generator.d.ts +12 -0
- package/dist/llm/model/registry-generator.d.ts.map +1 -1
- package/dist/llm/model/resolve-model.d.ts.map +1 -1
- package/dist/llm/model/router.d.ts +6 -1
- package/dist/llm/model/router.d.ts.map +1 -1
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/loop.d.ts.map +1 -1
- package/dist/loop/network/index.d.ts +6 -6
- package/dist/loop/network/index.d.ts.map +1 -1
- package/dist/loop/test-utils/generateText.d.ts.map +1 -1
- package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
- package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
- package/dist/loop/types.d.ts +8 -0
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts +36 -36
- package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +24 -24
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +12 -12
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts +1 -1
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts +36 -36
- package/dist/loop/workflows/schema.d.ts +16 -16
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.d.ts +23 -0
- package/dist/mastra/index.d.ts.map +1 -1
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +4 -4
- package/dist/memory/index.js +1 -1
- package/dist/memory/types.d.ts +3 -2
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/models-dev-LJ4O6FNF.js +3 -0
- package/dist/{models-dev-BL5TAKE6.js.map → models-dev-LJ4O6FNF.js.map} +1 -1
- package/dist/models-dev-T2CXOEDH.cjs +12 -0
- package/dist/{models-dev-HZ3LZHPX.cjs.map → models-dev-T2CXOEDH.cjs.map} +1 -1
- package/dist/netlify-BAEMIQNH.cjs +12 -0
- package/dist/{netlify-TX6V7SJJ.cjs.map → netlify-BAEMIQNH.cjs.map} +1 -1
- package/dist/netlify-L7AZ74PV.js +3 -0
- package/dist/{netlify-VJXBII33.js.map → netlify-L7AZ74PV.js.map} +1 -1
- package/dist/processors/index.cjs +11 -11
- package/dist/processors/index.js +1 -1
- package/dist/provider-registry-RUDYHG7J.cjs +40 -0
- package/dist/provider-registry-RUDYHG7J.cjs.map +1 -0
- package/dist/provider-registry-THITZUJ7.js +3 -0
- package/dist/provider-registry-THITZUJ7.js.map +1 -0
- package/dist/provider-registry.json +705 -68
- package/dist/{registry-generator-6WVOHM2L.cjs → registry-generator-DL42NMBM.cjs} +23 -6
- package/dist/registry-generator-DL42NMBM.cjs.map +1 -0
- package/dist/{registry-generator-DXRSYYYT.js → registry-generator-I6S4ARS6.js} +23 -7
- package/dist/registry-generator-I6S4ARS6.js.map +1 -0
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/index.cjs +9 -9
- package/dist/scores/index.js +2 -2
- package/dist/scores/scoreTraces/index.cjs +8 -8
- package/dist/scores/scoreTraces/index.js +3 -3
- package/dist/server/composite-auth.d.ts +9 -0
- package/dist/server/composite-auth.d.ts.map +1 -0
- package/dist/server/index.cjs +83 -1
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +82 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/simple-auth.d.ts +32 -0
- package/dist/server/simple-auth.d.ts.map +1 -0
- package/dist/storage/index.cjs +3 -3
- package/dist/storage/index.js +1 -1
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +11 -11
- package/dist/stream/index.js +2 -2
- package/dist/stream/types.d.ts +7 -2
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.cjs +2 -2
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/tools/index.cjs +2 -2
- package/dist/tools/index.js +1 -1
- package/dist/tools/stream.d.ts +1 -0
- package/dist/tools/stream.d.ts.map +1 -1
- package/dist/utils.cjs +17 -17
- package/dist/utils.js +1 -1
- package/dist/vector/filter/index.cjs +7 -189
- package/dist/vector/filter/index.cjs.map +1 -1
- package/dist/vector/filter/index.js +1 -190
- package/dist/vector/filter/index.js.map +1 -1
- package/dist/vector/index.cjs +9 -4
- package/dist/vector/index.d.ts +1 -0
- package/dist/vector/index.d.ts.map +1 -1
- package/dist/vector/index.js +2 -1
- package/dist/vector/types.d.ts +86 -3
- package/dist/vector/types.d.ts.map +1 -1
- package/dist/vector/vector.d.ts +39 -2
- package/dist/vector/vector.d.ts.map +1 -1
- package/dist/voice/aisdk/index.d.ts +3 -0
- package/dist/voice/aisdk/index.d.ts.map +1 -0
- package/dist/voice/aisdk/speech.d.ts +23 -0
- package/dist/voice/aisdk/speech.d.ts.map +1 -0
- package/dist/voice/aisdk/transcription.d.ts +22 -0
- package/dist/voice/aisdk/transcription.d.ts.map +1 -0
- package/dist/voice/composite-voice.d.ts +3 -2
- package/dist/voice/composite-voice.d.ts.map +1 -1
- package/dist/voice/index.cjs +12 -4
- package/dist/voice/index.d.ts +1 -0
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/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 +14 -14
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/legacy/index.cjs +22 -22
- package/dist/workflows/legacy/index.js +1 -1
- package/dist/workflows/legacy/machine.d.ts +1 -1
- package/dist/workflows/legacy/workflow-instance.d.ts +2 -2
- package/dist/workflows/utils.d.ts.map +1 -1
- package/dist/workflows/workflow.d.ts +2 -0
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/llm/model/provider-types.generated.d.ts +324 -29
- package/dist/chunk-34ZCWSUA.js.map +0 -1
- package/dist/chunk-3JX2Y3WH.cjs.map +0 -1
- package/dist/chunk-4HQPVSGA.cjs.map +0 -1
- package/dist/chunk-4SXWN3RR.js.map +0 -1
- package/dist/chunk-HF3GZRFP.cjs +0 -9
- package/dist/chunk-HF3GZRFP.cjs.map +0 -1
- package/dist/chunk-HGNRQ3OG.js.map +0 -1
- package/dist/chunk-IJRERAWQ.cjs.map +0 -1
- package/dist/chunk-LJFJTTZQ.cjs +0 -4
- package/dist/chunk-LLSLFDO6.js.map +0 -1
- package/dist/chunk-LRSB62Z6.cjs.map +0 -1
- package/dist/chunk-N2DOZAFH.js.map +0 -1
- package/dist/chunk-NUAURT4I.cjs.map +0 -1
- package/dist/chunk-OLERJ2OU.js.map +0 -1
- package/dist/chunk-RKXWLG33.js +0 -7
- package/dist/chunk-RKXWLG33.js.map +0 -1
- package/dist/chunk-SL7VKAQ3.js.map +0 -1
- package/dist/chunk-TEW3ODXX.js.map +0 -1
- package/dist/chunk-WBAXXG34.cjs.map +0 -1
- package/dist/chunk-WCHE6FJ7.js.map +0 -1
- package/dist/chunk-WNFLWMEP.cjs.map +0 -1
- package/dist/chunk-WUFFST2N.cjs.map +0 -1
- package/dist/chunk-XHKMGOON.cjs.map +0 -1
- package/dist/chunk-YSQE5IHK.cjs.map +0 -1
- package/dist/chunk-ZISECZZO.js.map +0 -1
- package/dist/chunk-ZV5CC35D.js +0 -3
- package/dist/models-dev-BL5TAKE6.js +0 -3
- package/dist/models-dev-HZ3LZHPX.cjs +0 -12
- package/dist/netlify-TX6V7SJJ.cjs +0 -12
- package/dist/netlify-VJXBII33.js +0 -3
- package/dist/registry-generator-6WVOHM2L.cjs.map +0 -1
- package/dist/registry-generator-DXRSYYYT.js.map +0 -1
|
@@ -8,6 +8,20 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
8
8
|
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
9
9
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
10
10
|
|
|
11
|
+
async function atomicWriteFile(filePath, content, encoding = "utf-8") {
|
|
12
|
+
const randomSuffix = Math.random().toString(36).substring(2, 15);
|
|
13
|
+
const tempPath = `${filePath}.${process.pid}.${Date.now()}.${randomSuffix}.tmp`;
|
|
14
|
+
try {
|
|
15
|
+
await fs__default.default.writeFile(tempPath, content, encoding);
|
|
16
|
+
await fs__default.default.rename(tempPath, filePath);
|
|
17
|
+
} catch (error) {
|
|
18
|
+
try {
|
|
19
|
+
await fs__default.default.unlink(tempPath);
|
|
20
|
+
} catch {
|
|
21
|
+
}
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
11
25
|
async function fetchProvidersFromGateways(gateways) {
|
|
12
26
|
const allProviders = {};
|
|
13
27
|
const allModels = {};
|
|
@@ -17,9 +31,11 @@ async function fetchProvidersFromGateways(gateways) {
|
|
|
17
31
|
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
18
32
|
try {
|
|
19
33
|
const providers = await gateway.fetchProviders();
|
|
34
|
+
const isProviderRegistry = gateway.id === "models.dev";
|
|
20
35
|
for (const [providerId, config] of Object.entries(providers)) {
|
|
21
|
-
|
|
22
|
-
|
|
36
|
+
const typeProviderId = isProviderRegistry ? providerId : providerId === gateway.id ? gateway.id : `${gateway.id}/${providerId}`;
|
|
37
|
+
allProviders[typeProviderId] = config;
|
|
38
|
+
allModels[typeProviderId] = config.models.sort();
|
|
23
39
|
}
|
|
24
40
|
lastError = null;
|
|
25
41
|
break;
|
|
@@ -105,13 +121,14 @@ async function writeRegistryFiles(jsonPath, typesPath, providers, models) {
|
|
|
105
121
|
models,
|
|
106
122
|
version: "1.0.0"
|
|
107
123
|
};
|
|
108
|
-
await
|
|
124
|
+
await atomicWriteFile(jsonPath, JSON.stringify(registryData, null, 2), "utf-8");
|
|
109
125
|
const typeContent = generateTypesContent(models);
|
|
110
|
-
await
|
|
126
|
+
await atomicWriteFile(typesPath, typeContent, "utf-8");
|
|
111
127
|
}
|
|
112
128
|
|
|
129
|
+
exports.atomicWriteFile = atomicWriteFile;
|
|
113
130
|
exports.fetchProvidersFromGateways = fetchProvidersFromGateways;
|
|
114
131
|
exports.generateTypesContent = generateTypesContent;
|
|
115
132
|
exports.writeRegistryFiles = writeRegistryFiles;
|
|
116
|
-
//# sourceMappingURL=registry-generator-
|
|
117
|
-
//# sourceMappingURL=registry-generator-
|
|
133
|
+
//# sourceMappingURL=registry-generator-DL42NMBM.cjs.map
|
|
134
|
+
//# sourceMappingURL=registry-generator-DL42NMBM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/model/registry-generator.ts"],"names":["fs","path"],"mappings":"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","file":"registry-generator-DL42NMBM.cjs","sourcesContent":["/**\n * Shared provider registry generation logic\n * Used by both the CLI generation script and runtime refresh\n */\n\nimport fs from 'fs/promises';\nimport path from 'path';\nimport type { MastraModelGateway, ProviderConfig } from './gateways/base.js';\n\n/**\n * Write a file atomically using the write-to-temp-then-rename pattern.\n * This prevents file corruption when multiple processes write to the same file concurrently.\n *\n * The rename operation is atomic on POSIX systems when source and destination\n * are on the same filesystem.\n *\n * @param filePath - The target file path\n * @param content - The content to write\n * @param encoding - The encoding to use (default: 'utf-8')\n */\nexport async function atomicWriteFile(\n filePath: string,\n content: string,\n encoding: BufferEncoding = 'utf-8',\n): Promise<void> {\n // Create a unique temp file name using PID, timestamp, and random suffix to avoid collisions\n const randomSuffix = Math.random().toString(36).substring(2, 15);\n const tempPath = `${filePath}.${process.pid}.${Date.now()}.${randomSuffix}.tmp`;\n\n try {\n // Write to temp file first\n await fs.writeFile(tempPath, content, encoding);\n\n // Atomically rename temp file to target path\n // This is atomic on POSIX when both paths are on the same filesystem\n await fs.rename(tempPath, filePath);\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await fs.unlink(tempPath);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Fetch providers from all gateways with retry logic\n * @param gateways - Array of gateway instances to fetch from\n * @returns Object containing providers and models records\n */\nexport async function fetchProvidersFromGateways(\n gateways: MastraModelGateway[],\n): Promise<{ providers: Record<string, ProviderConfig>; models: Record<string, string[]> }> {\n const allProviders: Record<string, ProviderConfig> = {};\n const allModels: Record<string, string[]> = {};\n\n const maxRetries = 3;\n\n for (const gateway of gateways) {\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n const providers = await gateway.fetchProviders();\n\n // models.dev is a provider registry, not a true gateway - don't prefix its providers\n const isProviderRegistry = gateway.id === 'models.dev';\n\n for (const [providerId, config] of Object.entries(providers)) {\n // For true gateways, use gateway.id as prefix (e.g., \"netlify/anthropic\")\n // Special case: if providerId matches gateway.id, it's a unified gateway (e.g., netlify returning {netlify: {...}})\n // In this case, use just the gateway ID to avoid duplication (netlify, not netlify/netlify)\n const typeProviderId = isProviderRegistry\n ? providerId\n : providerId === gateway.id\n ? gateway.id\n : `${gateway.id}/${providerId}`;\n\n allProviders[typeProviderId] = config;\n // Sort models alphabetically for consistent ordering\n allModels[typeProviderId] = config.models.sort();\n }\n\n lastError = null;\n break; // Success, exit retry loop\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt < maxRetries) {\n // Wait before retrying (exponential backoff)\n const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 5000);\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\n }\n }\n\n // If all retries failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n }\n\n return { providers: allProviders, models: allModels };\n}\n\n/**\n * Generate TypeScript type definitions content\n * @param models - Record of provider IDs to model arrays\n * @returns Generated TypeScript type definitions as a string\n */\nexport function generateTypesContent(models: Record<string, string[]>): string {\n const providerModelsEntries = Object.entries(models)\n .map(([provider, modelList]) => {\n const modelsList = modelList.map(m => `'${m}'`);\n\n // Only quote provider key if it contains special characters (like dashes)\n const needsQuotes = /[^a-zA-Z0-9_$]/.test(provider);\n const providerKey = needsQuotes ? `'${provider}'` : provider;\n\n // Format array based on length (prettier printWidth: 120)\n const singleLine = ` readonly ${providerKey}: readonly [${modelsList.join(', ')}];`;\n\n // If single line exceeds 120 chars, format as multi-line\n if (singleLine.length > 120) {\n const formattedModels = modelList.map(m => ` '${m}',`).join('\\n');\n return ` readonly ${providerKey}: readonly [\\n${formattedModels}\\n ];`;\n }\n\n return singleLine;\n })\n .join('\\n');\n\n return `/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\n/**\n * Provider models mapping type\n * This is derived from the JSON data and provides type-safe access\n */\nexport type ProviderModelsMap = {\n${providerModelsEntries}\n};\n\n/**\n * Union type of all registered provider IDs\n */\nexport type Provider = keyof ProviderModelsMap;\n\n/**\n * Provider models mapping interface\n */\nexport interface ProviderModels {\n [key: string]: string[];\n}\n\n/**\n * OpenAI-compatible model ID type\n * Dynamically derived from ProviderModelsMap\n * Full provider/model paths (e.g., \"openai/gpt-4o\", \"anthropic/claude-3-5-sonnet-20241022\")\n */\nexport type ModelRouterModelId =\n | {\n [P in Provider]: \\`\\${P}/\\${ProviderModelsMap[P][number]}\\`;\n }[Provider]\n | (string & {});\n\n/**\n * Extract the model part from a ModelRouterModelId for a specific provider\n * Dynamically derived from ProviderModelsMap\n * Example: ModelForProvider<'openai'> = 'gpt-4o' | 'gpt-4-turbo' | ...\n */\nexport type ModelForProvider<P extends Provider> = ProviderModelsMap[P][number];\n`;\n}\n\n/**\n * Write registry files to disk (JSON and .d.ts)\n * @param jsonPath - Path to write the JSON file\n * @param typesPath - Path to write the .d.ts file\n * @param providers - Provider configurations\n * @param models - Model lists by provider\n */\nexport async function writeRegistryFiles(\n jsonPath: string,\n typesPath: string,\n providers: Record<string, ProviderConfig>,\n models: Record<string, string[]>,\n): Promise<void> {\n // 0. Ensure directories exist\n const jsonDir = path.dirname(jsonPath);\n const typesDir = path.dirname(typesPath);\n await fs.mkdir(jsonDir, { recursive: true });\n await fs.mkdir(typesDir, { recursive: true });\n\n // 1. Write JSON file atomically to prevent corruption from concurrent writes\n const registryData = {\n providers,\n models,\n version: '1.0.0',\n };\n\n await atomicWriteFile(jsonPath, JSON.stringify(registryData, null, 2), 'utf-8');\n\n // 2. Generate .d.ts file with type-only declarations (also atomic)\n const typeContent = generateTypesContent(models);\n await atomicWriteFile(typesPath, typeContent, 'utf-8');\n}\n"]}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import fs from 'fs/promises';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
|
|
4
|
+
async function atomicWriteFile(filePath, content, encoding = "utf-8") {
|
|
5
|
+
const randomSuffix = Math.random().toString(36).substring(2, 15);
|
|
6
|
+
const tempPath = `${filePath}.${process.pid}.${Date.now()}.${randomSuffix}.tmp`;
|
|
7
|
+
try {
|
|
8
|
+
await fs.writeFile(tempPath, content, encoding);
|
|
9
|
+
await fs.rename(tempPath, filePath);
|
|
10
|
+
} catch (error) {
|
|
11
|
+
try {
|
|
12
|
+
await fs.unlink(tempPath);
|
|
13
|
+
} catch {
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
4
18
|
async function fetchProvidersFromGateways(gateways) {
|
|
5
19
|
const allProviders = {};
|
|
6
20
|
const allModels = {};
|
|
@@ -10,9 +24,11 @@ async function fetchProvidersFromGateways(gateways) {
|
|
|
10
24
|
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
11
25
|
try {
|
|
12
26
|
const providers = await gateway.fetchProviders();
|
|
27
|
+
const isProviderRegistry = gateway.id === "models.dev";
|
|
13
28
|
for (const [providerId, config] of Object.entries(providers)) {
|
|
14
|
-
|
|
15
|
-
|
|
29
|
+
const typeProviderId = isProviderRegistry ? providerId : providerId === gateway.id ? gateway.id : `${gateway.id}/${providerId}`;
|
|
30
|
+
allProviders[typeProviderId] = config;
|
|
31
|
+
allModels[typeProviderId] = config.models.sort();
|
|
16
32
|
}
|
|
17
33
|
lastError = null;
|
|
18
34
|
break;
|
|
@@ -98,11 +114,11 @@ async function writeRegistryFiles(jsonPath, typesPath, providers, models) {
|
|
|
98
114
|
models,
|
|
99
115
|
version: "1.0.0"
|
|
100
116
|
};
|
|
101
|
-
await
|
|
117
|
+
await atomicWriteFile(jsonPath, JSON.stringify(registryData, null, 2), "utf-8");
|
|
102
118
|
const typeContent = generateTypesContent(models);
|
|
103
|
-
await
|
|
119
|
+
await atomicWriteFile(typesPath, typeContent, "utf-8");
|
|
104
120
|
}
|
|
105
121
|
|
|
106
|
-
export { fetchProvidersFromGateways, generateTypesContent, writeRegistryFiles };
|
|
107
|
-
//# sourceMappingURL=registry-generator-
|
|
108
|
-
//# sourceMappingURL=registry-generator-
|
|
122
|
+
export { atomicWriteFile, fetchProvidersFromGateways, generateTypesContent, writeRegistryFiles };
|
|
123
|
+
//# sourceMappingURL=registry-generator-I6S4ARS6.js.map
|
|
124
|
+
//# sourceMappingURL=registry-generator-I6S4ARS6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/model/registry-generator.ts"],"names":[],"mappings":"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","file":"registry-generator-I6S4ARS6.js","sourcesContent":["/**\n * Shared provider registry generation logic\n * Used by both the CLI generation script and runtime refresh\n */\n\nimport fs from 'fs/promises';\nimport path from 'path';\nimport type { MastraModelGateway, ProviderConfig } from './gateways/base.js';\n\n/**\n * Write a file atomically using the write-to-temp-then-rename pattern.\n * This prevents file corruption when multiple processes write to the same file concurrently.\n *\n * The rename operation is atomic on POSIX systems when source and destination\n * are on the same filesystem.\n *\n * @param filePath - The target file path\n * @param content - The content to write\n * @param encoding - The encoding to use (default: 'utf-8')\n */\nexport async function atomicWriteFile(\n filePath: string,\n content: string,\n encoding: BufferEncoding = 'utf-8',\n): Promise<void> {\n // Create a unique temp file name using PID, timestamp, and random suffix to avoid collisions\n const randomSuffix = Math.random().toString(36).substring(2, 15);\n const tempPath = `${filePath}.${process.pid}.${Date.now()}.${randomSuffix}.tmp`;\n\n try {\n // Write to temp file first\n await fs.writeFile(tempPath, content, encoding);\n\n // Atomically rename temp file to target path\n // This is atomic on POSIX when both paths are on the same filesystem\n await fs.rename(tempPath, filePath);\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await fs.unlink(tempPath);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Fetch providers from all gateways with retry logic\n * @param gateways - Array of gateway instances to fetch from\n * @returns Object containing providers and models records\n */\nexport async function fetchProvidersFromGateways(\n gateways: MastraModelGateway[],\n): Promise<{ providers: Record<string, ProviderConfig>; models: Record<string, string[]> }> {\n const allProviders: Record<string, ProviderConfig> = {};\n const allModels: Record<string, string[]> = {};\n\n const maxRetries = 3;\n\n for (const gateway of gateways) {\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n const providers = await gateway.fetchProviders();\n\n // models.dev is a provider registry, not a true gateway - don't prefix its providers\n const isProviderRegistry = gateway.id === 'models.dev';\n\n for (const [providerId, config] of Object.entries(providers)) {\n // For true gateways, use gateway.id as prefix (e.g., \"netlify/anthropic\")\n // Special case: if providerId matches gateway.id, it's a unified gateway (e.g., netlify returning {netlify: {...}})\n // In this case, use just the gateway ID to avoid duplication (netlify, not netlify/netlify)\n const typeProviderId = isProviderRegistry\n ? providerId\n : providerId === gateway.id\n ? gateway.id\n : `${gateway.id}/${providerId}`;\n\n allProviders[typeProviderId] = config;\n // Sort models alphabetically for consistent ordering\n allModels[typeProviderId] = config.models.sort();\n }\n\n lastError = null;\n break; // Success, exit retry loop\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt < maxRetries) {\n // Wait before retrying (exponential backoff)\n const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 5000);\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\n }\n }\n\n // If all retries failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n }\n\n return { providers: allProviders, models: allModels };\n}\n\n/**\n * Generate TypeScript type definitions content\n * @param models - Record of provider IDs to model arrays\n * @returns Generated TypeScript type definitions as a string\n */\nexport function generateTypesContent(models: Record<string, string[]>): string {\n const providerModelsEntries = Object.entries(models)\n .map(([provider, modelList]) => {\n const modelsList = modelList.map(m => `'${m}'`);\n\n // Only quote provider key if it contains special characters (like dashes)\n const needsQuotes = /[^a-zA-Z0-9_$]/.test(provider);\n const providerKey = needsQuotes ? `'${provider}'` : provider;\n\n // Format array based on length (prettier printWidth: 120)\n const singleLine = ` readonly ${providerKey}: readonly [${modelsList.join(', ')}];`;\n\n // If single line exceeds 120 chars, format as multi-line\n if (singleLine.length > 120) {\n const formattedModels = modelList.map(m => ` '${m}',`).join('\\n');\n return ` readonly ${providerKey}: readonly [\\n${formattedModels}\\n ];`;\n }\n\n return singleLine;\n })\n .join('\\n');\n\n return `/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\n/**\n * Provider models mapping type\n * This is derived from the JSON data and provides type-safe access\n */\nexport type ProviderModelsMap = {\n${providerModelsEntries}\n};\n\n/**\n * Union type of all registered provider IDs\n */\nexport type Provider = keyof ProviderModelsMap;\n\n/**\n * Provider models mapping interface\n */\nexport interface ProviderModels {\n [key: string]: string[];\n}\n\n/**\n * OpenAI-compatible model ID type\n * Dynamically derived from ProviderModelsMap\n * Full provider/model paths (e.g., \"openai/gpt-4o\", \"anthropic/claude-3-5-sonnet-20241022\")\n */\nexport type ModelRouterModelId =\n | {\n [P in Provider]: \\`\\${P}/\\${ProviderModelsMap[P][number]}\\`;\n }[Provider]\n | (string & {});\n\n/**\n * Extract the model part from a ModelRouterModelId for a specific provider\n * Dynamically derived from ProviderModelsMap\n * Example: ModelForProvider<'openai'> = 'gpt-4o' | 'gpt-4-turbo' | ...\n */\nexport type ModelForProvider<P extends Provider> = ProviderModelsMap[P][number];\n`;\n}\n\n/**\n * Write registry files to disk (JSON and .d.ts)\n * @param jsonPath - Path to write the JSON file\n * @param typesPath - Path to write the .d.ts file\n * @param providers - Provider configurations\n * @param models - Model lists by provider\n */\nexport async function writeRegistryFiles(\n jsonPath: string,\n typesPath: string,\n providers: Record<string, ProviderConfig>,\n models: Record<string, string[]>,\n): Promise<void> {\n // 0. Ensure directories exist\n const jsonDir = path.dirname(jsonPath);\n const typesDir = path.dirname(typesPath);\n await fs.mkdir(jsonDir, { recursive: true });\n await fs.mkdir(typesDir, { recursive: true });\n\n // 1. Write JSON file atomically to prevent corruption from concurrent writes\n const registryData = {\n providers,\n models,\n version: '1.0.0',\n };\n\n await atomicWriteFile(jsonPath, JSON.stringify(registryData, null, 2), 'utf-8');\n\n // 2. Generate .d.ts file with type-only declarations (also atomic)\n const typeContent = generateTypesContent(models);\n await atomicWriteFile(typesPath, typeContent, 'utf-8');\n}\n"]}
|
package/dist/relevance/index.cjs
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkGZDIHQDK_cjs = require('../chunk-GZDIHQDK.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
Object.defineProperty(exports, "CohereRelevanceScorer", {
|
|
8
8
|
enumerable: true,
|
|
9
|
-
get: function () { return
|
|
9
|
+
get: function () { return chunkGZDIHQDK_cjs.CohereRelevanceScorer; }
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "MastraAgentRelevanceScorer", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return chunkGZDIHQDK_cjs.MastraAgentRelevanceScorer; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "createSimilarityPrompt", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkGZDIHQDK_cjs.createSimilarityPrompt; }
|
|
18
18
|
});
|
|
19
19
|
//# sourceMappingURL=index.cjs.map
|
|
20
20
|
//# sourceMappingURL=index.cjs.map
|
package/dist/relevance/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { CohereRelevanceScorer, MastraAgentRelevanceScorer, createSimilarityPrompt } from '../chunk-
|
|
1
|
+
export { CohereRelevanceScorer, MastraAgentRelevanceScorer, createSimilarityPrompt } from '../chunk-DHLW4AP7.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/scores/index.cjs
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkKWF3J2Q4_cjs = require('../chunk-KWF3J2Q4.cjs');
|
|
4
|
+
var chunk46XGIEXM_cjs = require('../chunk-46XGIEXM.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "MastraScorer", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkKWF3J2Q4_cjs.MastraScorer; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "createScorer", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkKWF3J2Q4_cjs.createScorer; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "runExperiment", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkKWF3J2Q4_cjs.runExperiment; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "saveScorePayloadSchema", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunk46XGIEXM_cjs.saveScorePayloadSchema; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "scoreResultSchema", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunk46XGIEXM_cjs.scoreResultSchema; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "scoringExtractStepResultSchema", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunk46XGIEXM_cjs.scoringExtractStepResultSchema; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "scoringValueSchema", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunk46XGIEXM_cjs.scoringValueSchema; }
|
|
35
35
|
});
|
|
36
36
|
//# sourceMappingURL=index.cjs.map
|
|
37
37
|
//# sourceMappingURL=index.cjs.map
|
package/dist/scores/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { MastraScorer, createScorer, runExperiment } from '../chunk-
|
|
2
|
-
export { saveScorePayloadSchema, scoreResultSchema, scoringExtractStepResultSchema, scoringValueSchema } from '../chunk-
|
|
1
|
+
export { MastraScorer, createScorer, runExperiment } from '../chunk-MRSBLBQ5.js';
|
|
2
|
+
export { saveScorePayloadSchema, scoreResultSchema, scoringExtractStepResultSchema, scoringValueSchema } from '../chunk-UWTYVVVZ.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkPIH5FBNQ_cjs = require('../../chunk-PIH5FBNQ.cjs');
|
|
4
|
+
var chunk46XGIEXM_cjs = require('../../chunk-46XGIEXM.cjs');
|
|
5
|
+
var chunk42RUESSD_cjs = require('../../chunk-42RUESSD.cjs');
|
|
6
6
|
var chunk5NTO7S5I_cjs = require('../../chunk-5NTO7S5I.cjs');
|
|
7
7
|
var pMap = require('p-map');
|
|
8
8
|
var z = require('zod');
|
|
@@ -76,7 +76,7 @@ function normalizeMessageContent(content) {
|
|
|
76
76
|
role: "user",
|
|
77
77
|
parts: content.map((part) => ({ type: part.type, text: part.text }))
|
|
78
78
|
};
|
|
79
|
-
const converted =
|
|
79
|
+
const converted = chunk42RUESSD_cjs.convertMessages(tempMessage).to("AIV4.UI");
|
|
80
80
|
return converted[0]?.content || "";
|
|
81
81
|
}
|
|
82
82
|
function convertToUIMessage(message, createdAt) {
|
|
@@ -94,7 +94,7 @@ function convertToUIMessage(message, createdAt) {
|
|
|
94
94
|
parts: message.content.map((part) => ({ type: part.type, text: part.text }))
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
-
const converted =
|
|
97
|
+
const converted = chunk42RUESSD_cjs.convertMessages(messageInput).to("AIV4.UI");
|
|
98
98
|
const result = converted[0];
|
|
99
99
|
if (!result) {
|
|
100
100
|
throw new Error("Failed to convert message");
|
|
@@ -234,7 +234,7 @@ function transformTraceToScorerInputAndOutput(trace) {
|
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
// src/scores/scoreTraces/scoreTracesWorkflow.ts
|
|
237
|
-
var getTraceStep =
|
|
237
|
+
var getTraceStep = chunkPIH5FBNQ_cjs.createStep({
|
|
238
238
|
id: "__process-trace-scoring",
|
|
239
239
|
inputSchema: z__default.default.object({
|
|
240
240
|
targets: z__default.default.array(
|
|
@@ -362,7 +362,7 @@ async function runScorerOnTarget({
|
|
|
362
362
|
await attachScoreToSpan({ storage, span, scoreRecord: savedScoreRecord });
|
|
363
363
|
}
|
|
364
364
|
async function validateAndSaveScore({ storage, scorerResult }) {
|
|
365
|
-
const payloadToSave =
|
|
365
|
+
const payloadToSave = chunk46XGIEXM_cjs.saveScorePayloadSchema.parse(scorerResult);
|
|
366
366
|
const result = await storage.saveScore(payloadToSave);
|
|
367
367
|
return result.score;
|
|
368
368
|
}
|
|
@@ -404,7 +404,7 @@ async function attachScoreToSpan({
|
|
|
404
404
|
updates: { links: [...existingLinks, link] }
|
|
405
405
|
});
|
|
406
406
|
}
|
|
407
|
-
var scoreTracesWorkflow =
|
|
407
|
+
var scoreTracesWorkflow = chunkPIH5FBNQ_cjs.createWorkflow({
|
|
408
408
|
id: "__batch-scoring-traces",
|
|
409
409
|
inputSchema: z__default.default.object({
|
|
410
410
|
targets: z__default.default.array(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createStep, createWorkflow } from '../../chunk-
|
|
2
|
-
import { saveScorePayloadSchema } from '../../chunk-
|
|
3
|
-
import { convertMessages } from '../../chunk-
|
|
1
|
+
import { createStep, createWorkflow } from '../../chunk-Z6QCWTTO.js';
|
|
2
|
+
import { saveScorePayloadSchema } from '../../chunk-UWTYVVVZ.js';
|
|
3
|
+
import { convertMessages } from '../../chunk-Q6LWNLAJ.js';
|
|
4
4
|
import { MastraError } from '../../chunk-PZUZNPFM.js';
|
|
5
5
|
import pMap from 'p-map';
|
|
6
6
|
import z from 'zod';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HonoRequest } from 'hono';
|
|
2
|
+
import { MastraAuthProvider } from './auth.js';
|
|
3
|
+
export declare class CompositeAuth extends MastraAuthProvider {
|
|
4
|
+
private providers;
|
|
5
|
+
constructor(providers: MastraAuthProvider[]);
|
|
6
|
+
authenticateToken(token: string, request: HonoRequest): Promise<unknown | null>;
|
|
7
|
+
authorizeUser(user: unknown, request: HonoRequest): Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=composite-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-auth.d.ts","sourceRoot":"","sources":["../../src/server/composite-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C,qBAAa,aAAc,SAAQ,kBAAkB;IACnD,OAAO,CAAC,SAAS,CAAuB;gBAE5B,SAAS,EAAE,kBAAkB,EAAE;IAKrC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAc/E,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAS3E"}
|
package/dist/server/index.cjs
CHANGED
|
@@ -42,9 +42,89 @@ exports.MastraAuthProvider = /*@__PURE__*/(_ => {
|
|
|
42
42
|
exports.MastraAuthProvider = chunkEBVYYC2Q_cjs.__decorateElement(_init, 0, "MastraAuthProvider", _MastraAuthProvider_decorators, exports.MastraAuthProvider);
|
|
43
43
|
chunkEBVYYC2Q_cjs.__runInitializers(_init, 1, exports.MastraAuthProvider);
|
|
44
44
|
|
|
45
|
-
// src/server/
|
|
45
|
+
// src/server/composite-auth.ts
|
|
46
46
|
return exports.MastraAuthProvider;
|
|
47
47
|
})();
|
|
48
|
+
// src/server/composite-auth.ts
|
|
49
|
+
var CompositeAuth = class extends exports.MastraAuthProvider {
|
|
50
|
+
providers;
|
|
51
|
+
constructor(providers) {
|
|
52
|
+
super();
|
|
53
|
+
this.providers = providers;
|
|
54
|
+
}
|
|
55
|
+
async authenticateToken(token, request) {
|
|
56
|
+
for (const provider of this.providers) {
|
|
57
|
+
try {
|
|
58
|
+
const user = await provider.authenticateToken(token, request);
|
|
59
|
+
if (user) {
|
|
60
|
+
return user;
|
|
61
|
+
}
|
|
62
|
+
} catch {}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
async authorizeUser(user, request) {
|
|
67
|
+
for (const provider of this.providers) {
|
|
68
|
+
const authorized = await provider.authorizeUser(user, request);
|
|
69
|
+
if (authorized) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// src/server/simple-auth.ts
|
|
78
|
+
var SimpleAuth = class extends exports.MastraAuthProvider {
|
|
79
|
+
tokens;
|
|
80
|
+
headerNames;
|
|
81
|
+
authenticatedUsers;
|
|
82
|
+
constructor(options) {
|
|
83
|
+
super(options);
|
|
84
|
+
this.tokens = options.tokens;
|
|
85
|
+
this.headerNames = this.normalizeHeaders(options.headers);
|
|
86
|
+
this.authenticatedUsers = new Set(Object.values(this.tokens));
|
|
87
|
+
}
|
|
88
|
+
normalizeHeaders(headers) {
|
|
89
|
+
if (!headers) {
|
|
90
|
+
return ["Authorization"];
|
|
91
|
+
}
|
|
92
|
+
return Array.isArray(headers) ? headers : [headers];
|
|
93
|
+
}
|
|
94
|
+
extractBearerToken(value) {
|
|
95
|
+
if (value.startsWith("Bearer ")) {
|
|
96
|
+
return value.slice(7);
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
findTokenInHeaders(request) {
|
|
101
|
+
for (const headerName of this.headerNames) {
|
|
102
|
+
const headerValue = request.header(headerName);
|
|
103
|
+
if (headerValue) {
|
|
104
|
+
if (headerName.toLowerCase() === "authorization") {
|
|
105
|
+
return this.extractBearerToken(headerValue);
|
|
106
|
+
}
|
|
107
|
+
return headerValue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
async authenticateToken(token, request) {
|
|
113
|
+
const directToken = this.extractBearerToken(token);
|
|
114
|
+
if (directToken in this.tokens) {
|
|
115
|
+
return this.tokens[directToken];
|
|
116
|
+
}
|
|
117
|
+
const headerToken = this.findTokenInHeaders(request);
|
|
118
|
+
if (headerToken && headerToken in this.tokens) {
|
|
119
|
+
return this.tokens[headerToken];
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
async authorizeUser(user, _request) {
|
|
124
|
+
return this.authenticatedUsers.has(user);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
48
128
|
// src/server/index.ts
|
|
49
129
|
function validateOptions(path, options) {
|
|
50
130
|
const opts = options;
|
|
@@ -97,6 +177,8 @@ function defineAuth(config) {
|
|
|
97
177
|
return config;
|
|
98
178
|
}
|
|
99
179
|
|
|
180
|
+
exports.CompositeAuth = CompositeAuth;
|
|
181
|
+
exports.SimpleAuth = SimpleAuth;
|
|
100
182
|
exports.defineAuth = defineAuth;
|
|
101
183
|
exports.registerApiRoute = registerApiRoute;
|
|
102
184
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/auth.ts","../../src/server/index.ts"],"names":["MastraAuthProvider","__decoratorStart","__decorateElement","__runInitializers","MastraError"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,MAAA,SAAA,EAAA,MAAA;AAkBA,MAAA,IAAA,EAAA,OAAA,EAAA;AAAiB,KACf,CAAA;AAAQ,IACR,IAAA,OAAA,EAAA,aAAiB,EAAA;AACnB,MAAC,IAAA,CAAA,aAAA,GAAA,OAAA,CAAA,aAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AACM,IAAe;AAAuD,IACpE,IAAA,CAAA,SAAA,GAAA,OAAA,EAAA,SAAA;AAAA,IACA,IAAA,CAAA,MAAA,GAAA,OAAA,EAAA,MAAA;AAAA,EAEP;AACE,EAAA,eAAQ,CAAA,IAAA,EAAW;AAEnB,IAAA,IAAI,mBAAS,EAAA;AACX,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAA,aAAQ,CAAA,IAAc,CAAA,IAAK,CAAA;AAAI,IACtD;AAEA,IAAA,IAAA,eAAiB,EAAA;AACjB,MAAA,cAAc,GAAA,IAAS,CAAA,SAAA;AAAA,IACzB;AAAA,oBAkB0B,EAAA;AACxB,MAAA,WAAU,GAAA,IAAA,CAAA,MAAe;AACvB,IAAA;AAAiD,EAAA;AAEnD;AACEA,0CAAsB,CAAA,CAAA,IAAA;AAAA,EAAA,KACxB,GAAAC,kCAAA,CAAA,EAAA,CAAA;AACA,EAAAD,0BAAU,GAAQE,mCAAA,CAAA,KAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,8BAAA,EAAAF,0BAAA,CAAA;AAChB,EAAAG,oCAAc,KAAK,EAAA,CAAA,EAAAH,0BAAA,CAAA;;AACrB;AAEJ,EAAA,OAAAA,0BAAA;AA1CO,CAAA,EAAA;AAAe;AAAf,SAAA,eAAA,CAAA,IAAe,EAAA,OAAA,EAAA;;;AC2BtB,IAAA,MAAS,IAAAI,6BACP;AAGA,MAAA,EAAM,EAAA,yCAAO;AAEb,MAAI,IAAA,8BAA2B,EAAA,IAAA,CAAA,4BAAA,CAAA;AAC7B,MAAA,QAAU,eAAY;AAAA,MACpB,QAAI,EAAA,MAAA;AAAA,KAAA,CACJ;AAAwC,EAAA;AACxC,EAAA,IACA,IAAA,CAAA,OAAA,KAAA,MAAA,IAAA,IAAA,CAAA,aAAA,KAAA,MAAA,EAAA;AAAA,IACF,MAAC,IAAAA,6BAAA,CAAA;AAAA,MACH,EAAA,EAAA,yCAAA;AAEA,MAAI,IAAA,EAAK,CAAA,4FAA2D,CAAA;AAClE,MAAA,QAAU,eAAY;AAAA,MACpB,QAAI,EAAA,MAAA;AAAA,KAAA,CACJ;AAAwC,EAAA;AACxC,EAAA,IACA,IAAA,CAAA,OAAA,KAAA,MAAA,IAAA,IAAA,CAAA,aAAA,KAAA,MAAA,EAAA;AAAA,IACF,MAAC,IAAAA,6BAAA,CAAA;AAAA,MACH,EAAA,EAAA,yCAAA;AAEA,MAAI,IAAA,EAAK,CAAA,sHAA2D,CAAA;AAClE,MAAA,QAAU,eAAY;AAAA,MACpB,QAAI,EAAA,MAAA;AAAA,KAAA,CACJ;AAAwC,EAAA;AACxC;AACA,SACD,gBAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAA,EACH,IAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EAAA;AACF,IAAA,MAAA,IAAAA,6BAAA,CAAA;AAEO,MAAA,EAAA,EAAS,iCAGa;AAC3B,MAAI,IAAA,EAAK,CAAA,sEAAqB,CAAA;AAC5B,MAAA,QAAU,eAAY;AAAA,MACpB,QAAI,EAAA,MAAA;AAAA,KAAA,CACJ;AAAM,EAAA;AACN,EAAA,eACA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EAAA,OACD;AAAA,IACH,IAAA;AAEA,IAAA,MAAA,EAAA,cAAsB;AAEtB,IAAA,OAAO,EAAA,OAAA,CAAA,OAAA;AAAA,IACL,aAAA,EAAA,OAAA,CAAA,aAAA;AAAA,IACA,SAAQ,OAAQ,CAAA,OAAA;AAAA,IAChB,UAAS,EAAA,OAAQ,CAAA,UAAA;AAAA,IACjB,qBAAe,CAAA;AAAQ,GAAA;AACN;AACG,mBACN,CAAA,MAAQ,EAAA;AAAA,EACxB,OAAA,MAAA;AACF","file":"index.cjs","sourcesContent":["import type { HonoRequest } from 'hono';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\nimport type { MastraAuthConfig } from './types';\n\nexport interface MastraAuthProviderOptions<TUser = unknown> {\n name?: string;\n authorizeUser?: (user: TUser, request: HonoRequest) => Promise<boolean> | boolean;\n /**\n * Protected paths for the auth provider\n */\n protected?: MastraAuthConfig['protected'];\n /**\n * Public paths for the auth provider\n */\n public?: MastraAuthConfig['public'];\n}\n\n@InstrumentClass({\n prefix: 'auth',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraAuthProvider<TUser = unknown> extends MastraBase {\n public protected?: MastraAuthConfig['protected'];\n public public?: MastraAuthConfig['public'];\n\n constructor(options?: MastraAuthProviderOptions<TUser>) {\n super({ component: 'AUTH', name: options?.name });\n\n if (options?.authorizeUser) {\n this.authorizeUser = options.authorizeUser.bind(this);\n }\n\n this.protected = options?.protected;\n this.public = options?.public;\n }\n\n /**\n * Authenticate a token and return the payload\n * @param token - The token to authenticate\n * @param request - The request\n * @returns The payload\n */\n abstract authenticateToken(token: string, request: HonoRequest): Promise<TUser | null>;\n\n /**\n * Authorize a user for a path and method\n * @param user - The user to authorize\n * @param request - The request\n * @returns The authorization result\n */\n abstract authorizeUser(user: TUser, request: HonoRequest): Promise<boolean> | boolean;\n\n protected registerOptions(opts?: MastraAuthProviderOptions<TUser>) {\n if (opts?.authorizeUser) {\n this.authorizeUser = opts.authorizeUser.bind(this);\n }\n if (opts?.protected) {\n this.protected = opts.protected;\n }\n if (opts?.public) {\n this.public = opts.public;\n }\n }\n}\n","import type { Context, Handler, MiddlewareHandler } from 'hono';\nimport type { DescribeRouteOptions } from 'hono-openapi';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { Mastra } from '../mastra';\nimport type { ApiRoute, MastraAuthConfig, Methods } from './types';\n\nexport type { MastraAuthConfig, ContextWithMastra, ApiRoute } from './types';\nexport { MastraAuthProvider } from './auth';\nexport type { MastraAuthProviderOptions } from './auth';\n\n// Helper type for inferring parameters from a path\n// Thank you Claude!\ntype ParamsFromPath<P extends string> = {\n [K in P extends `${string}:${infer Param}/${string}` | `${string}:${infer Param}` ? Param : never]: string;\n};\n\ntype RegisterApiRoutePathError = `Param 'path' must not start with '/api', it is reserved for internal API routes.`;\ntype ValidatePath<P extends string, T> = P extends `/api/${string}` ? RegisterApiRoutePathError : T;\n\ntype RegisterApiRouteOptions<P extends string> = {\n method: Methods;\n openapi?: DescribeRouteOptions;\n handler?: Handler<\n {\n Variables: {\n mastra: Mastra;\n };\n },\n P,\n ParamsFromPath<P>\n >;\n createHandler?: (c: Context) => Promise<\n Handler<\n {\n Variables: {\n mastra: Mastra;\n };\n },\n P,\n ParamsFromPath<P>\n >\n >;\n middleware?: MiddlewareHandler | MiddlewareHandler[];\n /**\n * When false, skips Mastra auth for this route (defaults to true)\n */\n requiresAuth?: boolean;\n};\n\nfunction validateOptions<P extends string>(\n path: P,\n options: RegisterApiRoutePathError | RegisterApiRouteOptions<P>,\n): asserts options is RegisterApiRouteOptions<P> {\n const opts = options as RegisterApiRouteOptions<P>;\n\n if (opts.method === undefined) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS',\n text: `Invalid options for route \"${path}\", missing \"method\" property`,\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n\n if (opts.handler === undefined && opts.createHandler === undefined) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS',\n text: `Invalid options for route \"${path}\", you must define a \"handler\" or \"createHandler\" property`,\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n\n if (opts.handler !== undefined && opts.createHandler !== undefined) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS',\n text: `Invalid options for route \"${path}\", you can only define one of the following properties: \"handler\" or \"createHandler\"`,\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n}\n\nexport function registerApiRoute<P extends string>(\n path: P,\n options: ValidatePath<P, RegisterApiRouteOptions<P>>,\n): ValidatePath<P, ApiRoute> {\n if (path.startsWith('/api/')) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_PATH_RESERVED',\n text: 'Path must not start with \"/api\", it\\'s reserved for internal API routes',\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n\n validateOptions(path, options);\n\n return {\n path,\n method: options.method,\n handler: options.handler,\n createHandler: options.createHandler,\n openapi: options.openapi,\n middleware: options.middleware,\n requiresAuth: options.requiresAuth,\n } as unknown as ValidatePath<P, ApiRoute>;\n}\n\nexport function defineAuth<TUser>(config: MastraAuthConfig<TUser>): MastraAuthConfig<TUser> {\n return config;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server/auth.ts","../../src/server/composite-auth.ts","../../src/server/simple-auth.ts","../../src/server/index.ts"],"names":["MastraAuthProvider","__decoratorStart","__decorateElement","__runInitializers","MastraError"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,MAAA,SAAA,EAAA,MAAA;AAkBA,MAAA,IAAA,EAAA,OAAA,EAAA;AAAiB,KACf,CAAA;AAAQ,IACR,IAAA,OAAA,EAAA,aAAiB,EAAA;AACnB,MAAC,IAAA,CAAA,aAAA,GAAA,OAAA,CAAA,aAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AACM,IAAe;AAAuD,IACpE,IAAA,CAAA,SAAA,GAAA,OAAA,EAAA,SAAA;AAAA,IACA,IAAA,CAAA,MAAA,GAAA,OAAA,EAAA,MAAA;AAAA,EAEP;AACE,EAAA,eAAQ,CAAA,IAAA,EAAW;AAEnB,IAAA,IAAI,mBAAS,EAAA;AACX,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAA,aAAQ,CAAA,IAAc,CAAA,IAAK,CAAA;AAAI,IACtD;AAEA,IAAA,IAAA,eAAiB,EAAA;AACjB,MAAA,cAAc,GAAA,IAAS,CAAA,SAAA;AAAA,IACzB;AAAA,oBAkB0B,EAAA;AACxB,MAAA,WAAU,GAAA,IAAA,CAAA,MAAe;AACvB,IAAA;AAAiD,EAAA;AAEnD;AACEA,0CAAsB,CAAA,CAAA,IAAA;AAAA,EAAA,KACxB,GAAAC,kCAAA,CAAA,EAAA,CAAA;AACA,EAAAD,0BAAU,GAAQE,mCAAA,CAAA,KAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,8BAAA,EAAAF,0BAAA,CAAA;AAChB,EAAAG,oCAAc,KAAK,EAAA,CAAA,EAAAH,0BAAA,CAAA;;AACrB;AAEJ,EAAA,OAAAA,0BAAA;AA1CO,CAAA,EAAA;AAAe;AAAf,IAAA,aAAA,GAAA,cAAeA,0BAAA,CAAA;;;ACnBf,IAAM,KAAA,EAAA;AAAyC,IAC5C,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA,EAER;AACE,EAAA,MAAA,iBAAM,CAAA,KAAA,EAAA,OAAA,EAAA;AACN,IAAA,KAAK,MAAA,QAAY,IAAA,IAAA,CAAA,SAAA,EAAA;AAAA,MACnB,IAAA;AAAA,QAEM,MAAA,IAAA,GAAA,MAAkB,QAAe,CAAA,iBAA+C,CAAA,KAAA,EAAA,OAAA,CAAA;AACpF,QAAA,IAAA,IAAW,EAAA;AACT,UAAI,OAAA,IAAA;AACF,QAAA;AACA,MAAA,CAAA,CAAA,MAAI,CAAA;AACF,IAAA;AAAO,IAAA,OACT,IAAA;AAAA,EAAA;AACM,EAAA,MAER,aAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAA,IACF,KAAA,MAAA,QAAA,IAAA,IAAA,CAAA,SAAA,EAAA;AACA,MAAA,MAAO,UAAA,GAAA,MAAA,QAAA,CAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,MACT,IAAA,UAAA,EAAA;AAAA,QAEM,OAAA,IAAA;AACJ,MAAA;AACE,IAAA;AACA,IAAA,OAAI,KAAA;AACF,EAAA;AAAO;;AAGX;AACF,IAAA,UAAA,GAAA,cAAAA,0BAAA,CAAA;AACF,EAAA,MAAA;;;ACZO,EAAA,WAAM,CAAA;AAA8D,IACjE,KAAA,CAAA,OAAA,CAAA;AAAA,IACA,IAAA,CAAA,MAAA,GAAA,OAAA,CAAA,MAAA;AAAA,IACA,IAAA,CAAA,WAAA,GAAA,IAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,OAAA,CAAA;AAAA,2BAEuC,GAAA,IAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA;AAC7C,EAAA;AACA,EAAA,gBAAc,CAAA,OAAQ,EAAA;AACtB,IAAA,IAAA,CAAK,OAAA,EAAA;AAEL,MAAA,wBAA0B;AAAkC,IAC9D;AAAA,wBAEyB,CAAA,OAAuC,CAAA,GAAA,OAAA,GAAA,CAAA,OAAA,CAAA;AAC9D,EAAA;AACE,EAAA,kBAAQ,CAAA,KAAA,EAAA;AAAe,IACzB,IAAA,KAAA,CAAA,UAAA,CAAA,SAAA,CAAA,EAAA;AACA,MAAA,YAAa,CAAA,KAAA,CAAQ,CAAA,CAAA;AAA6B,IACpD;AAAA;AAGE,EAAA;AACE,EAAA,0BAAoB,EAAA;AAAA,IACtB,KAAA,MAAA,UAAA,IAAA,IAAA,CAAA,WAAA,EAAA;AACA,MAAA,MAAO,WAAA,GAAA,OAAA,CAAA,MAAA,CAAA,UAAA,CAAA;AAAA,MACT,IAAA,WAAA,EAAA;AAAA,sBAE2B,CAAA,WAAqC,EAAA,KAAA,eAAA,EAAA;AAC9D,UAAA,OAAW,IAAA,CAAA,kBAAmB,CAAA,WAAa,CAAA;AACzC,QAAA;AACA,QAAA,OAAI,WAAa;AAEf,MAAA;AACE,IAAA;AAA0C,IAAA,OAC5C,IAAA;AACA,EAAA;AAAO,EAAA,MACT,iBAAA,CAAA,KAAA,EAAA,OAAA,EAAA;AAAA,IACF,MAAA,WAAA,GAAA,IAAA,CAAA,kBAAA,CAAA,KAAA,CAAA;AACA,IAAA,IAAA,WAAO,IAAA,IAAA,CAAA,MAAA,EAAA;AAAA,MACT,OAAA,IAAA,CAAA,MAAA,CAAA,WAAA,CAAA;AAAA,IAEA;AAEE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,kBAAA,CAAmB,OAAK,CAAA;AACjD,IAAA,IAAI,WAAA,IAAe,WAAK,IAAQ,IAAA,CAAA,MAAA,EAAA;AAC9B,MAAA,OAAO,IAAA,CAAK,OAAO,WAAW,CAAA;AAAA,IAChC;AAGA,IAAA,OAAM,IAAA;AACN,EAAA;AACE,EAAA,MAAA,kBAAmB,EAAA,QAAW,EAAA;AAAA,IAChC,OAAA,IAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,IAAA,CAAA;AAEA,EAAA;AAAO;;AAKP;AAAuC,SACzC,eAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AACF,EAAA,MAAA,IAAA,GAAA,OAAA;;;AC/BA,MAAA,EAAA,EAAS,yCAGwC;AAC/C,MAAA,IAAM,EAAA,CAAA,2BAAO,EAAA,IAAA,CAAA,4BAAA,CAAA;AAEb,MAAI,uBAAgB;AAClB,MAAA,QAAU,EAAA,MAAA;AAAY,KAAA,CACpB;AAAI,EAAA;AACoC,EAAA,IACxC,IAAA,CAAA,OAAA,KAAA,MAAA,IAAA,IAAA,CAAA,aAAA,KAAA,MAAA,EAAA;AAAA,IAAA,MACA,IAAAI,6BAAA,CAAA;AAAA,MACD,EAAA,EAAA,yCAAA;AAAA,MACH,IAAA,EAAA,CAAA,2BAAA,EAAA,IAAA,CAAA,0DAAA,CAAA;AAEA,MAAI,MAAK,EAAA,eAAY;AACnB,MAAA,QAAU,EAAA,MAAA;AAAY,KAAA,CACpB;AAAI,EAAA;AACoC,EAAA,IACxC,IAAA,CAAA,OAAA,KAAA,MAAA,IAAA,IAAA,CAAA,aAAA,KAAA,MAAA,EAAA;AAAA,IAAA,MACA,IAAAA,6BAAA,CAAA;AAAA,MACD,EAAA,EAAA,yCAAA;AAAA,MACH,IAAA,EAAA,CAAA,2BAAA,EAAA,IAAA,CAAA,oFAAA,CAAA;AAEA,MAAI,MAAK,EAAA,eAAY;AACnB,MAAA,QAAU,EAAA,MAAA;AAAY,KAAA,CACpB;AAAI,EAAA;AACoC;AACxC,SACA,gBAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAA,EAAA,IACD,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EAAA;AAAA,IACH,MAAA,IAAAA,6BAAA,CAAA;AACF,MAAA,EAAA,EAAA,iCAAA;AAEO,MAAA,IAAS,EAAA,CAAA,sEAGa,CAAA;AAC3B,MAAI,MAAK,EAAA,eAAkB;AACzB,MAAA,QAAU,EAAA,MAAA;AAAY,KAAA,CACpB;AAAI,EAAA;AACE,EAAA,eACN,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EAAA,OACA;AAAA,IACF,IAAC;AAAA,IACH,MAAA,EAAA,OAAA,CAAA,MAAA;AAEA,IAAA,OAAA,EAAA,eAAsB;AAEtB,IAAA,aAAO,EAAA,OAAA,CAAA,aAAA;AAAA,IACL,OAAA,EAAA,OAAA,CAAA,OAAA;AAAA,IACA,UAAQ,EAAA,OAAQ,CAAA,UAAA;AAAA,IAChB,YAAS,EAAA,OAAQ,CAAA;AAAA,GAAA;AACM;AACN,mBACL,CAAA,MAAQ,EAAA;AAAA,EAAA;AACE","file":"index.cjs","sourcesContent":["import type { HonoRequest } from 'hono';\nimport { MastraBase } from '../base';\nimport { InstrumentClass } from '../telemetry';\nimport type { MastraAuthConfig } from './types';\n\nexport interface MastraAuthProviderOptions<TUser = unknown> {\n name?: string;\n authorizeUser?: (user: TUser, request: HonoRequest) => Promise<boolean> | boolean;\n /**\n * Protected paths for the auth provider\n */\n protected?: MastraAuthConfig['protected'];\n /**\n * Public paths for the auth provider\n */\n public?: MastraAuthConfig['public'];\n}\n\n@InstrumentClass({\n prefix: 'auth',\n excludeMethods: ['__setTools', '__setLogger', '__setTelemetry', '#log'],\n})\nexport abstract class MastraAuthProvider<TUser = unknown> extends MastraBase {\n public protected?: MastraAuthConfig['protected'];\n public public?: MastraAuthConfig['public'];\n\n constructor(options?: MastraAuthProviderOptions<TUser>) {\n super({ component: 'AUTH', name: options?.name });\n\n if (options?.authorizeUser) {\n this.authorizeUser = options.authorizeUser.bind(this);\n }\n\n this.protected = options?.protected;\n this.public = options?.public;\n }\n\n /**\n * Authenticate a token and return the payload\n * @param token - The token to authenticate\n * @param request - The request\n * @returns The payload\n */\n abstract authenticateToken(token: string, request: HonoRequest): Promise<TUser | null>;\n\n /**\n * Authorize a user for a path and method\n * @param user - The user to authorize\n * @param request - The request\n * @returns The authorization result\n */\n abstract authorizeUser(user: TUser, request: HonoRequest): Promise<boolean> | boolean;\n\n protected registerOptions(opts?: MastraAuthProviderOptions<TUser>) {\n if (opts?.authorizeUser) {\n this.authorizeUser = opts.authorizeUser.bind(this);\n }\n if (opts?.protected) {\n this.protected = opts.protected;\n }\n if (opts?.public) {\n this.public = opts.public;\n }\n }\n}\n","import type { HonoRequest } from 'hono';\nimport { MastraAuthProvider } from './auth';\n\nexport class CompositeAuth extends MastraAuthProvider {\n private providers: MastraAuthProvider[];\n\n constructor(providers: MastraAuthProvider[]) {\n super();\n this.providers = providers;\n }\n\n async authenticateToken(token: string, request: HonoRequest): Promise<unknown | null> {\n for (const provider of this.providers) {\n try {\n const user = await provider.authenticateToken(token, request);\n if (user) {\n return user;\n }\n } catch {\n // ignore error, try next provider\n }\n }\n return null;\n }\n\n async authorizeUser(user: unknown, request: HonoRequest): Promise<boolean> {\n for (const provider of this.providers) {\n const authorized = await provider.authorizeUser(user, request);\n if (authorized) {\n return true;\n }\n }\n return false;\n }\n}\n","import type { HonoRequest } from 'hono';\nimport { MastraAuthProvider } from './auth';\nimport type { MastraAuthProviderOptions } from './auth';\n\nexport interface SimpleAuthOptions<TUser = unknown> extends MastraAuthProviderOptions<TUser> {\n /**\n * A map of tokens to users.\n * When a token is provided, it will be looked up in this map.\n */\n tokens: Record<string, TUser>;\n /**\n * Headers to check for the token.\n * Defaults to 'Authorization' with Bearer token extraction.\n * Can be a string or array of strings for custom header names.\n */\n headers?: string | string[];\n}\n\n/**\n * SimpleAuth is a basic token-based authentication provider.\n * It validates tokens against a predefined map of tokens to users.\n */\nexport class SimpleAuth<TUser = unknown> extends MastraAuthProvider<TUser> {\n private tokens: Record<string, TUser>;\n private headerNames: string[];\n private authenticatedUsers: Set<TUser>;\n\n constructor(options: SimpleAuthOptions<TUser>) {\n super(options);\n this.tokens = options.tokens;\n this.headerNames = this.normalizeHeaders(options.headers);\n // Store reference to all valid users for authorization\n this.authenticatedUsers = new Set(Object.values(this.tokens));\n }\n\n private normalizeHeaders(headers?: string | string[]): string[] {\n if (!headers) {\n return ['Authorization'];\n }\n return Array.isArray(headers) ? headers : [headers];\n }\n\n private extractBearerToken(value: string): string {\n if (value.startsWith('Bearer ')) {\n return value.slice(7);\n }\n return value;\n }\n\n private findTokenInHeaders(request: HonoRequest): string | null {\n for (const headerName of this.headerNames) {\n const headerValue = request.header(headerName);\n if (headerValue) {\n // For Authorization header, extract Bearer token\n if (headerName.toLowerCase() === 'authorization') {\n return this.extractBearerToken(headerValue);\n }\n return headerValue;\n }\n }\n return null;\n }\n\n async authenticateToken(token: string, request: HonoRequest): Promise<TUser | null> {\n // First, try the direct token\n const directToken = this.extractBearerToken(token);\n if (directToken in this.tokens) {\n return this.tokens[directToken]!;\n }\n\n // Then, try to find token in headers\n const headerToken = this.findTokenInHeaders(request);\n if (headerToken && headerToken in this.tokens) {\n return this.tokens[headerToken]!;\n }\n\n return null;\n }\n\n async authorizeUser(user: TUser, _request: HonoRequest): Promise<boolean> {\n // Check if this user was authenticated through our tokens\n return this.authenticatedUsers.has(user);\n }\n}\n","import type { Context, Handler, MiddlewareHandler } from 'hono';\nimport type { DescribeRouteOptions } from 'hono-openapi';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { Mastra } from '../mastra';\nimport type { ApiRoute, MastraAuthConfig, Methods } from './types';\n\nexport type { MastraAuthConfig, ContextWithMastra, ApiRoute } from './types';\nexport { MastraAuthProvider } from './auth';\nexport type { MastraAuthProviderOptions } from './auth';\nexport { CompositeAuth } from './composite-auth';\nexport { SimpleAuth } from './simple-auth';\nexport type { SimpleAuthOptions } from './simple-auth';\n\n// Helper type for inferring parameters from a path\n// Thank you Claude!\ntype ParamsFromPath<P extends string> = {\n [K in P extends `${string}:${infer Param}/${string}` | `${string}:${infer Param}` ? Param : never]: string;\n};\n\ntype RegisterApiRoutePathError = `Param 'path' must not start with '/api', it is reserved for internal API routes.`;\ntype ValidatePath<P extends string, T> = P extends `/api/${string}` ? RegisterApiRoutePathError : T;\n\ntype RegisterApiRouteOptions<P extends string> = {\n method: Methods;\n openapi?: DescribeRouteOptions;\n handler?: Handler<\n {\n Variables: {\n mastra: Mastra;\n };\n },\n P,\n ParamsFromPath<P>\n >;\n createHandler?: (c: Context) => Promise<\n Handler<\n {\n Variables: {\n mastra: Mastra;\n };\n },\n P,\n ParamsFromPath<P>\n >\n >;\n middleware?: MiddlewareHandler | MiddlewareHandler[];\n /**\n * When false, skips Mastra auth for this route (defaults to true)\n */\n requiresAuth?: boolean;\n};\n\nfunction validateOptions<P extends string>(\n path: P,\n options: RegisterApiRoutePathError | RegisterApiRouteOptions<P>,\n): asserts options is RegisterApiRouteOptions<P> {\n const opts = options as RegisterApiRouteOptions<P>;\n\n if (opts.method === undefined) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS',\n text: `Invalid options for route \"${path}\", missing \"method\" property`,\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n\n if (opts.handler === undefined && opts.createHandler === undefined) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS',\n text: `Invalid options for route \"${path}\", you must define a \"handler\" or \"createHandler\" property`,\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n\n if (opts.handler !== undefined && opts.createHandler !== undefined) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_INVALID_ROUTE_OPTIONS',\n text: `Invalid options for route \"${path}\", you can only define one of the following properties: \"handler\" or \"createHandler\"`,\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n}\n\nexport function registerApiRoute<P extends string>(\n path: P,\n options: ValidatePath<P, RegisterApiRouteOptions<P>>,\n): ValidatePath<P, ApiRoute> {\n if (path.startsWith('/api/')) {\n throw new MastraError({\n id: 'MASTRA_SERVER_API_PATH_RESERVED',\n text: 'Path must not start with \"/api\", it\\'s reserved for internal API routes',\n domain: ErrorDomain.MASTRA_SERVER,\n category: ErrorCategory.USER,\n });\n }\n\n validateOptions(path, options);\n\n return {\n path,\n method: options.method,\n handler: options.handler,\n createHandler: options.createHandler,\n openapi: options.openapi,\n middleware: options.middleware,\n requiresAuth: options.requiresAuth,\n } as unknown as ValidatePath<P, ApiRoute>;\n}\n\nexport function defineAuth<TUser>(config: MastraAuthConfig<TUser>): MastraAuthConfig<TUser> {\n return config;\n}\n"]}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -5,6 +5,9 @@ import type { ApiRoute, MastraAuthConfig, Methods } from './types.js';
|
|
|
5
5
|
export type { MastraAuthConfig, ContextWithMastra, ApiRoute } from './types.js';
|
|
6
6
|
export { MastraAuthProvider } from './auth.js';
|
|
7
7
|
export type { MastraAuthProviderOptions } from './auth.js';
|
|
8
|
+
export { CompositeAuth } from './composite-auth.js';
|
|
9
|
+
export { SimpleAuth } from './simple-auth.js';
|
|
10
|
+
export type { SimpleAuthOptions } from './simple-auth.js';
|
|
8
11
|
type ParamsFromPath<P extends string> = {
|
|
9
12
|
[K in P extends `${string}:${infer Param}/${string}` | `${string}:${infer Param}` ? Param : never]: string;
|
|
10
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEnE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAC5C,YAAY,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEnE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAC5C,YAAY,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAIvD,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI;KACrC,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM;CAC3G,CAAC;AAEF,KAAK,yBAAyB,GAAG,kFAAkF,CAAC;AACpH,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,QAAQ,MAAM,EAAE,GAAG,yBAAyB,GAAG,CAAC,CAAC;AAEpG,KAAK,uBAAuB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CACf;QACE,SAAS,EAAE;YACT,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,EACD,CAAC,EACD,cAAc,CAAC,CAAC,CAAC,CAClB,CAAC;IACF,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CACrC,OAAO,CACL;QACE,SAAS,EAAE;YACT,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,EACD,CAAC,EACD,cAAc,CAAC,CAAC,CAAC,CAClB,CACF,CAAC;IACF,UAAU,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;IACrD;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAoCF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,GACnD,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,CAqB3B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAE1F"}
|
package/dist/server/index.js
CHANGED
|
@@ -40,9 +40,89 @@ MastraAuthProvider = /*@__PURE__*/(_ => {
|
|
|
40
40
|
MastraAuthProvider = __decorateElement(_init, 0, "MastraAuthProvider", _MastraAuthProvider_decorators, MastraAuthProvider);
|
|
41
41
|
__runInitializers(_init, 1, MastraAuthProvider);
|
|
42
42
|
|
|
43
|
-
// src/server/
|
|
43
|
+
// src/server/composite-auth.ts
|
|
44
44
|
return MastraAuthProvider;
|
|
45
45
|
})();
|
|
46
|
+
// src/server/composite-auth.ts
|
|
47
|
+
var CompositeAuth = class extends MastraAuthProvider {
|
|
48
|
+
providers;
|
|
49
|
+
constructor(providers) {
|
|
50
|
+
super();
|
|
51
|
+
this.providers = providers;
|
|
52
|
+
}
|
|
53
|
+
async authenticateToken(token, request) {
|
|
54
|
+
for (const provider of this.providers) {
|
|
55
|
+
try {
|
|
56
|
+
const user = await provider.authenticateToken(token, request);
|
|
57
|
+
if (user) {
|
|
58
|
+
return user;
|
|
59
|
+
}
|
|
60
|
+
} catch {}
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
async authorizeUser(user, request) {
|
|
65
|
+
for (const provider of this.providers) {
|
|
66
|
+
const authorized = await provider.authorizeUser(user, request);
|
|
67
|
+
if (authorized) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// src/server/simple-auth.ts
|
|
76
|
+
var SimpleAuth = class extends MastraAuthProvider {
|
|
77
|
+
tokens;
|
|
78
|
+
headerNames;
|
|
79
|
+
authenticatedUsers;
|
|
80
|
+
constructor(options) {
|
|
81
|
+
super(options);
|
|
82
|
+
this.tokens = options.tokens;
|
|
83
|
+
this.headerNames = this.normalizeHeaders(options.headers);
|
|
84
|
+
this.authenticatedUsers = new Set(Object.values(this.tokens));
|
|
85
|
+
}
|
|
86
|
+
normalizeHeaders(headers) {
|
|
87
|
+
if (!headers) {
|
|
88
|
+
return ["Authorization"];
|
|
89
|
+
}
|
|
90
|
+
return Array.isArray(headers) ? headers : [headers];
|
|
91
|
+
}
|
|
92
|
+
extractBearerToken(value) {
|
|
93
|
+
if (value.startsWith("Bearer ")) {
|
|
94
|
+
return value.slice(7);
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
findTokenInHeaders(request) {
|
|
99
|
+
for (const headerName of this.headerNames) {
|
|
100
|
+
const headerValue = request.header(headerName);
|
|
101
|
+
if (headerValue) {
|
|
102
|
+
if (headerName.toLowerCase() === "authorization") {
|
|
103
|
+
return this.extractBearerToken(headerValue);
|
|
104
|
+
}
|
|
105
|
+
return headerValue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
async authenticateToken(token, request) {
|
|
111
|
+
const directToken = this.extractBearerToken(token);
|
|
112
|
+
if (directToken in this.tokens) {
|
|
113
|
+
return this.tokens[directToken];
|
|
114
|
+
}
|
|
115
|
+
const headerToken = this.findTokenInHeaders(request);
|
|
116
|
+
if (headerToken && headerToken in this.tokens) {
|
|
117
|
+
return this.tokens[headerToken];
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
async authorizeUser(user, _request) {
|
|
122
|
+
return this.authenticatedUsers.has(user);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
46
126
|
// src/server/index.ts
|
|
47
127
|
function validateOptions(path, options) {
|
|
48
128
|
const opts = options;
|
|
@@ -95,6 +175,6 @@ function defineAuth(config) {
|
|
|
95
175
|
return config;
|
|
96
176
|
}
|
|
97
177
|
|
|
98
|
-
export { MastraAuthProvider, defineAuth, registerApiRoute };
|
|
178
|
+
export { CompositeAuth, MastraAuthProvider, SimpleAuth, defineAuth, registerApiRoute };
|
|
99
179
|
//# sourceMappingURL=index.js.map
|
|
100
180
|
//# sourceMappingURL=index.js.map
|