@ai-matrx/vault 0.1.40 → 0.1.42

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 CHANGED
@@ -1,10 +1,20 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.40
3
+ ## 0.1.42
4
4
 
5
5
  UNVERIFIED: this release has no Unreleased entry and the source comparison could not be made (the caller supplied no source comparison). Whether source changed is unknown; consumer action is unknown.
6
6
  Check the package's gitHead on npm against this version's gitHead: `git diff <previous gitHead> <this gitHead> -- apps/shared/vault/src`.
7
7
 
8
+ ## 0.1.41
9
+
10
+ Automatic changed-only republish (docs/metadata drift since the last published version; verified: `git diff 7448cb2ff1 f1984cb2e2 -- apps/shared/vault/src`
11
+ has no shipped-source changes outside tests, fixtures and docs). No consumer action required.
12
+
13
+ ## 0.1.40
14
+
15
+ Automatic changed-only republish (docs/metadata drift since the last published version; verified: `git diff dcbf369af4 7448cb2ff1 -- apps/shared/vault/src`
16
+ has no shipped-source changes outside tests, fixtures and docs). No consumer action required.
17
+
8
18
  ## 0.1.39
9
19
 
10
20
  - **Organization vaults never read as empty by mistake** (2026-10-23): a 404 from `GET /vault/organization-items` still falls back to one read per organization, but now says so once per port (new `ApiVaultPortOptions.onHostProblem(message, detail)`; without it, `console.warn`); an organization the server refused, names unavailable or leaves out is listed under `unavailable`, never shown as an empty vault; the camera note in Add authenticator is one line of 60 characters or fewer ("No camera. Paste the key or choose a QR image."). Proof: `src/organization-items-load.test.ts`, `src/first-code-closes.test.tsx`, `src/review-0-1-36.test.tsx`, `src/review-0-1-37.test.tsx`. Consumer action: needs `@ai-matrx/design-system` with the Select hint that never truncates (the release train publishes both); a host may pass `onHostProblem` to forward it to its error capture; nothing else.
@@ -149,4 +149,5 @@ declare function IdentityGate({ identity, children }: {
149
149
  /** True for the rejection a canceled confirmation produces (callers stay quiet about it). */
150
150
  declare const wasCancelled: (e: unknown) => boolean;
151
151
 
152
- export { CONFIRM_RETURN_KEY, type Confirmed, type IdentityAccount, IdentityGate, type IdentityMethod, type ReturnStore, type SupabaseAuthLike, type SupabaseIdentityOptions, type VaultIdentity, createSupabaseIdentity, needsRecentSignIn, useConfirmed, wasCancelled };
152
+ export { CONFIRM_RETURN_KEY, IdentityGate, createSupabaseIdentity, needsRecentSignIn, useConfirmed, wasCancelled };
153
+ export type { Confirmed, IdentityAccount, IdentityMethod, ReturnStore, SupabaseAuthLike, SupabaseIdentityOptions, VaultIdentity };
@@ -149,4 +149,5 @@ declare function IdentityGate({ identity, children }: {
149
149
  /** True for the rejection a canceled confirmation produces (callers stay quiet about it). */
150
150
  declare const wasCancelled: (e: unknown) => boolean;
151
151
 
152
- export { CONFIRM_RETURN_KEY, type Confirmed, type IdentityAccount, IdentityGate, type IdentityMethod, type ReturnStore, type SupabaseAuthLike, type SupabaseIdentityOptions, type VaultIdentity, createSupabaseIdentity, needsRecentSignIn, useConfirmed, wasCancelled };
152
+ export { CONFIRM_RETURN_KEY, IdentityGate, createSupabaseIdentity, needsRecentSignIn, useConfirmed, wasCancelled };
153
+ export type { Confirmed, IdentityAccount, IdentityMethod, ReturnStore, SupabaseAuthLike, SupabaseIdentityOptions, VaultIdentity };
package/dist/index.cjs CHANGED
@@ -3242,7 +3242,6 @@ function positiveKnob(resolved, key) {
3242
3242
  }
3243
3243
 
3244
3244
  // src/organizations.ts
3245
- var import_record_id_format = require("@ai-matrx/design-system/record-id-format");
3246
3245
  function orderOrganizations(orgs, items, recentItemIds) {
3247
3246
  const counts = /* @__PURE__ */ new Map();
3248
3247
  for (const i of items) if (i.owner.organizationId) counts.set(i.owner.organizationId, (counts.get(i.owner.organizationId) ?? 0) + 1);
@@ -3256,9 +3255,22 @@ function orderOrganizations(orgs, items, recentItemIds) {
3256
3255
  return [...orgs].sort((a, b) => group(a) - group(b) || (recent.get(a.id) ?? 0) - (recent.get(b.id) ?? 0) || a.name.localeCompare(b.name, void 0, { sensitivity: "base" }) || a.id.localeCompare(b.id));
3257
3256
  }
3258
3257
  function organizationHints(orgs) {
3259
- const seen = /* @__PURE__ */ new Map();
3260
- for (const o of orgs) seen.set(o.name.trim().toLowerCase(), (seen.get(o.name.trim().toLowerCase()) ?? 0) + 1);
3261
- return new Map(orgs.filter((o) => (seen.get(o.name.trim().toLowerCase()) ?? 0) > 1).map((o) => [o.id, (0, import_record_id_format.shortUuid)(o.id)]));
3258
+ const groups = /* @__PURE__ */ new Map();
3259
+ for (const o of orgs) {
3260
+ const key = o.name.trim().toLowerCase();
3261
+ groups.set(key, [...groups.get(key) ?? [], o]);
3262
+ }
3263
+ const hints = /* @__PURE__ */ new Map();
3264
+ for (const group of groups.values()) {
3265
+ if (group.length < 2) continue;
3266
+ const longest = Math.max(...group.map((o) => o.id.length));
3267
+ const fragment = (o, n2) => o.id.slice(0, n2);
3268
+ let n = 8;
3269
+ while (n < longest && new Set(group.map((o) => fragment(o, n))).size < group.length) n += 1;
3270
+ const useSuffix = new Set(group.map((o) => fragment(o, n))).size < group.length;
3271
+ for (const o of group) hints.set(o.id, useSuffix ? o.id.slice(-8) : fragment(o, n));
3272
+ }
3273
+ return hints;
3262
3274
  }
3263
3275
 
3264
3276
  // src/shown-until-move.ts