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
- const ownerCredentials = () => readOwners().credentials.filter((credential) => credential.services.includes(doorHost));
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.services.includes(doorHost);
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.301",
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",