youmd 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/agents.js +1 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/connect.d.ts +3 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +39 -0
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/mcp.d.ts +4 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +16 -9
- package/dist/commands/mcp.js.map +1 -1
- package/dist/generated/capability-registry.d.ts +112 -96
- package/dist/generated/capability-registry.d.ts.map +1 -1
- package/dist/generated/capability-registry.js +113 -96
- package/dist/generated/capability-registry.js.map +1 -1
- package/dist/generated/native-host-integrity.d.ts +2 -0
- package/dist/generated/native-host-integrity.d.ts.map +1 -0
- package/dist/generated/native-host-integrity.js +6 -0
- package/dist/generated/native-host-integrity.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/bamf-context-link.d.ts +90 -0
- package/dist/lib/bamf-context-link.d.ts.map +1 -0
- package/dist/lib/bamf-context-link.js +469 -0
- package/dist/lib/bamf-context-link.js.map +1 -0
- package/dist/lib/connected-access-native.d.ts +12 -0
- package/dist/lib/connected-access-native.d.ts.map +1 -1
- package/dist/lib/connected-access-native.js +142 -1
- package/dist/lib/connected-access-native.js.map +1 -1
- package/dist/lib/connected-context.d.ts.map +1 -1
- package/dist/lib/connected-context.js +2 -0
- package/dist/lib/connected-context.js.map +1 -1
- package/native/prebuilds/darwin-universal/youmd-native-host +0 -0
- package/native/prebuilds/darwin-universal/youmd-native-host.sha256 +1 -0
- package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
- package/package.json +3 -2
- package/scripts/build-native-host.mjs +51 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BAMF_CALLBACK_PATH = exports.YOUMD_BAMF_API_BASE = exports.BAMF_CONTEXT_ENDPOINT = exports.BAMF_CONTEXT_AUTHORIZE_URL = exports.BAMF_CONTEXT_RUNTIME_BINDING = exports.BAMF_CONTEXT_APPLICATION_ID = void 0;
|
|
37
|
+
exports.createNativeBAMFContext = createNativeBAMFContext;
|
|
38
|
+
exports.createBAMFLoopback = createBAMFLoopback;
|
|
39
|
+
exports.loadBAMFStoredLink = loadBAMFStoredLink;
|
|
40
|
+
exports.saveBAMFStoredLink = saveBAMFStoredLink;
|
|
41
|
+
exports.bamfAuthorizationUrl = bamfAuthorizationUrl;
|
|
42
|
+
exports.startBAMFContextLink = startBAMFContextLink;
|
|
43
|
+
exports.performBAMFContextAction = performBAMFContextAction;
|
|
44
|
+
const crypto = __importStar(require("crypto"));
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const http = __importStar(require("http"));
|
|
47
|
+
const os = __importStar(require("os"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const canonical_json_1 = require("./canonical-json");
|
|
50
|
+
const config_1 = require("./config");
|
|
51
|
+
const machine_identity_1 = require("./machine-identity");
|
|
52
|
+
const connected_access_native_1 = require("./connected-access-native");
|
|
53
|
+
exports.BAMF_CONTEXT_APPLICATION_ID = "app:youmd-bamf-context-link-helper";
|
|
54
|
+
exports.BAMF_CONTEXT_RUNTIME_BINDING = "com.youmd.bamf-context-link-helper";
|
|
55
|
+
exports.BAMF_CONTEXT_AUTHORIZE_URL = "https://bamf.com/connect/youmd";
|
|
56
|
+
exports.BAMF_CONTEXT_ENDPOINT = "https://apwjquujfnnpyapwjwrw.supabase.co/functions/v1/bamf-youmd-context-link";
|
|
57
|
+
exports.YOUMD_BAMF_API_BASE = "https://kindly-cassowary-600.convex.site/api/v1/me/agent-access";
|
|
58
|
+
exports.BAMF_CALLBACK_PATH = "/bamf-context-link/callback";
|
|
59
|
+
const B64URL_43 = /^[A-Za-z0-9_-]{43}$/;
|
|
60
|
+
const BAMF_CHALLENGE = /^bctx_ch_[A-Za-z0-9_-]{32,128}$/;
|
|
61
|
+
const BAMF_GRANT = /^bctx_v1_[A-Za-z0-9_-]{43}$/;
|
|
62
|
+
const YOUMD_LINK = /^bamfctx:[A-Za-z0-9_-]{16,128}$/;
|
|
63
|
+
const NONCE = /^nonce:[A-Za-z0-9_-]{16,128}$/;
|
|
64
|
+
const COMPACT_JWS = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
|
|
65
|
+
const SAFE_REQUEST_ID = /^[A-Za-z0-9._:-]{8,160}$/;
|
|
66
|
+
const SAFE_ERROR_CODE = /^[a-z0-9_]{3,80}$/;
|
|
67
|
+
const MAX_CALLBACK_BODY = 2048;
|
|
68
|
+
const CALLBACK_TIMEOUT_MS = 5 * 60000;
|
|
69
|
+
const recentResponseIds = new Set();
|
|
70
|
+
function exactObject(value, keys, code) {
|
|
71
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
72
|
+
throw new Error(code);
|
|
73
|
+
const row = value;
|
|
74
|
+
if (Object.keys(row).sort().join(",") !== [...keys].sort().join(","))
|
|
75
|
+
throw new Error(code);
|
|
76
|
+
return row;
|
|
77
|
+
}
|
|
78
|
+
function exactJwk(value) {
|
|
79
|
+
const row = exactObject(value, ["crv", "kty", "x"], "bamf_native_key_invalid");
|
|
80
|
+
if (row.kty !== "OKP" || row.crv !== "Ed25519" || typeof row.x !== "string" || !B64URL_43.test(row.x))
|
|
81
|
+
throw new Error("bamf_native_key_invalid");
|
|
82
|
+
return { kty: "OKP", crv: "Ed25519", x: row.x };
|
|
83
|
+
}
|
|
84
|
+
function thumbprint(jwk) {
|
|
85
|
+
return crypto.createHash("sha256").update((0, canonical_json_1.canonicalJsonString)(jwk)).digest("base64url");
|
|
86
|
+
}
|
|
87
|
+
function nativeLoaded(deps) {
|
|
88
|
+
if (!deps.run)
|
|
89
|
+
return (0, connected_access_native_1.provisionBundledNativeHost)(deps);
|
|
90
|
+
return { config: { bindingClass: "cli_only" }, paths: (0, connected_access_native_1.nativeHostPaths)((deps.homedir ?? os.homedir)()) };
|
|
91
|
+
}
|
|
92
|
+
function exactNativeEnvelope(value, keys, type, status) {
|
|
93
|
+
exactObject(value, keys, "bamf_native_response_invalid");
|
|
94
|
+
if (value.type !== type || value.status !== status || value.ok !== true || value.keyStorage !== "macos_keychain_backed" || value.authorityGranted !== false || value.secretValuesExposed !== false)
|
|
95
|
+
throw new Error("bamf_native_response_invalid");
|
|
96
|
+
}
|
|
97
|
+
function parseNativeKey(value, type, status) {
|
|
98
|
+
exactNativeEnvelope(value, ["type", "ok", "status", "publicJwk", "keyThumbprint", "keyStorage", "authorityGranted", "secretValuesExposed"], type, status);
|
|
99
|
+
const publicJwk = exactJwk(value.publicJwk);
|
|
100
|
+
if (typeof value.keyThumbprint !== "string" || value.keyThumbprint !== thumbprint(publicJwk))
|
|
101
|
+
throw new Error("bamf_native_key_invalid");
|
|
102
|
+
return { publicJwk, keyThumbprint: value.keyThumbprint };
|
|
103
|
+
}
|
|
104
|
+
function decodeJWTPart(value) {
|
|
105
|
+
if (!/^[A-Za-z0-9_-]+$/.test(value))
|
|
106
|
+
throw new Error("bamf_native_dpop_invalid");
|
|
107
|
+
try {
|
|
108
|
+
return JSON.parse(Buffer.from(value, "base64url").toString("utf8"));
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
throw new Error("bamf_native_dpop_invalid");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function parseNativeProof(value, expectedStatus, expected) {
|
|
115
|
+
exactNativeEnvelope(value, ["type", "ok", "status", "dpopProof", "publicJwk", "keyThumbprint", "iat", "jti", "keyStorage", "authorityGranted", "secretValuesExposed"], "connected_access.bamf_dpop_result.v1", expectedStatus);
|
|
116
|
+
const key = parseNativeKey({ type: "connected_access.ensure_bamf_context_key_result.v1", ok: true, status: "key_ready", publicJwk: value.publicJwk, keyThumbprint: value.keyThumbprint, keyStorage: value.keyStorage, authorityGranted: false, secretValuesExposed: false }, "connected_access.ensure_bamf_context_key_result.v1", "key_ready");
|
|
117
|
+
if (typeof value.dpopProof !== "string" || !COMPACT_JWS.test(value.dpopProof) || typeof value.iat !== "number" || !Number.isInteger(value.iat) || typeof value.jti !== "string" || !/^[A-Za-z0-9_-]{22,128}$/.test(value.jti))
|
|
118
|
+
throw new Error("bamf_native_dpop_invalid");
|
|
119
|
+
const [encodedHeader, encodedPayload] = value.dpopProof.split(".");
|
|
120
|
+
const header = exactObject(decodeJWTPart(encodedHeader), ["alg", "jwk", "typ"], "bamf_native_dpop_invalid");
|
|
121
|
+
const expectedPayloadKeys = ["htm", "htu", "iat", "jti", ...(expected.nonce ? ["nonce"] : []), ...(expected.ath ? ["ath"] : [])];
|
|
122
|
+
const payload = exactObject(decodeJWTPart(encodedPayload), expectedPayloadKeys, "bamf_native_dpop_invalid");
|
|
123
|
+
if (header.alg !== "EdDSA" || header.typ !== "dpop+jwt" || (0, canonical_json_1.canonicalJsonString)(exactJwk(header.jwk)) !== (0, canonical_json_1.canonicalJsonString)(key.publicJwk)
|
|
124
|
+
|| payload.htm !== "POST" || payload.htu !== expected.htu || payload.iat !== value.iat || payload.jti !== value.jti
|
|
125
|
+
|| (expected.nonce ? payload.nonce !== expected.nonce : "nonce" in payload)
|
|
126
|
+
|| (expected.ath ? payload.ath !== expected.ath : "ath" in payload))
|
|
127
|
+
throw new Error("bamf_native_dpop_invalid");
|
|
128
|
+
return { ...key, dpopProof: value.dpopProof, iat: value.iat, jti: value.jti };
|
|
129
|
+
}
|
|
130
|
+
function createNativeBAMFContext(deps = {}) {
|
|
131
|
+
const common = { applicationId: exports.BAMF_CONTEXT_APPLICATION_ID, runtimeBinding: exports.BAMF_CONTEXT_RUNTIME_BINDING };
|
|
132
|
+
const call = (request) => (0, connected_access_native_1.nativeHostCall)(request, nativeLoaded(deps), deps);
|
|
133
|
+
return {
|
|
134
|
+
ensureKey: async () => parseNativeKey(await call({ type: "connected_access.ensure_bamf_context_key_request.v1", ...common }), "connected_access.ensure_bamf_context_key_result.v1", "key_ready"),
|
|
135
|
+
signYouMdComplete: async ({ nonce }) => parseNativeProof(await call({ type: "connected_access.bamf_youmd_complete_dpop_request.v1", ...common, nonce }), "signed_bamf_youmd_complete_proof", { htu: `${exports.YOUMD_BAMF_API_BASE}/bamf-context-links/complete`, nonce }),
|
|
136
|
+
signResource: async ({ action, grantRef }) => parseNativeProof(await call({ type: "connected_access.bamf_resource_dpop_request.v1", ...common, action, grantRef }), `signed_bamf_${action}_proof`, { htu: `${exports.BAMF_CONTEXT_ENDPOINT}?action=${action}`, ath: crypto.createHash("sha256").update(grantRef).digest("base64url") }),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function safeCallbackBody(req) {
|
|
140
|
+
return new Promise((resolve, reject) => {
|
|
141
|
+
const declared = req.headers["content-length"];
|
|
142
|
+
if (typeof declared !== "string" || !/^\d{1,4}$/.test(declared) || Number(declared) > MAX_CALLBACK_BODY)
|
|
143
|
+
return reject(new Error("bamf_callback_body_invalid"));
|
|
144
|
+
const chunks = [];
|
|
145
|
+
let size = 0;
|
|
146
|
+
req.on("data", (chunk) => { size += chunk.length; if (size > MAX_CALLBACK_BODY) {
|
|
147
|
+
req.destroy();
|
|
148
|
+
reject(new Error("bamf_callback_body_invalid"));
|
|
149
|
+
}
|
|
150
|
+
else
|
|
151
|
+
chunks.push(chunk); });
|
|
152
|
+
req.once("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
|
|
153
|
+
req.once("error", () => reject(new Error("bamf_callback_body_invalid")));
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function callbackResponse(res, status, message) {
|
|
157
|
+
const body = `<!doctype html><meta charset="utf-8"><title>BAMF context link</title><p>${message}</p>`;
|
|
158
|
+
res.writeHead(status, { "Cache-Control": "no-store", "Content-Security-Policy": "default-src 'none'; style-src 'unsafe-inline'", "Content-Type": "text/html; charset=utf-8", "Referrer-Policy": "no-referrer", "X-Content-Type-Options": "nosniff" });
|
|
159
|
+
res.end(body);
|
|
160
|
+
}
|
|
161
|
+
/** A one-request, literal-IPv4 loopback receiver for BAMF's native form POST. */
|
|
162
|
+
async function createBAMFLoopback(state, timeoutMs = CALLBACK_TIMEOUT_MS) {
|
|
163
|
+
if (!B64URL_43.test(state) || !Number.isInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > CALLBACK_TIMEOUT_MS)
|
|
164
|
+
throw new Error("bamf_loopback_invalid");
|
|
165
|
+
let settle;
|
|
166
|
+
let fail;
|
|
167
|
+
let settled = false;
|
|
168
|
+
const callback = new Promise((resolve, reject) => { settle = resolve; fail = reject; });
|
|
169
|
+
const server = http.createServer(async (req, res) => {
|
|
170
|
+
const address = server.address();
|
|
171
|
+
const port = address && typeof address === "object" ? address.port : 0;
|
|
172
|
+
const validHeaders = req.method === "POST" && req.url === exports.BAMF_CALLBACK_PATH && req.headers.host === `127.0.0.1:${port}`
|
|
173
|
+
&& req.headers.origin === "https://bamf.com" && req.headers["content-type"] === "application/x-www-form-urlencoded"
|
|
174
|
+
&& req.headers["sec-fetch-mode"] === "navigate" && req.headers["sec-fetch-dest"] === "document";
|
|
175
|
+
if (!validHeaders) {
|
|
176
|
+
callbackResponse(res, 400, "Invalid callback.");
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const body = await safeCallbackBody(req);
|
|
181
|
+
const params = new URLSearchParams(body);
|
|
182
|
+
const entries = [...params.entries()];
|
|
183
|
+
const approved = entries.length === 2 && entries.filter(([key]) => key === "state").length === 1 && entries.filter(([key]) => key === "bamfChallenge").length === 1
|
|
184
|
+
&& params.get("state") === state && BAMF_CHALLENGE.test(params.get("bamfChallenge") ?? "");
|
|
185
|
+
const denied = entries.length === 2 && entries.filter(([key]) => key === "state").length === 1 && entries.filter(([key]) => key === "error").length === 1
|
|
186
|
+
&& params.get("state") === state && params.get("error") === "access_denied";
|
|
187
|
+
if (!approved && !denied)
|
|
188
|
+
throw new Error("bamf_callback_invalid");
|
|
189
|
+
callbackResponse(res, 200, "BAMF connection received. Return to the terminal.");
|
|
190
|
+
if (!settled) {
|
|
191
|
+
settled = true;
|
|
192
|
+
server.close();
|
|
193
|
+
if (denied)
|
|
194
|
+
fail(new Error("bamf_access_denied"));
|
|
195
|
+
else
|
|
196
|
+
settle({ bamfChallenge: params.get("bamfChallenge") });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
callbackResponse(res, 400, "Invalid callback.");
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
await new Promise((resolve, reject) => { server.once("error", reject); server.listen(0, "127.0.0.1", resolve); });
|
|
204
|
+
const address = server.address();
|
|
205
|
+
if (!address || typeof address !== "object" || address.address !== "127.0.0.1" || address.port < 1024) {
|
|
206
|
+
server.close();
|
|
207
|
+
throw new Error("bamf_loopback_unavailable");
|
|
208
|
+
}
|
|
209
|
+
const timer = setTimeout(() => { if (!settled) {
|
|
210
|
+
settled = true;
|
|
211
|
+
server.close();
|
|
212
|
+
fail(new Error("bamf_callback_timeout"));
|
|
213
|
+
} }, timeoutMs);
|
|
214
|
+
callback.finally(() => clearTimeout(timer)).catch(() => { });
|
|
215
|
+
return {
|
|
216
|
+
redirectUri: `http://127.0.0.1:${address.port}${exports.BAMF_CALLBACK_PATH}`,
|
|
217
|
+
wait: () => callback,
|
|
218
|
+
cancel: () => { if (!settled) {
|
|
219
|
+
settled = true;
|
|
220
|
+
server.close();
|
|
221
|
+
fail(new Error("bamf_callback_cancelled"));
|
|
222
|
+
} },
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function storePath(deps) {
|
|
226
|
+
return path.join((deps.homedir ?? os.homedir)(), ".youmd", "bamf-context-link.json");
|
|
227
|
+
}
|
|
228
|
+
function exactStored(value) {
|
|
229
|
+
const row = exactObject(value, ["grantRef", "youmdLinkId", "deviceJkt", "expiresAt"], "bamf_local_state_invalid");
|
|
230
|
+
const parsedExpiry = typeof row.expiresAt === "string" ? Date.parse(row.expiresAt) : Number.NaN;
|
|
231
|
+
if (typeof row.grantRef !== "string" || !BAMF_GRANT.test(row.grantRef) || typeof row.youmdLinkId !== "string" || !YOUMD_LINK.test(row.youmdLinkId)
|
|
232
|
+
|| typeof row.deviceJkt !== "string" || !B64URL_43.test(row.deviceJkt) || typeof row.expiresAt !== "string" || !Number.isFinite(parsedExpiry)
|
|
233
|
+
|| new Date(parsedExpiry).toISOString() !== row.expiresAt)
|
|
234
|
+
throw new Error("bamf_local_state_invalid");
|
|
235
|
+
return row;
|
|
236
|
+
}
|
|
237
|
+
function loadBAMFStoredLink(deps = {}) {
|
|
238
|
+
const target = storePath(deps);
|
|
239
|
+
let stat;
|
|
240
|
+
try {
|
|
241
|
+
stat = fs.lstatSync(target);
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
if (error.code === "ENOENT")
|
|
245
|
+
return null;
|
|
246
|
+
throw new Error("bamf_local_state_unavailable");
|
|
247
|
+
}
|
|
248
|
+
if (!stat.isFile() || stat.isSymbolicLink() || (stat.mode & 0o777) !== 0o600 || (typeof process.getuid === "function" && stat.uid !== process.getuid()))
|
|
249
|
+
throw new Error("bamf_local_state_permissions_unsafe");
|
|
250
|
+
let value;
|
|
251
|
+
try {
|
|
252
|
+
value = JSON.parse(fs.readFileSync(target, "utf8"));
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
throw new Error("bamf_local_state_invalid");
|
|
256
|
+
}
|
|
257
|
+
return exactStored(value);
|
|
258
|
+
}
|
|
259
|
+
function saveBAMFStoredLink(value, deps = {}) {
|
|
260
|
+
const exact = exactStored(value);
|
|
261
|
+
const target = storePath(deps);
|
|
262
|
+
const directory = path.dirname(target);
|
|
263
|
+
fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
264
|
+
const dirStat = fs.lstatSync(directory);
|
|
265
|
+
if (!dirStat.isDirectory() || dirStat.isSymbolicLink() || (dirStat.mode & 0o022) !== 0 || (typeof process.getuid === "function" && dirStat.uid !== process.getuid()))
|
|
266
|
+
throw new Error("bamf_local_directory_unsafe");
|
|
267
|
+
if (fs.existsSync(target)) {
|
|
268
|
+
const current = fs.lstatSync(target);
|
|
269
|
+
if (!current.isFile() || current.isSymbolicLink())
|
|
270
|
+
throw new Error("bamf_local_state_permissions_unsafe");
|
|
271
|
+
}
|
|
272
|
+
const temporary = path.join(directory, `.bamf-context-link.${process.pid}.${crypto.randomBytes(8).toString("hex")}`);
|
|
273
|
+
const descriptor = fs.openSync(temporary, "wx", 0o600);
|
|
274
|
+
try {
|
|
275
|
+
fs.writeFileSync(descriptor, `${JSON.stringify(exact)}\n`, "utf8");
|
|
276
|
+
fs.fsyncSync(descriptor);
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
fs.closeSync(descriptor);
|
|
280
|
+
}
|
|
281
|
+
fs.chmodSync(temporary, 0o600);
|
|
282
|
+
fs.renameSync(temporary, target);
|
|
283
|
+
fs.chmodSync(target, 0o600);
|
|
284
|
+
}
|
|
285
|
+
function removeBAMFStoredLink(deps) {
|
|
286
|
+
const target = storePath(deps);
|
|
287
|
+
const stored = loadBAMFStoredLink(deps);
|
|
288
|
+
if (!stored)
|
|
289
|
+
throw new Error("bamf_not_connected");
|
|
290
|
+
fs.unlinkSync(target);
|
|
291
|
+
}
|
|
292
|
+
function deviceId(jkt) {
|
|
293
|
+
const machine = (0, machine_identity_1.getPhysicalMachineKey)();
|
|
294
|
+
return `device:bamf_${crypto.createHash("sha256").update(`${machine}:${jkt}`).digest("hex").slice(0, 48)}`;
|
|
295
|
+
}
|
|
296
|
+
async function jsonResponse(response) {
|
|
297
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
298
|
+
if (!contentType.toLowerCase().startsWith("application/json"))
|
|
299
|
+
throw new Error("bamf_api_response_invalid");
|
|
300
|
+
const text = await response.text();
|
|
301
|
+
if (Buffer.byteLength(text) > 32768)
|
|
302
|
+
throw new Error("bamf_api_response_invalid");
|
|
303
|
+
try {
|
|
304
|
+
return JSON.parse(text);
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
throw new Error("bamf_api_response_invalid");
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
function safeServerError(response, value) {
|
|
311
|
+
try {
|
|
312
|
+
const outer = exactObject(value, ["error"], "invalid");
|
|
313
|
+
const error = exactObject(outer.error, ["code", "message", "request_id"], "invalid");
|
|
314
|
+
const code = typeof error.code === "string" && SAFE_ERROR_CODE.test(error.code) ? error.code : "request_failed";
|
|
315
|
+
return new Error(`bamf_http_${response.status}_${code}`);
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
return new Error(`bamf_http_${response.status}_request_failed`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
function registerResponseId(value) {
|
|
322
|
+
if (typeof value !== "string" || !SAFE_REQUEST_ID.test(value) || recentResponseIds.has(value))
|
|
323
|
+
throw new Error("bamf_response_replayed");
|
|
324
|
+
recentResponseIds.add(value);
|
|
325
|
+
if (recentResponseIds.size > 256)
|
|
326
|
+
recentResponseIds.delete(recentResponseIds.values().next().value);
|
|
327
|
+
return value;
|
|
328
|
+
}
|
|
329
|
+
async function bamfPost(action, body, dpop, request) {
|
|
330
|
+
const endpoint = action === "connect" ? exports.BAMF_CONTEXT_ENDPOINT : `${exports.BAMF_CONTEXT_ENDPOINT}?action=${action}`;
|
|
331
|
+
const headers = { Accept: "application/json", "Cache-Control": "no-store", "Content-Type": "application/json" };
|
|
332
|
+
if (dpop)
|
|
333
|
+
headers.DPoP = dpop;
|
|
334
|
+
// Never add Authorization here. The authenticated BAMF browser transaction
|
|
335
|
+
// was consumed through the assertion challenge and PKCE binding.
|
|
336
|
+
const response = await request(endpoint, { method: "POST", headers, body: JSON.stringify(body), redirect: "error", signal: AbortSignal.timeout(15000) });
|
|
337
|
+
const value = await jsonResponse(response);
|
|
338
|
+
if (!response.ok)
|
|
339
|
+
throw safeServerError(response, value);
|
|
340
|
+
return value;
|
|
341
|
+
}
|
|
342
|
+
async function ownerPost(pathname, body, token, request, dpop) {
|
|
343
|
+
const headers = { Accept: "application/json", Authorization: `Bearer ${token}`, "Cache-Control": "no-store", "Content-Type": "application/json" };
|
|
344
|
+
if (dpop)
|
|
345
|
+
headers.DPoP = dpop;
|
|
346
|
+
const response = await request(`${exports.YOUMD_BAMF_API_BASE}${pathname}`, { method: "POST", headers, body: JSON.stringify(body), redirect: "error", signal: AbortSignal.timeout(15000) });
|
|
347
|
+
const value = await jsonResponse(response);
|
|
348
|
+
if (!response.ok)
|
|
349
|
+
throw new Error(`youmd_bamf_http_${response.status}`);
|
|
350
|
+
return value;
|
|
351
|
+
}
|
|
352
|
+
async function ensureYouMdBinding(key, token, request) {
|
|
353
|
+
const id = deviceId(key.keyThumbprint);
|
|
354
|
+
const enrolled = await ownerPost("/device-keys/enroll", { deviceId: id, publicJwk: (0, canonical_json_1.canonicalJsonString)(key.publicJwk) }, token, request);
|
|
355
|
+
const deviceKey = enrolled.deviceKey && typeof enrolled.deviceKey === "object" ? enrolled.deviceKey : {};
|
|
356
|
+
if (typeof deviceKey.keyId !== "string" || !/^dak_[A-Za-z0-9]{32}$/.test(deviceKey.keyId))
|
|
357
|
+
throw new Error("youmd_bamf_key_enrollment_invalid");
|
|
358
|
+
const registered = await ownerPost("/applications/register", { applicationId: exports.BAMF_CONTEXT_APPLICATION_ID, runtime: "native_helper", runtimeBinding: exports.BAMF_CONTEXT_RUNTIME_BINDING, allowedOrigins: ["https://www.you.md"] }, token, request);
|
|
359
|
+
const application = registered.application && typeof registered.application === "object" ? registered.application : {};
|
|
360
|
+
if (application.applicationId !== exports.BAMF_CONTEXT_APPLICATION_ID || application.runtimeBinding !== exports.BAMF_CONTEXT_RUNTIME_BINDING)
|
|
361
|
+
throw new Error("youmd_bamf_application_invalid");
|
|
362
|
+
return { deviceId: id, keyId: deviceKey.keyId };
|
|
363
|
+
}
|
|
364
|
+
function parseProjection(value) {
|
|
365
|
+
const row = exactObject(value, ["portal_slug", "allowed_capability_identifiers", "freshness", "revision", "authorityGranted", "secretValuesExposed"], "bamf_projection_invalid");
|
|
366
|
+
if (typeof row.portal_slug !== "string" || !/^[a-z0-9][a-z0-9-]{1,80}$/.test(row.portal_slug) || !Array.isArray(row.allowed_capability_identifiers) || row.allowed_capability_identifiers.length !== 1 || row.allowed_capability_identifiers[0] !== "portal.context.read"
|
|
367
|
+
|| typeof row.freshness !== "string" || !Number.isFinite(Date.parse(row.freshness)) || typeof row.revision !== "number" || !Number.isInteger(row.revision) || row.revision < 1 || row.authorityGranted !== false || row.secretValuesExposed !== false)
|
|
368
|
+
throw new Error("bamf_projection_invalid");
|
|
369
|
+
return row;
|
|
370
|
+
}
|
|
371
|
+
function publicResult(action, grantExpiresAt, projection, revoked) {
|
|
372
|
+
return { ok: true, action, connected: action !== "revoke", ...(grantExpiresAt ? { expiresAt: grantExpiresAt } : {}), ...(projection ? { freshUntil: projection.freshness, projection } : {}), ...(revoked ? { revoked } : {}), authorityGranted: false, secretValuesExposed: false };
|
|
373
|
+
}
|
|
374
|
+
function bamfAuthorizationUrl(input) {
|
|
375
|
+
if (!B64URL_43.test(input.state) || !B64URL_43.test(input.deviceJkt) || !B64URL_43.test(input.codeChallenge) || !/^http:\/\/127\.0\.0\.1:\d{4,5}\/bamf-context-link\/callback$/.test(input.redirectUri))
|
|
376
|
+
throw new Error("bamf_authorization_url_invalid");
|
|
377
|
+
const url = new URL(exports.BAMF_CONTEXT_AUTHORIZE_URL);
|
|
378
|
+
url.searchParams.set("state", input.state);
|
|
379
|
+
url.searchParams.set("device_jkt", input.deviceJkt);
|
|
380
|
+
url.searchParams.set("code_challenge", input.codeChallenge);
|
|
381
|
+
url.searchParams.set("code_challenge_method", "S256");
|
|
382
|
+
url.searchParams.set("redirect_uri", input.redirectUri);
|
|
383
|
+
return url.toString();
|
|
384
|
+
}
|
|
385
|
+
async function startBAMFContextLink(deps = {}) {
|
|
386
|
+
const token = (deps.authToken ?? config_1.getAuthToken)();
|
|
387
|
+
if (!token)
|
|
388
|
+
throw new Error("authentication_required");
|
|
389
|
+
const existing = loadBAMFStoredLink(deps);
|
|
390
|
+
if (existing) {
|
|
391
|
+
if (Date.parse(existing.expiresAt) <= Date.now())
|
|
392
|
+
removeBAMFStoredLink(deps);
|
|
393
|
+
else
|
|
394
|
+
throw new Error("bamf_already_connected");
|
|
395
|
+
}
|
|
396
|
+
const request = deps.fetch ?? fetch;
|
|
397
|
+
const native = deps.native ?? createNativeBAMFContext(deps.nativeHostDeps);
|
|
398
|
+
const random = deps.randomBytes ?? crypto.randomBytes;
|
|
399
|
+
const state = random(32).toString("base64url");
|
|
400
|
+
const verifier = random(64).toString("base64url");
|
|
401
|
+
if (!B64URL_43.test(state) || !/^[A-Za-z0-9._~-]{43,128}$/.test(verifier))
|
|
402
|
+
throw new Error("bamf_randomness_invalid");
|
|
403
|
+
const codeChallenge = crypto.createHash("sha256").update(verifier).digest("base64url");
|
|
404
|
+
const key = await native.ensureKey();
|
|
405
|
+
const binding = await ensureYouMdBinding(key, token, request);
|
|
406
|
+
const loopback = await (deps.createLoopback ?? createBAMFLoopback)(state, deps.callbackTimeoutMs ?? CALLBACK_TIMEOUT_MS);
|
|
407
|
+
try {
|
|
408
|
+
const authorizationUrl = bamfAuthorizationUrl({ state, deviceJkt: key.keyThumbprint, codeChallenge, redirectUri: loopback.redirectUri });
|
|
409
|
+
(deps.openUrl ?? (() => { throw new Error("bamf_browser_open_unavailable"); }))(authorizationUrl);
|
|
410
|
+
const { bamfChallenge } = await loopback.wait();
|
|
411
|
+
const prepared = await ownerPost("/bamf-context-links/prepare", { deviceId: binding.deviceId, keyId: binding.keyId, applicationId: exports.BAMF_CONTEXT_APPLICATION_ID, audience: "bamf:context-link", scope: "portal.context.read", bamfChallenge, ownerConsent: true }, token, request);
|
|
412
|
+
const exactPrepared = exactObject(prepared, ["linkId", "nonce", "expiresAt", "authorityGranted", "secretValuesExposed"], "youmd_bamf_prepare_invalid");
|
|
413
|
+
if (typeof exactPrepared.linkId !== "string" || !YOUMD_LINK.test(exactPrepared.linkId) || typeof exactPrepared.nonce !== "string" || !NONCE.test(exactPrepared.nonce) || typeof exactPrepared.expiresAt !== "number" || !Number.isInteger(exactPrepared.expiresAt) || exactPrepared.expiresAt <= Date.now() || exactPrepared.authorityGranted !== false || exactPrepared.secretValuesExposed !== false)
|
|
414
|
+
throw new Error("youmd_bamf_prepare_invalid");
|
|
415
|
+
const proof = await native.signYouMdComplete({ nonce: exactPrepared.nonce });
|
|
416
|
+
if (proof.keyThumbprint !== key.keyThumbprint)
|
|
417
|
+
throw new Error("bamf_native_key_changed");
|
|
418
|
+
const completed = await ownerPost("/bamf-context-links/complete", { linkId: exactPrepared.linkId, nonce: exactPrepared.nonce, bamfChallenge }, token, request, proof.dpopProof);
|
|
419
|
+
const exactComplete = exactObject(completed, ["jws", "authorityGranted", "secretValuesExposed"], "youmd_bamf_complete_invalid");
|
|
420
|
+
if (typeof exactComplete.jws !== "string" || !COMPACT_JWS.test(exactComplete.jws) || exactComplete.authorityGranted !== false || exactComplete.secretValuesExposed !== false)
|
|
421
|
+
throw new Error("youmd_bamf_complete_invalid");
|
|
422
|
+
const connected = await bamfPost("connect", { action: "connect", assertion: exactComplete.jws, state, verifier, redirectUri: loopback.redirectUri }, undefined, request);
|
|
423
|
+
const exactConnected = exactObject(connected, ["ok", "request_id", "grant_ref", "projection"], "bamf_connect_response_invalid");
|
|
424
|
+
if (exactConnected.ok !== true || typeof exactConnected.grant_ref !== "string" || !BAMF_GRANT.test(exactConnected.grant_ref))
|
|
425
|
+
throw new Error("bamf_connect_response_invalid");
|
|
426
|
+
registerResponseId(exactConnected.request_id);
|
|
427
|
+
const projection = parseProjection(exactConnected.projection);
|
|
428
|
+
saveBAMFStoredLink({ grantRef: exactConnected.grant_ref, youmdLinkId: exactPrepared.linkId, deviceJkt: key.keyThumbprint, expiresAt: projection.freshness }, deps);
|
|
429
|
+
return publicResult("start", projection.freshness, projection);
|
|
430
|
+
}
|
|
431
|
+
finally {
|
|
432
|
+
loopback.cancel();
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
async function performBAMFContextAction(action, deps = {}) {
|
|
436
|
+
const stored = loadBAMFStoredLink(deps);
|
|
437
|
+
if (!stored)
|
|
438
|
+
throw new Error("bamf_not_connected");
|
|
439
|
+
const native = deps.native ?? createNativeBAMFContext(deps.nativeHostDeps);
|
|
440
|
+
const request = deps.fetch ?? fetch;
|
|
441
|
+
const proof = await native.signResource({ action, grantRef: stored.grantRef });
|
|
442
|
+
if (proof.keyThumbprint !== stored.deviceJkt)
|
|
443
|
+
throw new Error("bamf_native_key_changed");
|
|
444
|
+
let response;
|
|
445
|
+
try {
|
|
446
|
+
response = await bamfPost(action, { action, grantRef: stored.grantRef }, proof.dpopProof, request);
|
|
447
|
+
}
|
|
448
|
+
catch (error) {
|
|
449
|
+
if (error instanceof Error && error.message === "bamf_http_401_context_link_grant_unavailable") {
|
|
450
|
+
removeBAMFStoredLink(deps);
|
|
451
|
+
throw new Error("bamf_not_connected");
|
|
452
|
+
}
|
|
453
|
+
throw error;
|
|
454
|
+
}
|
|
455
|
+
if (action === "revoke") {
|
|
456
|
+
const exact = exactObject(response, ["ok", "request_id", "revoked", "authorityGranted", "secretValuesExposed"], "bamf_revoke_response_invalid");
|
|
457
|
+
if (exact.ok !== true || exact.revoked !== true || exact.authorityGranted !== false || exact.secretValuesExposed !== false)
|
|
458
|
+
throw new Error("bamf_revoke_response_invalid");
|
|
459
|
+
registerResponseId(exact.request_id);
|
|
460
|
+
removeBAMFStoredLink(deps);
|
|
461
|
+
return publicResult("revoke", undefined, undefined, true);
|
|
462
|
+
}
|
|
463
|
+
const exact = exactObject(response, ["ok", "request_id", "projection"], "bamf_resource_response_invalid");
|
|
464
|
+
if (exact.ok !== true)
|
|
465
|
+
throw new Error("bamf_resource_response_invalid");
|
|
466
|
+
registerResponseId(exact.request_id);
|
|
467
|
+
return publicResult(action, stored.expiresAt, parseProjection(exact.projection));
|
|
468
|
+
}
|
|
469
|
+
//# sourceMappingURL=bamf-context-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bamf-context-link.js","sourceRoot":"","sources":["../../src/lib/bamf-context-link.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,18 @@ export type NativeHostDeps = {
|
|
|
24
24
|
readFileSync?: typeof fs.readFileSync;
|
|
25
25
|
getuid?: () => number | undefined;
|
|
26
26
|
run?: NativeHostRunner;
|
|
27
|
+
platform?: NodeJS.Platform;
|
|
28
|
+
bundledExecutablePath?: string;
|
|
29
|
+
renameSync?: typeof fs.renameSync;
|
|
30
|
+
};
|
|
31
|
+
export declare function isUniversalMacOSNativeHost(bytes: Buffer): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Provision the npm-bundled universal helper at one fixed private location.
|
|
34
|
+
* Existing exact browser bindings and Chrome manifests are never touched.
|
|
35
|
+
*/
|
|
36
|
+
export declare function provisionBundledNativeHost(deps?: NativeHostDeps): {
|
|
37
|
+
config: NativeHostConfig;
|
|
38
|
+
paths: NativeHostPaths;
|
|
27
39
|
};
|
|
28
40
|
export declare function nativeHostPaths(homedir?: string): NativeHostPaths;
|
|
29
41
|
export declare function parseNativeHostConfig(raw: string): NativeHostConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connected-access-native.d.ts","sourceRoot":"","sources":["../../src/lib/connected-access-native.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"connected-access-native.d.ts","sourceRoot":"","sources":["../../src/lib/connected-access-native.ts"],"names":[],"mappings":"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"}
|