@morsehq-dev/sdk 0.4.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +294 -0
- package/dist/anthropic/index.cjs +39 -0
- package/dist/anthropic/index.cjs.map +1 -0
- package/dist/anthropic/index.d.cts +213 -0
- package/dist/anthropic/index.d.ts +213 -0
- package/dist/anthropic/index.js +6 -0
- package/dist/anthropic/index.js.map +1 -0
- package/dist/anthropic-agent-sdk/index.cjs +744 -0
- package/dist/anthropic-agent-sdk/index.cjs.map +1 -0
- package/dist/anthropic-agent-sdk/index.d.cts +371 -0
- package/dist/anthropic-agent-sdk/index.d.ts +371 -0
- package/dist/anthropic-agent-sdk/index.js +735 -0
- package/dist/anthropic-agent-sdk/index.js.map +1 -0
- package/dist/browser/anthropic/index.cjs +39 -0
- package/dist/browser/anthropic/index.cjs.map +1 -0
- package/dist/browser/anthropic/index.js +6 -0
- package/dist/browser/anthropic/index.js.map +1 -0
- package/dist/browser/anthropic-agent-sdk/index.cjs +744 -0
- package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -0
- package/dist/browser/anthropic-agent-sdk/index.js +735 -0
- package/dist/browser/anthropic-agent-sdk/index.js.map +1 -0
- package/dist/browser/chunk-3643DC7K.cjs +365 -0
- package/dist/browser/chunk-3643DC7K.cjs.map +1 -0
- package/dist/browser/chunk-4FALQMOZ.js +232 -0
- package/dist/browser/chunk-4FALQMOZ.js.map +1 -0
- package/dist/browser/chunk-5J2QBK75.js +884 -0
- package/dist/browser/chunk-5J2QBK75.js.map +1 -0
- package/dist/browser/chunk-7MSXWGAH.js +53 -0
- package/dist/browser/chunk-7MSXWGAH.js.map +1 -0
- package/dist/browser/chunk-A24L5N5N.js +596 -0
- package/dist/browser/chunk-A24L5N5N.js.map +1 -0
- package/dist/browser/chunk-B7DEUDP6.cjs +177 -0
- package/dist/browser/chunk-B7DEUDP6.cjs.map +1 -0
- package/dist/browser/chunk-F6CJACNH.cjs +604 -0
- package/dist/browser/chunk-F6CJACNH.cjs.map +1 -0
- package/dist/browser/chunk-JBOYFQSB.js +412 -0
- package/dist/browser/chunk-JBOYFQSB.js.map +1 -0
- package/dist/browser/chunk-KRBADE6R.cjs +183 -0
- package/dist/browser/chunk-KRBADE6R.cjs.map +1 -0
- package/dist/browser/chunk-MCJYZH6W.cjs +415 -0
- package/dist/browser/chunk-MCJYZH6W.cjs.map +1 -0
- package/dist/browser/chunk-NQG2IAQS.js +178 -0
- package/dist/browser/chunk-NQG2IAQS.js.map +1 -0
- package/dist/browser/chunk-O4HG3OSK.cjs +929 -0
- package/dist/browser/chunk-O4HG3OSK.cjs.map +1 -0
- package/dist/browser/chunk-QWRQJO57.js +363 -0
- package/dist/browser/chunk-QWRQJO57.js.map +1 -0
- package/dist/browser/chunk-SWQOPFE4.cjs +234 -0
- package/dist/browser/chunk-SWQOPFE4.cjs.map +1 -0
- package/dist/browser/chunk-TYDG747E.js +171 -0
- package/dist/browser/chunk-TYDG747E.js.map +1 -0
- package/dist/browser/chunk-TZRSDDFP.cjs +56 -0
- package/dist/browser/chunk-TZRSDDFP.cjs.map +1 -0
- package/dist/browser/index.cjs +587 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.js +522 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/integrations/pino.cjs +89 -0
- package/dist/browser/integrations/pino.cjs.map +1 -0
- package/dist/browser/integrations/pino.js +86 -0
- package/dist/browser/integrations/pino.js.map +1 -0
- package/dist/browser/langchain/index.cjs +535 -0
- package/dist/browser/langchain/index.cjs.map +1 -0
- package/dist/browser/langchain/index.js +528 -0
- package/dist/browser/langchain/index.js.map +1 -0
- package/dist/browser/langgraph/index.cjs +377 -0
- package/dist/browser/langgraph/index.cjs.map +1 -0
- package/dist/browser/langgraph/index.js +371 -0
- package/dist/browser/langgraph/index.js.map +1 -0
- package/dist/browser/openai/index.cjs +125 -0
- package/dist/browser/openai/index.cjs.map +1 -0
- package/dist/browser/openai/index.js +122 -0
- package/dist/browser/openai/index.js.map +1 -0
- package/dist/browser/openai-agents/index.cjs +689 -0
- package/dist/browser/openai-agents/index.cjs.map +1 -0
- package/dist/browser/openai-agents/index.js +678 -0
- package/dist/browser/openai-agents/index.js.map +1 -0
- package/dist/browser/vercel-ai/index.cjs +233 -0
- package/dist/browser/vercel-ai/index.cjs.map +1 -0
- package/dist/browser/vercel-ai/index.js +231 -0
- package/dist/browser/vercel-ai/index.js.map +1 -0
- package/dist/chunk-4R4SHGOK.js +363 -0
- package/dist/chunk-4R4SHGOK.js.map +1 -0
- package/dist/chunk-7EO7MQBA.cjs +183 -0
- package/dist/chunk-7EO7MQBA.cjs.map +1 -0
- package/dist/chunk-7YCENA54.cjs +604 -0
- package/dist/chunk-7YCENA54.cjs.map +1 -0
- package/dist/chunk-CKFOGDUF.js +596 -0
- package/dist/chunk-CKFOGDUF.js.map +1 -0
- package/dist/chunk-FJUNILZT.cjs +1324 -0
- package/dist/chunk-FJUNILZT.cjs.map +1 -0
- package/dist/chunk-HDAFUKQ3.js +171 -0
- package/dist/chunk-HDAFUKQ3.js.map +1 -0
- package/dist/chunk-KBWPNIH4.cjs +234 -0
- package/dist/chunk-KBWPNIH4.cjs.map +1 -0
- package/dist/chunk-KJEO52QS.cjs +365 -0
- package/dist/chunk-KJEO52QS.cjs.map +1 -0
- package/dist/chunk-KZBCOZIQ.cjs +177 -0
- package/dist/chunk-KZBCOZIQ.cjs.map +1 -0
- package/dist/chunk-ME5JALGT.js +53 -0
- package/dist/chunk-ME5JALGT.js.map +1 -0
- package/dist/chunk-PVHDEPRE.cjs +56 -0
- package/dist/chunk-PVHDEPRE.cjs.map +1 -0
- package/dist/chunk-RTL23YOQ.js +178 -0
- package/dist/chunk-RTL23YOQ.js.map +1 -0
- package/dist/chunk-TQWI4UYO.js +1277 -0
- package/dist/chunk-TQWI4UYO.js.map +1 -0
- package/dist/chunk-VXDBDPDR.cjs +415 -0
- package/dist/chunk-VXDBDPDR.cjs.map +1 -0
- package/dist/chunk-XTKMUJWI.js +232 -0
- package/dist/chunk-XTKMUJWI.js.map +1 -0
- package/dist/chunk-ZKUGOWER.js +412 -0
- package/dist/chunk-ZKUGOWER.js.map +1 -0
- package/dist/index.cjs +843 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +464 -0
- package/dist/index.d.ts +464 -0
- package/dist/index.js +778 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/pino.cjs +89 -0
- package/dist/integrations/pino.cjs.map +1 -0
- package/dist/integrations/pino.d.cts +65 -0
- package/dist/integrations/pino.d.ts +65 -0
- package/dist/integrations/pino.js +86 -0
- package/dist/integrations/pino.js.map +1 -0
- package/dist/langchain/index.cjs +535 -0
- package/dist/langchain/index.cjs.map +1 -0
- package/dist/langchain/index.d.cts +265 -0
- package/dist/langchain/index.d.ts +265 -0
- package/dist/langchain/index.js +528 -0
- package/dist/langchain/index.js.map +1 -0
- package/dist/langgraph/index.cjs +377 -0
- package/dist/langgraph/index.cjs.map +1 -0
- package/dist/langgraph/index.d.cts +324 -0
- package/dist/langgraph/index.d.ts +324 -0
- package/dist/langgraph/index.js +371 -0
- package/dist/langgraph/index.js.map +1 -0
- package/dist/openai/index.cjs +125 -0
- package/dist/openai/index.cjs.map +1 -0
- package/dist/openai/index.d.cts +136 -0
- package/dist/openai/index.d.ts +136 -0
- package/dist/openai/index.js +122 -0
- package/dist/openai/index.js.map +1 -0
- package/dist/openai-agents/index.cjs +689 -0
- package/dist/openai-agents/index.cjs.map +1 -0
- package/dist/openai-agents/index.d.cts +502 -0
- package/dist/openai-agents/index.d.ts +502 -0
- package/dist/openai-agents/index.js +678 -0
- package/dist/openai-agents/index.js.map +1 -0
- package/dist/spans-DZtMuBvc.d.cts +73 -0
- package/dist/spans-DZtMuBvc.d.ts +73 -0
- package/dist/tracing-BYAqjT5Q.d.cts +114 -0
- package/dist/tracing-rz9cWQ8d.d.ts +114 -0
- package/dist/vercel-ai/index.cjs +233 -0
- package/dist/vercel-ai/index.cjs.map +1 -0
- package/dist/vercel-ai/index.d.cts +93 -0
- package/dist/vercel-ai/index.d.ts +93 -0
- package/dist/vercel-ai/index.js +231 -0
- package/dist/vercel-ai/index.js.map +1 -0
- package/package.json +182 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkO4HG3OSK_cjs = require('./chunk-O4HG3OSK.cjs');
|
|
4
|
+
|
|
5
|
+
// src/_internal/sentry-reporter.ts
|
|
6
|
+
chunkO4HG3OSK_cjs.init_env();
|
|
7
|
+
var SENTRY_DSN = "https://f2f3d4d8c324fe5e439b6d83678116bd@o4511340656656384.ingest.us.sentry.io/4511340719833088";
|
|
8
|
+
var RATE_WINDOW_MS = 60 * 1e3;
|
|
9
|
+
var RATE_LIMIT_PER_WINDOW = 100;
|
|
10
|
+
var rateBuckets = /* @__PURE__ */ new Map();
|
|
11
|
+
var capture = null;
|
|
12
|
+
var sentryInitFailed = false;
|
|
13
|
+
var SAFE_EXTRA_KEYS = /* @__PURE__ */ new Set([
|
|
14
|
+
"adapter",
|
|
15
|
+
"module",
|
|
16
|
+
"function",
|
|
17
|
+
"operation",
|
|
18
|
+
"endpoint_host",
|
|
19
|
+
"sdk_version",
|
|
20
|
+
"runtime",
|
|
21
|
+
"platform"
|
|
22
|
+
]);
|
|
23
|
+
function checkRateLimit(fingerprint) {
|
|
24
|
+
const now = Date.now();
|
|
25
|
+
const cutoff = now - RATE_WINDOW_MS;
|
|
26
|
+
const bucket = rateBuckets.get(fingerprint) ?? [];
|
|
27
|
+
while (bucket.length > 0 && bucket[0] < cutoff) {
|
|
28
|
+
bucket.shift();
|
|
29
|
+
}
|
|
30
|
+
if (bucket.length >= RATE_LIMIT_PER_WINDOW) {
|
|
31
|
+
rateBuckets.set(fingerprint, bucket);
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
bucket.push(now);
|
|
35
|
+
rateBuckets.set(fingerprint, bucket);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
function scrubExtra(extra) {
|
|
39
|
+
if (!extra) return {};
|
|
40
|
+
const out = {};
|
|
41
|
+
for (const [k, v] of Object.entries(extra)) {
|
|
42
|
+
if (SAFE_EXTRA_KEYS.has(k)) {
|
|
43
|
+
out[k] = v;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
async function ensureSentry() {
|
|
49
|
+
if (capture !== null) return capture;
|
|
50
|
+
if (sentryInitFailed) return null;
|
|
51
|
+
try {
|
|
52
|
+
let mod = null;
|
|
53
|
+
let isNode = true;
|
|
54
|
+
try {
|
|
55
|
+
mod = await Function("m", "return import(m)")("@sentry/node");
|
|
56
|
+
} catch {
|
|
57
|
+
try {
|
|
58
|
+
mod = await Function("m", "return import(m)")("@sentry/browser");
|
|
59
|
+
isNode = false;
|
|
60
|
+
} catch {
|
|
61
|
+
sentryInitFailed = true;
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (!mod) {
|
|
66
|
+
sentryInitFailed = true;
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const sentry = mod;
|
|
70
|
+
const ClientCtor = isNode ? sentry.NodeClient : sentry.BrowserClient;
|
|
71
|
+
const transport = isNode ? sentry.makeNodeTransport : sentry.makeFetchTransport;
|
|
72
|
+
if (typeof ClientCtor !== "function" || typeof transport !== "function") {
|
|
73
|
+
sentryInitFailed = true;
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const client = new ClientCtor({
|
|
77
|
+
dsn: SENTRY_DSN,
|
|
78
|
+
transport,
|
|
79
|
+
stackParser: sentry.defaultStackParser,
|
|
80
|
+
// No integrations: every default one instruments the HOST app (global
|
|
81
|
+
// handlers, console, fetch/http breadcrumbs). We only ever report
|
|
82
|
+
// exceptions we hand over explicitly.
|
|
83
|
+
integrations: [],
|
|
84
|
+
tracesSampleRate: 0,
|
|
85
|
+
autoSessionTracking: false,
|
|
86
|
+
sendDefaultPii: false,
|
|
87
|
+
// Breadcrumbs are host-application activity, not ours. Never collect.
|
|
88
|
+
maxBreadcrumbs: 0
|
|
89
|
+
});
|
|
90
|
+
if (typeof client.init === "function") client.init();
|
|
91
|
+
const built = buildCapture(sentry, client);
|
|
92
|
+
if (built === null) {
|
|
93
|
+
sentryInitFailed = true;
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
capture = built;
|
|
97
|
+
return capture;
|
|
98
|
+
} catch {
|
|
99
|
+
sentryInitFailed = true;
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function buildCapture(sentry, client) {
|
|
104
|
+
if (typeof sentry.Scope === "function" && sentry.Scope.prototype?.setClient) {
|
|
105
|
+
return (error, fingerprint, extra) => {
|
|
106
|
+
const scope = new sentry.Scope();
|
|
107
|
+
scope.setClient(client);
|
|
108
|
+
scope.setFingerprint([fingerprint]);
|
|
109
|
+
for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);
|
|
110
|
+
scope.captureException(error);
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (typeof sentry.Hub === "function") {
|
|
114
|
+
const hub = new sentry.Hub(client);
|
|
115
|
+
return (error, fingerprint, extra) => {
|
|
116
|
+
hub.withScope((scope) => {
|
|
117
|
+
scope.setFingerprint([fingerprint]);
|
|
118
|
+
for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);
|
|
119
|
+
hub.captureException(error);
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
function report(error, options) {
|
|
126
|
+
try {
|
|
127
|
+
if (chunkO4HG3OSK_cjs.isTelemetryDisabled()) return;
|
|
128
|
+
if (!checkRateLimit(options.fingerprint)) return;
|
|
129
|
+
const errClass = error instanceof Error ? error.name : "Error";
|
|
130
|
+
const errMessage = error instanceof Error ? error.message : String(error);
|
|
131
|
+
if (chunkO4HG3OSK_cjs.isDebug()) {
|
|
132
|
+
console.error(
|
|
133
|
+
`morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`,
|
|
134
|
+
error
|
|
135
|
+
);
|
|
136
|
+
} else {
|
|
137
|
+
console.warn(`morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`);
|
|
138
|
+
}
|
|
139
|
+
if (!SENTRY_DSN) ;
|
|
140
|
+
void ensureSentry().then((captureFn) => {
|
|
141
|
+
if (!captureFn) return;
|
|
142
|
+
try {
|
|
143
|
+
captureFn(error, options.fingerprint, scrubExtra(options.extra));
|
|
144
|
+
} catch {
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
} catch {
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function _resetForTesting() {
|
|
151
|
+
rateBuckets.clear();
|
|
152
|
+
capture = null;
|
|
153
|
+
sentryInitFailed = false;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// src/_internal/errors.ts
|
|
157
|
+
function absorbErrorsSync(fn, options) {
|
|
158
|
+
return (...args) => {
|
|
159
|
+
try {
|
|
160
|
+
return fn(...args);
|
|
161
|
+
} catch (err) {
|
|
162
|
+
report(err, options);
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function absorbErrorsAsync(fn, options) {
|
|
168
|
+
return async (...args) => {
|
|
169
|
+
try {
|
|
170
|
+
return await fn(...args);
|
|
171
|
+
} catch (err) {
|
|
172
|
+
report(err, options);
|
|
173
|
+
return void 0;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
exports._resetForTesting = _resetForTesting;
|
|
179
|
+
exports.absorbErrorsAsync = absorbErrorsAsync;
|
|
180
|
+
exports.absorbErrorsSync = absorbErrorsSync;
|
|
181
|
+
exports.report = report;
|
|
182
|
+
//# sourceMappingURL=chunk-KRBADE6R.cjs.map
|
|
183
|
+
//# sourceMappingURL=chunk-KRBADE6R.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/_internal/sentry-reporter.ts","../../src/_internal/errors.ts"],"names":["init_env","isTelemetryDisabled","isDebug"],"mappings":"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","file":"chunk-KRBADE6R.cjs","sourcesContent":["/**\n * Out-of-band error reporting to Morse's internal Sentry instance.\n *\n * Mirrors the Python SDK's `_internal/sentry_reporter.py`. When the SDK\n * absorbs an internal exception (per the non-invasive guarantee), it\n * reports the error here. Everything in this module is itself wrapped\n * to swallow errors — if Sentry reporting fails, that failure must not\n * propagate either.\n *\n * Customer data is NEVER included. Reports carry only:\n * - Error class + message\n * - Sanitized stack trace (file paths kept, locals stripped)\n * - SDK version\n * - Adapter name (when applicable)\n * - Runtime / OS metadata\n * - Content-free fingerprint of the call site\n *\n * The Sentry DSN is a build-time constant. Write-only — even if the DSN\n * leaks, it can only post errors to Morse's project, never read.\n *\n * Phase 6c status: DSN is a placeholder (`\"\"`). When Sanji provides the\n * real DSN, the constant below is updated and reports start flowing.\n * Until then, errors fall back to `console.warn` (or the host logger\n * once we add a logger abstraction).\n */\n\nimport { isDebug, isTelemetryDisabled } from \"./env\";\n\n// ---------------------------------------------------------------------------\n// Hardcoded DSN constant — Morse-owned, write-only.\n//\n// ISOLATION (MHQ-729): we must never call `Sentry.init()`. That binds a client\n// process-wide, so a host app that already uses Sentry would have ITS errors\n// redirected into Morse's project the first time we absorb an internal error.\n// `ensureSentry` builds a private Client on its own Scope instead.\n// ---------------------------------------------------------------------------\n\nconst SENTRY_DSN =\n \"https://f2f3d4d8c324fe5e439b6d83678116bd@o4511340656656384.ingest.us.sentry.io/4511340719833088\";\n\n// Rate limit: max 100 events per fingerprint per 60-second sliding window.\nconst RATE_WINDOW_MS = 60 * 1000;\nconst RATE_LIMIT_PER_WINDOW = 100;\n\nconst rateBuckets: Map<string, number[]> = new Map();\n\n/** `(error, fingerprint, safeExtra) => void`, bound to a Morse-private client. */\ntype CaptureFn = (error: unknown, fingerprint: string, extra: Record<string, unknown>) => void;\n\nlet capture: CaptureFn | null = null;\nlet sentryInitFailed = false;\n\nconst SAFE_EXTRA_KEYS: ReadonlySet<string> = new Set([\n \"adapter\",\n \"module\",\n \"function\",\n \"operation\",\n \"endpoint_host\",\n \"sdk_version\",\n \"runtime\",\n \"platform\",\n]);\n\nfunction checkRateLimit(fingerprint: string): boolean {\n const now = Date.now();\n const cutoff = now - RATE_WINDOW_MS;\n const bucket = rateBuckets.get(fingerprint) ?? [];\n\n // Evict old entries.\n while (bucket.length > 0 && (bucket[0] as number) < cutoff) {\n bucket.shift();\n }\n if (bucket.length >= RATE_LIMIT_PER_WINDOW) {\n rateBuckets.set(fingerprint, bucket);\n return false;\n }\n bucket.push(now);\n rateBuckets.set(fingerprint, bucket);\n return true;\n}\n\nfunction scrubExtra(extra: Record<string, unknown> | undefined): Record<string, unknown> {\n if (!extra) return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(extra)) {\n if (SAFE_EXTRA_KEYS.has(k)) {\n out[k] = v;\n }\n }\n return out;\n}\n\n/**\n * Build a capture function bound to a PRIVATE Sentry client.\n *\n * MHQ-729: never calls `Sentry.init()`. We construct a Client directly and\n * attach it to a Scope we own, so the host application's global Sentry client\n * (if any) is left exactly as its owner configured it.\n *\n * Returns `null` when no Sentry package is installed or the version exposes\n * neither the v8 `Scope.setClient` nor the v7 `Hub` isolation primitive — in\n * that case reports stay local-log-only, which is the safe direction.\n */\nasync function ensureSentry(): Promise<CaptureFn | null> {\n if (!SENTRY_DSN) return null;\n if (capture !== null) return capture;\n if (sentryInitFailed) return null;\n try {\n // Import dynamically so the SDK doesn't pay the cost when DSN is unset.\n // @sentry/node first, falling back to @sentry/browser.\n let mod: unknown = null;\n let isNode = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mod = await (Function(\"m\", \"return import(m)\") as any)(\"@sentry/node\");\n } catch {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mod = await (Function(\"m\", \"return import(m)\") as any)(\"@sentry/browser\");\n isNode = false;\n } catch {\n sentryInitFailed = true;\n return null;\n }\n }\n if (!mod) {\n sentryInitFailed = true;\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sentry = mod as any;\n\n const ClientCtor = isNode ? sentry.NodeClient : sentry.BrowserClient;\n const transport = isNode ? sentry.makeNodeTransport : sentry.makeFetchTransport;\n if (typeof ClientCtor !== \"function\" || typeof transport !== \"function\") {\n sentryInitFailed = true;\n return null;\n }\n\n const client = new ClientCtor({\n dsn: SENTRY_DSN,\n transport,\n stackParser: sentry.defaultStackParser,\n // No integrations: every default one instruments the HOST app (global\n // handlers, console, fetch/http breadcrumbs). We only ever report\n // exceptions we hand over explicitly.\n integrations: [],\n tracesSampleRate: 0,\n autoSessionTracking: false,\n sendDefaultPii: false,\n // Breadcrumbs are host-application activity, not ours. Never collect.\n maxBreadcrumbs: 0,\n });\n if (typeof client.init === \"function\") client.init();\n\n const built = buildCapture(sentry, client);\n if (built === null) {\n sentryInitFailed = true;\n return null;\n }\n capture = built;\n return capture;\n } catch {\n sentryInitFailed = true;\n return null;\n }\n}\n\n/**\n * Bind `client` to an isolated scope, preferring the v8 API over v7's Hub.\n *\n * Exported for tests: the dynamic import in `ensureSentry` goes through\n * `Function(\"m\", \"return import(m)\")`, which sidesteps vitest's module mocking,\n * so this — where the actual isolation decision lives — is tested directly.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function buildCapture(sentry: any, client: any): CaptureFn | null {\n if (typeof sentry.Scope === \"function\" && sentry.Scope.prototype?.setClient) {\n // @sentry/* v8+: a Scope carries its own client.\n return (error, fingerprint, extra) => {\n const scope = new sentry.Scope();\n scope.setClient(client);\n scope.setFingerprint([fingerprint]);\n for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);\n scope.captureException(error);\n };\n }\n if (typeof sentry.Hub === \"function\") {\n // @sentry/* v7: an isolated Hub owns the client.\n const hub = new sentry.Hub(client);\n return (error, fingerprint, extra) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hub.withScope((scope: any) => {\n scope.setFingerprint([fingerprint]);\n for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);\n hub.captureException(error);\n });\n };\n }\n return null;\n}\n\nexport interface ReportOptions {\n fingerprint: string;\n extra?: Record<string, unknown>;\n}\n\n/**\n * Report an internal SDK error out-of-band. Never throws.\n *\n * @param error The exception caught.\n * @param options fingerprint used for grouping + rate limiting; extra\n * is scrubbed against an allow-list before sending.\n */\nexport function report(error: unknown, options: ReportOptions): void {\n try {\n if (isTelemetryDisabled()) return;\n if (!checkRateLimit(options.fingerprint)) return;\n\n const errClass = error instanceof Error ? error.name : \"Error\";\n const errMessage = error instanceof Error ? error.message : String(error);\n\n if (isDebug()) {\n console.error(\n `morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`,\n error,\n );\n } else {\n console.warn(`morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`);\n }\n\n if (!SENTRY_DSN) return;\n\n void ensureSentry().then((captureFn) => {\n if (!captureFn) return;\n try {\n captureFn(error, options.fingerprint, scrubExtra(options.extra));\n } catch {\n // Sentry send error — swallow.\n }\n });\n } catch {\n // Absolute last-resort: nothing here may propagate.\n }\n}\n\n/**\n * Test-only reset hook — clears rate limits and sentry init state.\n *\n * @internal\n */\nexport function _resetForTesting(): void {\n rateBuckets.clear();\n capture = null;\n sentryInitFailed = false;\n}\n","/**\n * Non-invasive error isolation — the foundational SDK guarantee.\n *\n * Mirrors Python's `_internal/errors.py` `@absorb_errors` decorator. Every\n * public SDK function and every adapter-installed wrapper is wrapped with\n * `absorbErrors()`. The wrapper catches all exceptions and reports them\n * out-of-band to the Sentry reporter, then returns a benign value\n * (typically `undefined`) instead of propagating.\n *\n * Foundational principle:\n *\n * Telemetry must never break the host application.\n *\n * The customer's call returns its original result (or `undefined`)\n * regardless of whether the SDK's recording path succeeded.\n *\n * Note on async: TypeScript-land has no `KeyboardInterrupt` equivalent —\n * the analogue is \"no exceptions are special\". We absorb everything,\n * and rely on Node's `process.exit` / browser navigation to tear down\n * the runtime cleanly.\n */\n\nimport { report } from \"./sentry-reporter\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for Sentry fingerprinting and\n * the rate limiter (max 100 events per fingerprint per minute).\n */\n fingerprint: string;\n /** Optional metadata attached to the report; scrubbed against an allow-list. */\n extra?: Record<string, unknown>;\n}\n\n/**\n * Wrap a synchronous function so that any thrown exception is absorbed\n * (reported out-of-band) instead of propagating. Returns `undefined` on\n * absorbed error.\n */\nexport function absorbErrorsSync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => TReturn,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => TReturn | undefined {\n return (...args: TArgs): TReturn | undefined => {\n try {\n return fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Wrap an async function so that any rejection or thrown exception is\n * absorbed (reported out-of-band) instead of propagating. Returns\n * `undefined` on absorbed error.\n */\nexport function absorbErrorsAsync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => Promise<TReturn>,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => Promise<TReturn | undefined> {\n return async (...args: TArgs): Promise<TReturn | undefined> => {\n try {\n return await fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Higher-order alias chosen to read like the Python decorator: pass a\n * function in, get a wrapped version back. Resolves to the sync or async\n * variant based on the runtime return value (a Promise). Defaults to\n * sync at the type level; use `absorbErrorsAsync` directly for proper\n * async typing.\n */\nexport const absorbErrors = absorbErrorsSync;\n"]}
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkKRBADE6R_cjs = require('./chunk-KRBADE6R.cjs');
|
|
4
|
+
|
|
5
|
+
// src/_agent-sdk-common/redaction.ts
|
|
6
|
+
var DEFAULT_TOOL_ARG_MAX_BYTES = 2048;
|
|
7
|
+
var DEFAULT_TOOL_OUTPUT_MAX_BYTES = 4096;
|
|
8
|
+
var DEFAULT_BLOB_TRIGGER_BYTES = 4096;
|
|
9
|
+
var REDACTION_ERROR_FALLBACK = "<redaction_error>";
|
|
10
|
+
function summarizeImpl(value, opts, defaultMax) {
|
|
11
|
+
const maxBytes = opts.maxBytes ?? defaultMax;
|
|
12
|
+
const stripBlobs = opts.stripBlobs !== false;
|
|
13
|
+
let str;
|
|
14
|
+
if (typeof value === "string") {
|
|
15
|
+
str = value;
|
|
16
|
+
} else if (value === void 0) {
|
|
17
|
+
str = "undefined";
|
|
18
|
+
} else {
|
|
19
|
+
str = canonicalJsonStringify(value);
|
|
20
|
+
}
|
|
21
|
+
if (stripBlobs) {
|
|
22
|
+
str = stripBlobsFromString(str);
|
|
23
|
+
}
|
|
24
|
+
return truncateUtf8(str, maxBytes);
|
|
25
|
+
}
|
|
26
|
+
var summarizeToolInputInner = (value, opts) => summarizeImpl(value, opts ?? {}, DEFAULT_TOOL_ARG_MAX_BYTES);
|
|
27
|
+
var summarizeToolOutputInner = (value, opts) => summarizeImpl(value, opts ?? {}, DEFAULT_TOOL_OUTPUT_MAX_BYTES);
|
|
28
|
+
var safeSummarizeToolInput = chunkKRBADE6R_cjs.absorbErrorsSync(summarizeToolInputInner, {
|
|
29
|
+
fingerprint: "agent-sdk.redaction.summarizeToolInput"
|
|
30
|
+
});
|
|
31
|
+
var safeSummarizeToolOutput = chunkKRBADE6R_cjs.absorbErrorsSync(summarizeToolOutputInner, {
|
|
32
|
+
fingerprint: "agent-sdk.redaction.summarizeToolOutput"
|
|
33
|
+
});
|
|
34
|
+
function summarizeToolInput(value, opts) {
|
|
35
|
+
const out = safeSummarizeToolInput(value, opts);
|
|
36
|
+
return out === void 0 ? REDACTION_ERROR_FALLBACK : out;
|
|
37
|
+
}
|
|
38
|
+
function summarizeToolOutput(value, opts) {
|
|
39
|
+
const out = safeSummarizeToolOutput(value, opts);
|
|
40
|
+
return out === void 0 ? REDACTION_ERROR_FALLBACK : out;
|
|
41
|
+
}
|
|
42
|
+
var BINARY_KINDS = /* @__PURE__ */ new Set(["image", "audio", "video", "screenshot"]);
|
|
43
|
+
function summarizeBinaryBlockInner(block) {
|
|
44
|
+
if (block === null || typeof block !== "object") return null;
|
|
45
|
+
const b = block;
|
|
46
|
+
const type = typeof b.type === "string" ? b.type : null;
|
|
47
|
+
if (type === null || !BINARY_KINDS.has(type)) return null;
|
|
48
|
+
const kind = type;
|
|
49
|
+
let base64 = null;
|
|
50
|
+
let mime;
|
|
51
|
+
const source = b.source;
|
|
52
|
+
if (source !== null && typeof source === "object") {
|
|
53
|
+
const s = source;
|
|
54
|
+
if (typeof s.data === "string") base64 = s.data;
|
|
55
|
+
if (typeof s.media_type === "string") mime = s.media_type;
|
|
56
|
+
else if (typeof s.mediaType === "string") mime = s.mediaType;
|
|
57
|
+
}
|
|
58
|
+
if (base64 === null) {
|
|
59
|
+
const url = typeof b.url === "string" ? b.url : typeof b.dataUrl === "string" ? b.dataUrl : null;
|
|
60
|
+
if (url !== null && url.startsWith("data:")) {
|
|
61
|
+
const parsed = parseDataUrl(url);
|
|
62
|
+
if (parsed !== null) {
|
|
63
|
+
base64 = parsed.base64;
|
|
64
|
+
if (mime === void 0) mime = parsed.mime;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (base64 === null && typeof b.data === "string") {
|
|
69
|
+
base64 = b.data;
|
|
70
|
+
}
|
|
71
|
+
let dims;
|
|
72
|
+
const w = b.width;
|
|
73
|
+
const h = b.height;
|
|
74
|
+
if (typeof w === "number" && typeof h === "number") {
|
|
75
|
+
dims = { width: w, height: h };
|
|
76
|
+
}
|
|
77
|
+
let hash;
|
|
78
|
+
let byte_len;
|
|
79
|
+
if (base64 !== null) {
|
|
80
|
+
const bytes = decodeBase64ToBytes(base64);
|
|
81
|
+
hash = sha256HexBytes(bytes);
|
|
82
|
+
byte_len = bytes.length;
|
|
83
|
+
} else {
|
|
84
|
+
hash = sha256Hex("");
|
|
85
|
+
byte_len = 0;
|
|
86
|
+
}
|
|
87
|
+
const out = { kind, hash, byte_len };
|
|
88
|
+
if (dims !== void 0) out.dims = dims;
|
|
89
|
+
if (mime !== void 0) out.mime = mime;
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
chunkKRBADE6R_cjs.absorbErrorsSync(summarizeBinaryBlockInner, {
|
|
93
|
+
fingerprint: "agent-sdk.redaction.summarizeBinaryBlock"
|
|
94
|
+
});
|
|
95
|
+
function redactContentBlocksInner(blocks) {
|
|
96
|
+
return blocks.map((block) => {
|
|
97
|
+
const summary = summarizeBinaryBlockInner(block);
|
|
98
|
+
return summary === null ? block : summary;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
chunkKRBADE6R_cjs.absorbErrorsSync(redactContentBlocksInner, {
|
|
102
|
+
fingerprint: "agent-sdk.redaction.redactContentBlocks"
|
|
103
|
+
});
|
|
104
|
+
var DATA_URL_RE = /data:[A-Za-z0-9.+/-]*(?:;[A-Za-z0-9.=+/-]+)*?;base64,[A-Za-z0-9+/=]+/g;
|
|
105
|
+
var LONG_BASE64_RE = /[A-Za-z0-9+/]{100,}={0,2}/g;
|
|
106
|
+
function stripBlobsFromString(s) {
|
|
107
|
+
let out = s.replace(DATA_URL_RE, (match) => {
|
|
108
|
+
if (match.length < DEFAULT_BLOB_TRIGGER_BYTES) return match;
|
|
109
|
+
const parsed = parseDataUrl(match);
|
|
110
|
+
if (parsed === null) {
|
|
111
|
+
return blobMarker(sha256Hex(match), match.length);
|
|
112
|
+
}
|
|
113
|
+
const bytes = decodeBase64ToBytes(parsed.base64);
|
|
114
|
+
return blobMarker(sha256HexBytes(bytes), bytes.length);
|
|
115
|
+
});
|
|
116
|
+
out = out.replace(LONG_BASE64_RE, (match) => {
|
|
117
|
+
if (match.length < DEFAULT_BLOB_TRIGGER_BYTES) return match;
|
|
118
|
+
const bytes = decodeBase64ToBytes(match);
|
|
119
|
+
return blobMarker(sha256HexBytes(bytes), bytes.length);
|
|
120
|
+
});
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
function blobMarker(hashHex, byteLen) {
|
|
124
|
+
return `<blob:sha256:${hashHex}:${byteLen}>`;
|
|
125
|
+
}
|
|
126
|
+
function parseDataUrl(url) {
|
|
127
|
+
if (!url.startsWith("data:")) return null;
|
|
128
|
+
const comma = url.indexOf(",");
|
|
129
|
+
if (comma < 0) return null;
|
|
130
|
+
const header = url.slice(5, comma);
|
|
131
|
+
const payload = url.slice(comma + 1);
|
|
132
|
+
if (!header.includes("base64")) return null;
|
|
133
|
+
const parts = header.split(";");
|
|
134
|
+
const mime = parts[0] !== void 0 && parts[0] !== "" ? parts[0] : "application/octet-stream";
|
|
135
|
+
return { mime, base64: payload };
|
|
136
|
+
}
|
|
137
|
+
function decodeBase64ToBytes(b64) {
|
|
138
|
+
const cleaned = b64.replace(/\s+/g, "");
|
|
139
|
+
try {
|
|
140
|
+
if (typeof process !== "undefined" && process.versions?.node) {
|
|
141
|
+
const dynamicRequire = Function("m", "return require(m)");
|
|
142
|
+
const bufferMod = dynamicRequire("node:buffer");
|
|
143
|
+
if (bufferMod?.Buffer) {
|
|
144
|
+
const buf = bufferMod.Buffer.from(cleaned, "base64");
|
|
145
|
+
return new Uint8Array(buf);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
} catch {
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
if (typeof atob === "function") {
|
|
152
|
+
const bin = atob(cleaned);
|
|
153
|
+
const out = new Uint8Array(bin.length);
|
|
154
|
+
for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
157
|
+
} catch {
|
|
158
|
+
}
|
|
159
|
+
return pureBase64Decode(cleaned);
|
|
160
|
+
}
|
|
161
|
+
var B64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
162
|
+
var B64_LOOKUP = (() => {
|
|
163
|
+
const m = {};
|
|
164
|
+
for (let i = 0; i < B64_ALPHABET.length; i++) m[B64_ALPHABET[i]] = i;
|
|
165
|
+
return m;
|
|
166
|
+
})();
|
|
167
|
+
function pureBase64Decode(s) {
|
|
168
|
+
const stripped = s.replace(/=+$/, "");
|
|
169
|
+
const out = [];
|
|
170
|
+
let buffer = 0;
|
|
171
|
+
let bits = 0;
|
|
172
|
+
for (let i = 0; i < stripped.length; i++) {
|
|
173
|
+
const ch = stripped[i];
|
|
174
|
+
const v = B64_LOOKUP[ch];
|
|
175
|
+
if (v === void 0) continue;
|
|
176
|
+
buffer = buffer << 6 | v;
|
|
177
|
+
bits += 6;
|
|
178
|
+
if (bits >= 8) {
|
|
179
|
+
bits -= 8;
|
|
180
|
+
out.push(buffer >> bits & 255);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return new Uint8Array(out);
|
|
184
|
+
}
|
|
185
|
+
function canonicalJsonStringify(value) {
|
|
186
|
+
return JSON.stringify(value, function replacer(_key, val) {
|
|
187
|
+
if (val && typeof val === "object" && !Array.isArray(val)) {
|
|
188
|
+
const obj = val;
|
|
189
|
+
const sorted = {};
|
|
190
|
+
for (const k of Object.keys(obj).sort()) {
|
|
191
|
+
sorted[k] = obj[k];
|
|
192
|
+
}
|
|
193
|
+
return sorted;
|
|
194
|
+
}
|
|
195
|
+
return val;
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function truncateUtf8(text, maxBytes) {
|
|
199
|
+
if (maxBytes <= 0) return "";
|
|
200
|
+
if (text.length <= maxBytes / 4) return text;
|
|
201
|
+
const bytes = utf8Encode(text);
|
|
202
|
+
if (bytes.length <= maxBytes) return text;
|
|
203
|
+
let cut = maxBytes;
|
|
204
|
+
while (cut > 0 && (bytes[cut] & 192) === 128) {
|
|
205
|
+
cut--;
|
|
206
|
+
}
|
|
207
|
+
return utf8Decode(bytes.subarray(0, cut));
|
|
208
|
+
}
|
|
209
|
+
function utf8Encode(text) {
|
|
210
|
+
if (typeof TextEncoder !== "undefined") {
|
|
211
|
+
return new TextEncoder().encode(text);
|
|
212
|
+
}
|
|
213
|
+
const out = [];
|
|
214
|
+
for (let i = 0; i < text.length; i++) {
|
|
215
|
+
const code = text.charCodeAt(i);
|
|
216
|
+
if (code < 128) {
|
|
217
|
+
out.push(code);
|
|
218
|
+
} else if (code < 2048) {
|
|
219
|
+
out.push(192 | code >> 6, 128 | code & 63);
|
|
220
|
+
} else {
|
|
221
|
+
out.push(224 | code >> 12, 128 | code >> 6 & 63, 128 | code & 63);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return new Uint8Array(out);
|
|
225
|
+
}
|
|
226
|
+
function utf8Decode(bytes) {
|
|
227
|
+
if (typeof TextDecoder !== "undefined") {
|
|
228
|
+
return new TextDecoder("utf-8").decode(bytes);
|
|
229
|
+
}
|
|
230
|
+
let out = "";
|
|
231
|
+
for (let i = 0; i < bytes.length; ) {
|
|
232
|
+
const b = bytes[i];
|
|
233
|
+
if (b < 128) {
|
|
234
|
+
out += String.fromCharCode(b);
|
|
235
|
+
i++;
|
|
236
|
+
} else if (b < 224) {
|
|
237
|
+
out += String.fromCharCode((b & 31) << 6 | bytes[i + 1] & 63);
|
|
238
|
+
i += 2;
|
|
239
|
+
} else {
|
|
240
|
+
out += String.fromCharCode(
|
|
241
|
+
(b & 15) << 12 | (bytes[i + 1] & 63) << 6 | bytes[i + 2] & 63
|
|
242
|
+
);
|
|
243
|
+
i += 3;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return out;
|
|
247
|
+
}
|
|
248
|
+
function sha256Hex(text) {
|
|
249
|
+
try {
|
|
250
|
+
if (typeof process !== "undefined" && process.versions?.node) {
|
|
251
|
+
const dynamicRequire = Function("m", "return require(m)");
|
|
252
|
+
const cryptoMod = dynamicRequire("node:crypto");
|
|
253
|
+
if (cryptoMod?.createHash) {
|
|
254
|
+
return cryptoMod.createHash("sha256").update(text).digest("hex");
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
} catch {
|
|
258
|
+
}
|
|
259
|
+
return purejsSha256Bytes(utf8Encode(text));
|
|
260
|
+
}
|
|
261
|
+
function sha256HexBytes(bytes) {
|
|
262
|
+
try {
|
|
263
|
+
if (typeof process !== "undefined" && process.versions?.node) {
|
|
264
|
+
const dynamicRequire = Function("m", "return require(m)");
|
|
265
|
+
const cryptoMod = dynamicRequire("node:crypto");
|
|
266
|
+
if (cryptoMod?.createHash) {
|
|
267
|
+
return cryptoMod.createHash("sha256").update(bytes).digest("hex");
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
} catch {
|
|
271
|
+
}
|
|
272
|
+
return purejsSha256Bytes(bytes);
|
|
273
|
+
}
|
|
274
|
+
function purejsSha256Bytes(msg) {
|
|
275
|
+
const K = [
|
|
276
|
+
1116352408,
|
|
277
|
+
1899447441,
|
|
278
|
+
3049323471,
|
|
279
|
+
3921009573,
|
|
280
|
+
961987163,
|
|
281
|
+
1508970993,
|
|
282
|
+
2453635748,
|
|
283
|
+
2870763221,
|
|
284
|
+
3624381080,
|
|
285
|
+
310598401,
|
|
286
|
+
607225278,
|
|
287
|
+
1426881987,
|
|
288
|
+
1925078388,
|
|
289
|
+
2162078206,
|
|
290
|
+
2614888103,
|
|
291
|
+
3248222580,
|
|
292
|
+
3835390401,
|
|
293
|
+
4022224774,
|
|
294
|
+
264347078,
|
|
295
|
+
604807628,
|
|
296
|
+
770255983,
|
|
297
|
+
1249150122,
|
|
298
|
+
1555081692,
|
|
299
|
+
1996064986,
|
|
300
|
+
2554220882,
|
|
301
|
+
2821834349,
|
|
302
|
+
2952996808,
|
|
303
|
+
3210313671,
|
|
304
|
+
3336571891,
|
|
305
|
+
3584528711,
|
|
306
|
+
113926993,
|
|
307
|
+
338241895,
|
|
308
|
+
666307205,
|
|
309
|
+
773529912,
|
|
310
|
+
1294757372,
|
|
311
|
+
1396182291,
|
|
312
|
+
1695183700,
|
|
313
|
+
1986661051,
|
|
314
|
+
2177026350,
|
|
315
|
+
2456956037,
|
|
316
|
+
2730485921,
|
|
317
|
+
2820302411,
|
|
318
|
+
3259730800,
|
|
319
|
+
3345764771,
|
|
320
|
+
3516065817,
|
|
321
|
+
3600352804,
|
|
322
|
+
4094571909,
|
|
323
|
+
275423344,
|
|
324
|
+
430227734,
|
|
325
|
+
506948616,
|
|
326
|
+
659060556,
|
|
327
|
+
883997877,
|
|
328
|
+
958139571,
|
|
329
|
+
1322822218,
|
|
330
|
+
1537002063,
|
|
331
|
+
1747873779,
|
|
332
|
+
1955562222,
|
|
333
|
+
2024104815,
|
|
334
|
+
2227730452,
|
|
335
|
+
2361852424,
|
|
336
|
+
2428436474,
|
|
337
|
+
2756734187,
|
|
338
|
+
3204031479,
|
|
339
|
+
3329325298
|
|
340
|
+
];
|
|
341
|
+
const H = [
|
|
342
|
+
1779033703,
|
|
343
|
+
3144134277,
|
|
344
|
+
1013904242,
|
|
345
|
+
2773480762,
|
|
346
|
+
1359893119,
|
|
347
|
+
2600822924,
|
|
348
|
+
528734635,
|
|
349
|
+
1541459225
|
|
350
|
+
];
|
|
351
|
+
const msgLen = msg.length;
|
|
352
|
+
const bitLen = msgLen * 8;
|
|
353
|
+
const padded = new Uint8Array(msgLen + 9 + 63 >> 6 << 6);
|
|
354
|
+
padded.set(msg);
|
|
355
|
+
padded[msgLen] = 128;
|
|
356
|
+
const lo = (bitLen & 4294967295) >>> 0;
|
|
357
|
+
const hi = Math.floor(bitLen / 4294967296) >>> 0;
|
|
358
|
+
padded[padded.length - 8] = hi >>> 24 & 255;
|
|
359
|
+
padded[padded.length - 7] = hi >>> 16 & 255;
|
|
360
|
+
padded[padded.length - 6] = hi >>> 8 & 255;
|
|
361
|
+
padded[padded.length - 5] = hi & 255;
|
|
362
|
+
padded[padded.length - 4] = lo >>> 24 & 255;
|
|
363
|
+
padded[padded.length - 3] = lo >>> 16 & 255;
|
|
364
|
+
padded[padded.length - 2] = lo >>> 8 & 255;
|
|
365
|
+
padded[padded.length - 1] = lo & 255;
|
|
366
|
+
const W = new Uint32Array(64);
|
|
367
|
+
for (let chunk = 0; chunk < padded.length; chunk += 64) {
|
|
368
|
+
for (let i = 0; i < 16; i++) {
|
|
369
|
+
W[i] = (padded[chunk + i * 4] << 24 | padded[chunk + i * 4 + 1] << 16 | padded[chunk + i * 4 + 2] << 8 | padded[chunk + i * 4 + 3]) >>> 0;
|
|
370
|
+
}
|
|
371
|
+
for (let i = 16; i < 64; i++) {
|
|
372
|
+
const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ W[i - 15] >>> 3;
|
|
373
|
+
const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ W[i - 2] >>> 10;
|
|
374
|
+
W[i] = W[i - 16] + s0 + W[i - 7] + s1 >>> 0;
|
|
375
|
+
}
|
|
376
|
+
let [a, b, c, d, e, f, g, h] = H;
|
|
377
|
+
for (let i = 0; i < 64; i++) {
|
|
378
|
+
const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
|
|
379
|
+
const ch = e & f ^ ~e & g;
|
|
380
|
+
const temp1 = h + S1 + ch + K[i] + W[i] >>> 0;
|
|
381
|
+
const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
|
|
382
|
+
const maj = a & b ^ a & c ^ b & c;
|
|
383
|
+
const temp2 = S0 + maj >>> 0;
|
|
384
|
+
h = g;
|
|
385
|
+
g = f;
|
|
386
|
+
f = e;
|
|
387
|
+
e = d + temp1 >>> 0;
|
|
388
|
+
d = c;
|
|
389
|
+
c = b;
|
|
390
|
+
b = a;
|
|
391
|
+
a = temp1 + temp2 >>> 0;
|
|
392
|
+
}
|
|
393
|
+
H[0] = H[0] + a >>> 0;
|
|
394
|
+
H[1] = H[1] + b >>> 0;
|
|
395
|
+
H[2] = H[2] + c >>> 0;
|
|
396
|
+
H[3] = H[3] + d >>> 0;
|
|
397
|
+
H[4] = H[4] + e >>> 0;
|
|
398
|
+
H[5] = H[5] + f >>> 0;
|
|
399
|
+
H[6] = H[6] + g >>> 0;
|
|
400
|
+
H[7] = H[7] + h >>> 0;
|
|
401
|
+
}
|
|
402
|
+
let hex = "";
|
|
403
|
+
for (const v of H) {
|
|
404
|
+
hex += v.toString(16).padStart(8, "0");
|
|
405
|
+
}
|
|
406
|
+
return hex;
|
|
407
|
+
}
|
|
408
|
+
function rotr(x, n) {
|
|
409
|
+
return (x >>> n | x << 32 - n) >>> 0;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
exports.summarizeToolInput = summarizeToolInput;
|
|
413
|
+
exports.summarizeToolOutput = summarizeToolOutput;
|
|
414
|
+
//# sourceMappingURL=chunk-MCJYZH6W.cjs.map
|
|
415
|
+
//# sourceMappingURL=chunk-MCJYZH6W.cjs.map
|