omni-notify-mcp 1.3.301 → 1.3.302
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.
|
@@ -319,7 +319,7 @@ export function localOnly(req) {
|
|
|
319
319
|
/** A session records the credential it was signed in with: a passkey's id, `authenticator:<id>`, or `sms`. */
|
|
320
320
|
const approvalOfCredential = (credentialId) => (credentialId.startsWith(AUTHENTICATOR) || credentialId === SMS ? credentialId : `passkey:${credentialId}`);
|
|
321
321
|
/** One service's sign-in: its passkeys, authenticator app, sessions and code strikes, kept apart from every other door's. */
|
|
322
|
-
export function createSignInDoor({ storeFile, product, short, home, host: doorHost, ownerFile, ownsStore }) {
|
|
322
|
+
export function createSignInDoor({ storeFile, product, short, home, host: doorHost, ownerFile, ownsStore, renamedFrom = [] }) {
|
|
323
323
|
const challenges = new Map();
|
|
324
324
|
const tickets = new Map();
|
|
325
325
|
const pendingAuthenticators = new Map();
|
|
@@ -342,7 +342,9 @@ export function createSignInDoor({ storeFile, product, short, home, host: doorHo
|
|
|
342
342
|
renameSync(temp, storeFile);
|
|
343
343
|
}
|
|
344
344
|
const readOwners = () => readOwnersFile(ownerFile());
|
|
345
|
-
|
|
345
|
+
// A service renamed in the deploy keeps its owner passkeys: an owner credential naming this service's former name still covers it, so a rename never silently orphans the key.
|
|
346
|
+
const coversDoor = (credential) => credential.services.includes(doorHost) || renamedFrom.some((name) => credential.services.includes(name));
|
|
347
|
+
const ownerCredentials = () => readOwners().credentials.filter(coversDoor);
|
|
346
348
|
const ownerReaches = (base) => base === `https://${doorHost}` && OWNER_ORIGINS.includes(base);
|
|
347
349
|
function rememberRetirement() {
|
|
348
350
|
if (!ownsStore)
|
|
@@ -822,7 +824,7 @@ ${locked(store) ? "" : `<p class="mut">Until an owner passkey is registered, not
|
|
|
822
824
|
const kept = owners.credentials.filter((credential) => credential.id !== id);
|
|
823
825
|
if (kept.length === owners.credentials.length)
|
|
824
826
|
throw new GatewayError(404, "no owner passkey has that id");
|
|
825
|
-
const servedHere = (credential) => credential
|
|
827
|
+
const servedHere = (credential) => coversDoor(credential);
|
|
826
828
|
if (owners.credentials.some((credential) => credential.id === id && servedHere(credential)) && !kept.some(servedHere) && !confirmLast) {
|
|
827
829
|
throw new GatewayError(409, `that is the last owner passkey ${short} has — removing it closes ${short} to everyone until a new owner passkey is registered; confirm to remove it`);
|
|
828
830
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omni-notify-mcp",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.302",
|
|
4
4
|
"description": "Reach your AI agents from anywhere — and let them reach you. One stdio process serves the whole tool surface to Claude Code, GitHub Copilot Chat and Codex: desktop, Telegram, Slack, ntfy, Discord, Teams and SMS are configured in one file, and agents notify you when long work finishes or a decision is needed, ask you a question and wait for your answer, and receive and reply to the messages you send them — with Do Not Disturb and idle detection deciding what actually gets through.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|