@singi-labs/sifa-sdk 0.19.87 → 0.19.88
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/{follow-profile-ceqefXAw.d.ts → follow-profile-CcMgQDsh.d.ts} +1 -1
- package/dist/{follow-profile-CQ3DTTak.d.cts → follow-profile-D3zDoDll.d.cts} +1 -1
- package/dist/{index-BrWWVQLL.d.cts → index-C2n-GjH2.d.cts} +1 -1
- package/dist/{index-B0BDMGLm.d.ts → index-LxGL5I-J.d.ts} +1 -1
- package/dist/index.cjs +30 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/jsonld/index.d.cts +2 -2
- package/dist/jsonld/index.d.ts +2 -2
- package/dist/{network-map-BRoBXwPG.d.cts → network-map-CFZx_xXE.d.cts} +4 -4
- package/dist/{network-map-NbEQwn91.d.ts → network-map-k2QxGpGf.d.ts} +4 -4
- package/dist/{profile-summary-BGIJ6ovO.d.ts → profile-summary-2pFtukEK.d.ts} +1 -1
- package/dist/{profile-summary-BpfRgE0z.d.cts → profile-summary-CwJD0-wo.d.cts} +1 -1
- package/dist/query/fetchers/index.d.cts +8 -8
- package/dist/query/fetchers/index.d.ts +8 -8
- package/dist/query/hooks/index.d.cts +6 -6
- package/dist/query/hooks/index.d.ts +6 -6
- package/dist/query/index.d.cts +11 -11
- package/dist/query/index.d.ts +11 -11
- package/dist/resume/index.d.cts +2 -2
- package/dist/resume/index.d.ts +2 -2
- package/dist/schemas/follow-profile.js +3 -1
- package/dist/schemas/follow-profile.js.map +1 -1
- package/dist/schemas/index.cjs +9 -5
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +2 -2
- package/dist/schemas/index.d.ts +2 -2
- package/dist/taxonomy/index.js +2 -0
- package/dist/taxonomy/index.js.map +1 -1
- package/dist/taxonomy/verification-providers.js +26 -5
- package/dist/taxonomy/verification-providers.js.map +1 -1
- package/dist/{types-D2IffOnb.d.ts → types-CICITVJa.d.ts} +2 -2
- package/dist/{types-CPi-Xcur.d.cts → types-DkrZo5eF.d.cts} +2 -2
- package/dist/{use-user-settings-BxIVvuk3.d.cts → use-user-settings-Azxf51V9.d.cts} +4 -4
- package/dist/{use-user-settings-D_APuRP2.d.ts → use-user-settings-DQNz9PYA.d.ts} +4 -4
- package/dist/{user-settings-BFyyuR3C.d.cts → user-settings-BDZ9i-Pk.d.cts} +4 -4
- package/dist/{user-settings-BSlRJc0W.d.ts → user-settings-DvqRXhdC.d.ts} +4 -4
- package/dist/{verification-providers-7il3kPQS.d.cts → verification-providers-BPdY3KyH.d.cts} +43 -9
- package/dist/{verification-providers-7il3kPQS.d.ts → verification-providers-BPdY3KyH.d.ts} +43 -9
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/taxonomy/verification-providers.ts
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var MU_ROOT_DID = "did:plc:ooensn4mr5mhznzypvxelfa3";
|
|
3
|
+
var MU_VERIFIER_LIST_URI = `at://${MU_ROOT_DID}/app.bsky.graph.list/3mogaw2g4an23`;
|
|
4
|
+
var MU_FALLBACK_VERIFIER_DIDS = [
|
|
5
5
|
"did:plc:durcipmx2rwgzzagbiumobs5",
|
|
6
6
|
// france-atmosphe.re
|
|
7
7
|
"did:plc:zsf5p7rqilz2qvyd7ezmxrfj",
|
|
@@ -30,7 +30,9 @@ var VERIFICATION_PROVIDERS = {
|
|
|
30
30
|
label: "mu (Eurosky)",
|
|
31
31
|
priority: 1,
|
|
32
32
|
source: "firehose",
|
|
33
|
-
verifierDids:
|
|
33
|
+
verifierDids: [MU_ROOT_DID],
|
|
34
|
+
verifierListUri: MU_VERIFIER_LIST_URI,
|
|
35
|
+
fallbackVerifierDids: MU_FALLBACK_VERIFIER_DIDS
|
|
34
36
|
}
|
|
35
37
|
};
|
|
36
38
|
function isKnownVerificationProvider(id) {
|
|
@@ -39,13 +41,31 @@ function isKnownVerificationProvider(id) {
|
|
|
39
41
|
function getVerificationProvider(id) {
|
|
40
42
|
return isKnownVerificationProvider(id) ? VERIFICATION_PROVIDERS[id] : void 0;
|
|
41
43
|
}
|
|
42
|
-
function resolveVerifierProvider(issuerDid) {
|
|
44
|
+
function resolveVerifierProvider(issuerDid, listMembers) {
|
|
43
45
|
for (const provider of Object.values(VERIFICATION_PROVIDERS)) {
|
|
44
46
|
if (provider.source !== "firehose") continue;
|
|
45
47
|
if (provider.verifierDids.includes(issuerDid)) return provider.id;
|
|
48
|
+
if (!listMembers && provider.fallbackVerifierDids?.includes(issuerDid)) return provider.id;
|
|
46
49
|
}
|
|
50
|
+
const fromList = listMembers?.get(issuerDid);
|
|
51
|
+
if (fromList && getVerificationProvider(fromList)?.source === "firehose") return fromList;
|
|
47
52
|
return null;
|
|
48
53
|
}
|
|
54
|
+
function buildVerifierListMembers(items) {
|
|
55
|
+
const members = /* @__PURE__ */ new Map();
|
|
56
|
+
for (const provider of Object.values(VERIFICATION_PROVIDERS)) {
|
|
57
|
+
if (provider.source !== "firehose" || !provider.verifierListUri) continue;
|
|
58
|
+
const owner = provider.verifierListUri.split("/")[2];
|
|
59
|
+
if (!owner || !provider.verifierDids.includes(owner)) continue;
|
|
60
|
+
for (const item of items) {
|
|
61
|
+
if (item.repoDid !== owner || item.list !== provider.verifierListUri) continue;
|
|
62
|
+
if (typeof item.subject !== "string" || !/^did:[a-z]+:[A-Za-z0-9._:%-]+$/.test(item.subject))
|
|
63
|
+
continue;
|
|
64
|
+
if (!members.has(item.subject)) members.set(item.subject, provider.id);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return members;
|
|
68
|
+
}
|
|
49
69
|
function primaryVerification(verifications) {
|
|
50
70
|
let best = null;
|
|
51
71
|
let bestPriority = Number.POSITIVE_INFINITY;
|
|
@@ -61,6 +81,7 @@ function primaryVerification(verifications) {
|
|
|
61
81
|
}
|
|
62
82
|
export {
|
|
63
83
|
VERIFICATION_PROVIDERS,
|
|
84
|
+
buildVerifierListMembers,
|
|
64
85
|
getVerificationProvider,
|
|
65
86
|
isKnownVerificationProvider,
|
|
66
87
|
primaryVerification,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/taxonomy/verification-providers.ts"],"sourcesContent":["/**\n * Verification providers -- the trust roots Sifa recognizes for AT Protocol\n * `app.bsky.graph.verification` records.\n *\n * Framing (see decisions/2026-07-13-third-party-verification-providers.md, D4):\n * a verification checkmark is ONE low-tier trust layer, not Sifa's headline.\n * Most of what it certifies is \"this account is who they claim to be\" -- useful,\n * and worth carrying because it's an already-recognized network signal, but low\n * value on its own. It sits among Sifa's other trust signals and never becomes a\n * score or a gate. This registry only decides which issuers Sifa displays and\n * with what provenance.\n *\n * Data-only: badge colors and icons are consumer concerns (React DOM on web,\n * React Native on mobile), same split as {@link PLATFORM_LABELS}. Consumers map\n * a provider id to a token/color.\n */\n\nexport type VerificationProviderId = 'bluesky' | 'mu';\n\n/** How Sifa learns about a provider's verifications. */\nexport type VerificationSource = 'bluesky-api' | 'firehose';\n\nexport interface VerificationProvider {\n id: VerificationProviderId;\n /** Human label for the badge popover, e.g. \"Bluesky\", \"mu (Eurosky)\". */\n label: string;\n /**\n * Primary-display priority (D1): when an account holds verifications from\n * multiple providers, the lowest number wins the single inline badge and the\n * rest move into the popover. Must be unique across providers.\n */\n priority: number;\n /**\n * - `bluesky-api`: sourced from Bluesky's public-API `verifiedStatus`. Bluesky\n * maintains its own trusted-verifier set, so Sifa keeps no local DID list.\n * - `firehose`: sourced from the Jetstream, gated on {@link verifierDids}.\n */\n source: VerificationSource;\n /**\n * Trusted verifier DIDs for firehose-sourced providers. A verification record\n * counts only if its ISSUER DID is in this list. Empty for `bluesky-api`\n * providers (Bluesky's AppView owns that decision). DIDs, not handles: a handle\n * takeover must never confer verifier status.\n */\n verifierDids: readonly string[];\n}\n\n/**\n * A verification held by an account, as surfaced to the UI. `issuerDid` is\n * present for firehose-sourced providers and absent for `bluesky-api`.\n */\nexport interface AccountVerification {\n provider: VerificationProviderId;\n verifiedAt?: string | null;\n issuerDid?: string | null;\n}\n\n/**\n * mu / Eurosky trusted verifiers (see https://hello.mu.social/verification).\n * Sifa-maintained allowlist -- this is the governance commitment. Add a DID here\n * only after confirming the organization is a mu trusted verifier. Handles are\n * comments for humans; the DID is what the firehose issuer gate matches.\n */\nconst MU_VERIFIER_DIDS = [\n 'did:plc:ooensn4mr5mhznzypvxelfa3', // eurosky.social -- coordinates the trusted-verifier program\n 'did:plc:durcipmx2rwgzzagbiumobs5', // france-atmosphe.re\n 'did:plc:zsf5p7rqilz2qvyd7ezmxrfj', // belgium-atmosphe.re\n 'did:plc:hd564mpf6bekrwzyhvujs54b', // medsky.network\n 'did:plc:u5zp7npt5kpueado77kuihyz', // npmx.dev\n 'did:plc:6tndl5lqrzjrx7ahjom2gjbq', // stewardshiplab.org\n 'did:plc:vnycpb2e4lh4tc7oyr3n2jvh', // newsmastfoundation.org\n 'did:plc:dsiqe4pszk5ldbjk66fyryjv', // cpesr.fr\n] as const;\n\nexport const VERIFICATION_PROVIDERS: Record<VerificationProviderId, VerificationProvider> = {\n bluesky: {\n id: 'bluesky',\n label: 'Bluesky',\n priority: 0,\n source: 'bluesky-api',\n verifierDids: [],\n },\n mu: {\n id: 'mu',\n label: 'mu (Eurosky)',\n priority: 1,\n source: 'firehose',\n verifierDids: MU_VERIFIER_DIDS,\n },\n};\n\nexport function isKnownVerificationProvider(id: string): id is VerificationProviderId {\n // Object.hasOwn, not `in`: `in` also matches inherited Object.prototype keys\n // ('toString', 'constructor', ...), which would wrongly narrow those strings\n // and make getVerificationProvider return a prototype function.\n return Object.hasOwn(VERIFICATION_PROVIDERS, id);\n}\n\nexport function getVerificationProvider(id: string): VerificationProvider | undefined {\n return isKnownVerificationProvider(id) ? VERIFICATION_PROVIDERS[id] : undefined;\n}\n\n/**\n * The firehose issuer gate: given the DID that authored an\n * `app.bsky.graph.verification` record, return the provider it verifies for, or\n * `null` if the issuer is not a recognized firehose verifier. API-sourced\n * providers (Bluesky) are never matched here -- their verifications do not enter\n * through the firehose, so a self-issued record cannot resolve to them.\n */\nexport function resolveVerifierProvider(issuerDid: string): VerificationProviderId | null {\n for (const provider of Object.values(VERIFICATION_PROVIDERS)) {\n if (provider.source !== 'firehose') continue;\n if (provider.verifierDids.includes(issuerDid)) return provider.id;\n }\n return null;\n}\n\n/**\n * D1 primary-provider selection: from all verifications an account holds, pick\n * the one whose provider has the highest priority (lowest `priority` number) for\n * the single inline badge. The rest belong in the popover. Verifications from\n * unknown providers are ignored. Returns `null` when nothing is displayable.\n */\nexport function primaryVerification(\n verifications: readonly AccountVerification[],\n): AccountVerification | null {\n let best: AccountVerification | null = null;\n let bestPriority = Number.POSITIVE_INFINITY;\n for (const verification of verifications) {\n const provider = getVerificationProvider(verification.provider);\n if (!provider) continue;\n if (provider.priority < bestPriority) {\n best = verification;\n bestPriority = provider.priority;\n }\n }\n return best;\n}\n"],"mappings":";AA+DA,IAAM,mBAAmB;AAAA,EACvB;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAM,yBAA+E;AAAA,EAC1F,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc,CAAC;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,4BAA4B,IAA0C;AAIpF,SAAO,OAAO,OAAO,wBAAwB,EAAE;AACjD;AAEO,SAAS,wBAAwB,IAA8C;AACpF,SAAO,4BAA4B,EAAE,IAAI,uBAAuB,EAAE,IAAI;AACxE;AASO,SAAS,wBAAwB,WAAkD;AACxF,aAAW,YAAY,OAAO,OAAO,sBAAsB,GAAG;AAC5D,QAAI,SAAS,WAAW,WAAY;AACpC,QAAI,SAAS,aAAa,SAAS,SAAS,EAAG,QAAO,SAAS;AAAA,EACjE;AACA,SAAO;AACT;AAQO,SAAS,oBACd,eAC4B;AAC5B,MAAI,OAAmC;AACvC,MAAI,eAAe,OAAO;AAC1B,aAAW,gBAAgB,eAAe;AACxC,UAAM,WAAW,wBAAwB,aAAa,QAAQ;AAC9D,QAAI,CAAC,SAAU;AACf,QAAI,SAAS,WAAW,cAAc;AACpC,aAAO;AACP,qBAAe,SAAS;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/verification-providers.ts"],"sourcesContent":["/**\n * Verification providers -- the trust roots Sifa recognizes for AT Protocol\n * `app.bsky.graph.verification` records.\n *\n * Framing (see decisions/2026-07-13-third-party-verification-providers.md, D4):\n * a verification checkmark is ONE low-tier trust layer, not Sifa's headline.\n * Most of what it certifies is \"this account is who they claim to be\" -- useful,\n * and worth carrying because it's an already-recognized network signal, but low\n * value on its own. It sits among Sifa's other trust signals and never becomes a\n * score or a gate. This registry only decides which issuers Sifa displays and\n * with what provenance.\n *\n * Data-only: badge colors and icons are consumer concerns (React DOM on web,\n * React Native on mobile), same split as {@link PLATFORM_LABELS}. Consumers map\n * a provider id to a token/color.\n */\n\nexport type VerificationProviderId = 'bluesky' | 'mu';\n\n/** How Sifa learns about a provider's verifications. */\nexport type VerificationSource = 'bluesky-api' | 'firehose';\n\nexport interface VerificationProvider {\n id: VerificationProviderId;\n /** Human label for the badge popover, e.g. \"Bluesky\", \"mu (Eurosky)\". */\n label: string;\n /**\n * Primary-display priority (D1): when an account holds verifications from\n * multiple providers, the lowest number wins the single inline badge and the\n * rest move into the popover. Must be unique across providers.\n */\n priority: number;\n /**\n * - `bluesky-api`: sourced from Bluesky's public-API `verifiedStatus`. Bluesky\n * maintains its own trusted-verifier set, so Sifa keeps no local DID list.\n * - `firehose`: sourced from the Jetstream, gated on {@link verifierDids}.\n */\n source: VerificationSource;\n /**\n * Trust-root DIDs for firehose-sourced providers. A verification record counts\n * if its ISSUER DID is a root or a member of {@link verifierListUri}. Empty for\n * `bluesky-api` providers (Bluesky's AppView owns that decision). DIDs, not\n * handles: a handle takeover must never confer verifier status.\n */\n verifierDids: readonly string[];\n /**\n * AT-URI of the `app.bsky.graph.list` where the provider publishes its\n * trusted verifiers. Consumers load its members at runtime and pass them to\n * {@link resolveVerifierProvider}, so a verifier the provider adds counts on\n * Sifa without a release. The list owner must be in {@link verifierDids}.\n */\n verifierListUri?: string;\n /**\n * Verifiers last confirmed by hand, used ONLY when the caller supplies no\n * list members (list not loaded yet, or a consumer that does not load it).\n * Keeps such callers working; once members are supplied, the list wins.\n */\n fallbackVerifierDids?: readonly string[];\n}\n\n/**\n * A verification held by an account, as surfaced to the UI. `issuerDid` is\n * present for firehose-sourced providers and absent for `bluesky-api`.\n */\nexport interface AccountVerification {\n provider: VerificationProviderId;\n verifiedAt?: string | null;\n issuerDid?: string | null;\n /** Display name of the issuer (firehose providers), when the API knows it. */\n issuerName?: string | null;\n}\n\n/**\n * mu / Eurosky trust root (see https://hello.mu.social/verification).\n * eurosky.social coordinates the trusted-verifier program and publishes the\n * verifier set as {@link MU_VERIFIER_LIST_URI}; the individual verifiers are\n * read from that list at runtime, not maintained here.\n */\nconst MU_ROOT_DID = 'did:plc:ooensn4mr5mhznzypvxelfa3'; // eurosky.social\n\n/** \"Trusted verifiers on mu\", owned by {@link MU_ROOT_DID}. */\nconst MU_VERIFIER_LIST_URI = `at://${MU_ROOT_DID}/app.bsky.graph.list/3mogaw2g4an23`;\n\n/** Snapshot of the mu verifiers confirmed by hand before the list was used. */\nconst MU_FALLBACK_VERIFIER_DIDS = [\n 'did:plc:durcipmx2rwgzzagbiumobs5', // france-atmosphe.re\n 'did:plc:zsf5p7rqilz2qvyd7ezmxrfj', // belgium-atmosphe.re\n 'did:plc:hd564mpf6bekrwzyhvujs54b', // medsky.network\n 'did:plc:u5zp7npt5kpueado77kuihyz', // npmx.dev\n 'did:plc:6tndl5lqrzjrx7ahjom2gjbq', // stewardshiplab.org\n 'did:plc:vnycpb2e4lh4tc7oyr3n2jvh', // newsmastfoundation.org\n 'did:plc:dsiqe4pszk5ldbjk66fyryjv', // cpesr.fr\n] as const;\n\nexport const VERIFICATION_PROVIDERS: Record<VerificationProviderId, VerificationProvider> = {\n bluesky: {\n id: 'bluesky',\n label: 'Bluesky',\n priority: 0,\n source: 'bluesky-api',\n verifierDids: [],\n },\n mu: {\n id: 'mu',\n label: 'mu (Eurosky)',\n priority: 1,\n source: 'firehose',\n verifierDids: [MU_ROOT_DID],\n verifierListUri: MU_VERIFIER_LIST_URI,\n fallbackVerifierDids: MU_FALLBACK_VERIFIER_DIDS,\n },\n};\n\nexport function isKnownVerificationProvider(id: string): id is VerificationProviderId {\n // Object.hasOwn, not `in`: `in` also matches inherited Object.prototype keys\n // ('toString', 'constructor', ...), which would wrongly narrow those strings\n // and make getVerificationProvider return a prototype function.\n return Object.hasOwn(VERIFICATION_PROVIDERS, id);\n}\n\nexport function getVerificationProvider(id: string): VerificationProvider | undefined {\n return isKnownVerificationProvider(id) ? VERIFICATION_PROVIDERS[id] : undefined;\n}\n\n/**\n * The firehose issuer gate: given the DID that authored an\n * `app.bsky.graph.verification` record, return the provider it verifies for, or\n * `null` if the issuer is not a recognized firehose verifier. A DID counts if it\n * is a provider's trust root, or if `listMembers` (built with\n * {@link buildVerifierListMembers}) maps it to a firehose provider. Without\n * `listMembers`, each provider's `fallbackVerifierDids` apply instead.\n * API-sourced providers (Bluesky) are never matched here -- their verifications\n * do not enter through the firehose, so a self-issued record cannot resolve to\n * them.\n */\nexport function resolveVerifierProvider(\n issuerDid: string,\n listMembers?: ReadonlyMap<string, VerificationProviderId>,\n): VerificationProviderId | null {\n for (const provider of Object.values(VERIFICATION_PROVIDERS)) {\n if (provider.source !== 'firehose') continue;\n if (provider.verifierDids.includes(issuerDid)) return provider.id;\n if (!listMembers && provider.fallbackVerifierDids?.includes(issuerDid)) return provider.id;\n }\n const fromList = listMembers?.get(issuerDid);\n if (fromList && getVerificationProvider(fromList)?.source === 'firehose') return fromList;\n return null;\n}\n\n/** One `app.bsky.graph.listitem` record value, plus the repo it was read from. */\nexport interface VerifierListItem {\n /** DID of the repo the listitem record was read from. */\n repoDid: string;\n list: unknown;\n subject: unknown;\n}\n\n/**\n * Build the `listMembers` map for {@link resolveVerifierProvider} from raw\n * listitem records. An item counts only if it belongs to a firehose provider's\n * {@link VerificationProvider.verifierListUri}, was read from that list owner's\n * repo, and that owner is one of the provider's trust roots. Anything else\n * (a list item someone else wrote, another list, a malformed subject) is dropped.\n */\nexport function buildVerifierListMembers(\n items: readonly VerifierListItem[],\n): Map<string, VerificationProviderId> {\n const members = new Map<string, VerificationProviderId>();\n for (const provider of Object.values(VERIFICATION_PROVIDERS)) {\n if (provider.source !== 'firehose' || !provider.verifierListUri) continue;\n const owner = provider.verifierListUri.split('/')[2];\n if (!owner || !provider.verifierDids.includes(owner)) continue;\n for (const item of items) {\n if (item.repoDid !== owner || item.list !== provider.verifierListUri) continue;\n if (typeof item.subject !== 'string' || !/^did:[a-z]+:[A-Za-z0-9._:%-]+$/.test(item.subject))\n continue;\n if (!members.has(item.subject)) members.set(item.subject, provider.id);\n }\n }\n return members;\n}\n\n/**\n * D1 primary-provider selection: from all verifications an account holds, pick\n * the one whose provider has the highest priority (lowest `priority` number) for\n * the single inline badge. The rest belong in the popover. Verifications from\n * unknown providers are ignored. Returns `null` when nothing is displayable.\n */\nexport function primaryVerification(\n verifications: readonly AccountVerification[],\n): AccountVerification | null {\n let best: AccountVerification | null = null;\n let bestPriority = Number.POSITIVE_INFINITY;\n for (const verification of verifications) {\n const provider = getVerificationProvider(verification.provider);\n if (!provider) continue;\n if (provider.priority < bestPriority) {\n best = verification;\n bestPriority = provider.priority;\n }\n }\n return best;\n}\n"],"mappings":";AA8EA,IAAM,cAAc;AAGpB,IAAM,uBAAuB,QAAQ,WAAW;AAGhD,IAAM,4BAA4B;AAAA,EAChC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAM,yBAA+E;AAAA,EAC1F,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc,CAAC;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc,CAAC,WAAW;AAAA,IAC1B,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,EACxB;AACF;AAEO,SAAS,4BAA4B,IAA0C;AAIpF,SAAO,OAAO,OAAO,wBAAwB,EAAE;AACjD;AAEO,SAAS,wBAAwB,IAA8C;AACpF,SAAO,4BAA4B,EAAE,IAAI,uBAAuB,EAAE,IAAI;AACxE;AAaO,SAAS,wBACd,WACA,aAC+B;AAC/B,aAAW,YAAY,OAAO,OAAO,sBAAsB,GAAG;AAC5D,QAAI,SAAS,WAAW,WAAY;AACpC,QAAI,SAAS,aAAa,SAAS,SAAS,EAAG,QAAO,SAAS;AAC/D,QAAI,CAAC,eAAe,SAAS,sBAAsB,SAAS,SAAS,EAAG,QAAO,SAAS;AAAA,EAC1F;AACA,QAAM,WAAW,aAAa,IAAI,SAAS;AAC3C,MAAI,YAAY,wBAAwB,QAAQ,GAAG,WAAW,WAAY,QAAO;AACjF,SAAO;AACT;AAiBO,SAAS,yBACd,OACqC;AACrC,QAAM,UAAU,oBAAI,IAAoC;AACxD,aAAW,YAAY,OAAO,OAAO,sBAAsB,GAAG;AAC5D,QAAI,SAAS,WAAW,cAAc,CAAC,SAAS,gBAAiB;AACjE,UAAM,QAAQ,SAAS,gBAAgB,MAAM,GAAG,EAAE,CAAC;AACnD,QAAI,CAAC,SAAS,CAAC,SAAS,aAAa,SAAS,KAAK,EAAG;AACtD,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,YAAY,SAAS,KAAK,SAAS,SAAS,gBAAiB;AACtE,UAAI,OAAO,KAAK,YAAY,YAAY,CAAC,iCAAiC,KAAK,KAAK,OAAO;AACzF;AACF,UAAI,CAAC,QAAQ,IAAI,KAAK,OAAO,EAAG,SAAQ,IAAI,KAAK,SAAS,SAAS,EAAE;AAAA,IACvE;AAAA,EACF;AACA,SAAO;AACT;AAQO,SAAS,oBACd,eAC4B;AAC5B,MAAI,OAAmC;AACvC,MAAI,eAAe,OAAO;AAC1B,aAAW,gBAAgB,eAAe;AACxC,UAAM,WAAW,wBAAwB,aAAa,QAAQ;AAC9D,QAAI,CAAC,SAAU;AACf,QAAI,SAAS,WAAW,cAAc;AACpC,aAAO;AACP,qBAAe,SAAS;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { z as PresentationLinkView, b as PdsProviderInfo, X as SkillSuggestion } from './index-
|
|
2
|
-
import { a as AccountVerification } from './verification-providers-
|
|
1
|
+
import { z as PresentationLinkView, b as PdsProviderInfo, X as SkillSuggestion } from './index-LxGL5I-J.js';
|
|
2
|
+
import { a as AccountVerification } from './verification-providers-BPdY3KyH.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { z as PresentationLinkView, b as PdsProviderInfo, X as SkillSuggestion } from './index-
|
|
2
|
-
import { a as AccountVerification } from './verification-providers-
|
|
1
|
+
import { z as PresentationLinkView, b as PdsProviderInfo, X as SkillSuggestion } from './index-C2n-GjH2.cjs';
|
|
2
|
+
import { a as AccountVerification } from './verification-providers-BPdY3KyH.cjs';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { a0 as SifaApiConfig, a1 as ApiFetchOptions, a3 as WriteResult, o as ProfileView, a2 as CreateResult, a5 as FilterOptions, S as SearchFilters, a8 as SearchResponse, a9 as SkillSearchResult, ai as CompanySearchFilters, aj as CompanySearchResponse, u as RepoDeleteResult, x as RepoInventory } from './types-
|
|
3
|
+
import { a0 as SifaApiConfig, a1 as ApiFetchOptions, a3 as WriteResult, o as ProfileView, a2 as CreateResult, a5 as FilterOptions, S as SearchFilters, a8 as SearchResponse, a9 as SkillSearchResult, ai as CompanySearchFilters, aj as CompanySearchResponse, u as RepoDeleteResult, x as RepoInventory } from './types-DkrZo5eF.cjs';
|
|
4
4
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
5
5
|
import { UseQueryOptions, UseMutationOptions, UseInfiniteQueryOptions, InfiniteData } from '@tanstack/react-query';
|
|
6
|
-
import { c as Profile, d as ProfilePosition, W as SkillRef, p as ExternalAccount, X as SkillSuggestion, s as OrgFloorVerdict } from './index-
|
|
7
|
-
import { s as sifaQueryKeys, aI as RefreshPdsResult, b5 as UpdateProfileOverrideInput, b6 as UpdateProfileSelfInput, b7 as UploadAvatarResult, b8 as UploadPronunciationAudioResult, as as PrimarySection, a_ as SubCategoryBulkResult, ax as ProfileLocationInput, p as ExternalAccountInput, n as CreateExternalAccountResult, bc as VerifyExternalAccountResult, E as EndorsementInput, l as ConfirmationInput, m as ConfirmationSubjectInput, a2 as GivenConfirmation, ar as PendingConfirmationsPage, ad as InboxCounts, o as DismissUnlinkedPositionInput, b3 as UnlinkedPositionsResult, at as ProfileCompleteness, aQ as RpgClaimableResponse, aU as RpgStatusResponse, aH as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, ac as HideProfileItemInput, a7 as HiddenActivityItem, ab as HideActivityItemInput, b1 as UnhideActivityItemInput, f as ActivityPreferences, aY as SiteActivityPresetResponse, b4 as UpdateActivityPreferencesInput, aZ as StatsResponse, i as AppRegistryEntry, a8 as HiddenApp, b as AccountSummary, q as FeaturedProfile, aX as SimilarProfile, P as FetchSuggestionsOptions, b0 as SuggestionsResponse, V as FollowUserResult, x as FetchFollowListOptions, S as FollowListPage, $ as FollowingResponse, z as FetchFollowingFeedOptions, Z as FollowingFeedResponse, _ as FollowingFeedVersion, y as FetchFollowProfilePageOptions, U as FollowProfilePageResponse, F as FeatureAllowlistResponse, h as AdminReviewQueues, t as FetchActivityFeedOptions, c as ActivityFeedResponse, g as ActivityTeaserResponse, a6 as HeatmapResponse, af as MyGithubPullRequestsResponse, A as AccountCheckResult, aG as ReactionStatus, aF as ReactionResult, aE as ReactionError, aP as RoadmapVotesResponse, j as CastRoadmapVoteResult, D as DeleteAccountResult, aK as ResetProfileResult, bd as WipePreview, aJ as RepoDeleteInput, ah as OrgClaimResult, an as OrgProfileUpdateResult, ai as OrgDomainChallengeResult, aj as OrgDomainVerifyResult, ak as OrgNotificationEmailAddResult, al as OrgNotificationEmailRemoveResult, b9 as UserSettings } from './user-settings-
|
|
6
|
+
import { c as Profile, d as ProfilePosition, W as SkillRef, p as ExternalAccount, X as SkillSuggestion, s as OrgFloorVerdict } from './index-C2n-GjH2.cjs';
|
|
7
|
+
import { s as sifaQueryKeys, aI as RefreshPdsResult, b5 as UpdateProfileOverrideInput, b6 as UpdateProfileSelfInput, b7 as UploadAvatarResult, b8 as UploadPronunciationAudioResult, as as PrimarySection, a_ as SubCategoryBulkResult, ax as ProfileLocationInput, p as ExternalAccountInput, n as CreateExternalAccountResult, bc as VerifyExternalAccountResult, E as EndorsementInput, l as ConfirmationInput, m as ConfirmationSubjectInput, a2 as GivenConfirmation, ar as PendingConfirmationsPage, ad as InboxCounts, o as DismissUnlinkedPositionInput, b3 as UnlinkedPositionsResult, at as ProfileCompleteness, aQ as RpgClaimableResponse, aU as RpgStatusResponse, aH as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, ac as HideProfileItemInput, a7 as HiddenActivityItem, ab as HideActivityItemInput, b1 as UnhideActivityItemInput, f as ActivityPreferences, aY as SiteActivityPresetResponse, b4 as UpdateActivityPreferencesInput, aZ as StatsResponse, i as AppRegistryEntry, a8 as HiddenApp, b as AccountSummary, q as FeaturedProfile, aX as SimilarProfile, P as FetchSuggestionsOptions, b0 as SuggestionsResponse, V as FollowUserResult, x as FetchFollowListOptions, S as FollowListPage, $ as FollowingResponse, z as FetchFollowingFeedOptions, Z as FollowingFeedResponse, _ as FollowingFeedVersion, y as FetchFollowProfilePageOptions, U as FollowProfilePageResponse, F as FeatureAllowlistResponse, h as AdminReviewQueues, t as FetchActivityFeedOptions, c as ActivityFeedResponse, g as ActivityTeaserResponse, a6 as HeatmapResponse, af as MyGithubPullRequestsResponse, A as AccountCheckResult, aG as ReactionStatus, aF as ReactionResult, aE as ReactionError, aP as RoadmapVotesResponse, j as CastRoadmapVoteResult, D as DeleteAccountResult, aK as ResetProfileResult, bd as WipePreview, aJ as RepoDeleteInput, ah as OrgClaimResult, an as OrgProfileUpdateResult, ai as OrgDomainChallengeResult, aj as OrgDomainVerifyResult, ak as OrgNotificationEmailAddResult, al as OrgNotificationEmailRemoveResult, b9 as UserSettings } from './user-settings-BDZ9i-Pk.cjs';
|
|
8
8
|
import { z } from 'zod';
|
|
9
|
-
import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, n as EntitySelectResponse, l as EntitySelectRequest, r as FeatureFlag } from './follow-profile-
|
|
9
|
+
import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, n as EntitySelectResponse, l as EntitySelectRequest, r as FeatureFlag } from './follow-profile-D3zDoDll.cjs';
|
|
10
10
|
import { O as OrgClaimRequestInput, a as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, c as OrgDomainVerifyRequestInput, d as OrgNotificationEmailRequestInput } from './org-settings-C73Sin5E.cjs';
|
|
11
11
|
|
|
12
12
|
interface SifaProviderProps {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { a0 as SifaApiConfig, a1 as ApiFetchOptions, a3 as WriteResult, o as ProfileView, a2 as CreateResult, a5 as FilterOptions, S as SearchFilters, a8 as SearchResponse, a9 as SkillSearchResult, ai as CompanySearchFilters, aj as CompanySearchResponse, u as RepoDeleteResult, x as RepoInventory } from './types-
|
|
3
|
+
import { a0 as SifaApiConfig, a1 as ApiFetchOptions, a3 as WriteResult, o as ProfileView, a2 as CreateResult, a5 as FilterOptions, S as SearchFilters, a8 as SearchResponse, a9 as SkillSearchResult, ai as CompanySearchFilters, aj as CompanySearchResponse, u as RepoDeleteResult, x as RepoInventory } from './types-CICITVJa.js';
|
|
4
4
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
5
5
|
import { UseQueryOptions, UseMutationOptions, UseInfiniteQueryOptions, InfiniteData } from '@tanstack/react-query';
|
|
6
|
-
import { c as Profile, d as ProfilePosition, W as SkillRef, p as ExternalAccount, X as SkillSuggestion, s as OrgFloorVerdict } from './index-
|
|
7
|
-
import { s as sifaQueryKeys, aI as RefreshPdsResult, b5 as UpdateProfileOverrideInput, b6 as UpdateProfileSelfInput, b7 as UploadAvatarResult, b8 as UploadPronunciationAudioResult, as as PrimarySection, a_ as SubCategoryBulkResult, ax as ProfileLocationInput, p as ExternalAccountInput, n as CreateExternalAccountResult, bc as VerifyExternalAccountResult, E as EndorsementInput, l as ConfirmationInput, m as ConfirmationSubjectInput, a2 as GivenConfirmation, ar as PendingConfirmationsPage, ad as InboxCounts, o as DismissUnlinkedPositionInput, b3 as UnlinkedPositionsResult, at as ProfileCompleteness, aQ as RpgClaimableResponse, aU as RpgStatusResponse, aH as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, ac as HideProfileItemInput, a7 as HiddenActivityItem, ab as HideActivityItemInput, b1 as UnhideActivityItemInput, f as ActivityPreferences, aY as SiteActivityPresetResponse, b4 as UpdateActivityPreferencesInput, aZ as StatsResponse, i as AppRegistryEntry, a8 as HiddenApp, b as AccountSummary, q as FeaturedProfile, aX as SimilarProfile, P as FetchSuggestionsOptions, b0 as SuggestionsResponse, V as FollowUserResult, x as FetchFollowListOptions, S as FollowListPage, $ as FollowingResponse, z as FetchFollowingFeedOptions, Z as FollowingFeedResponse, _ as FollowingFeedVersion, y as FetchFollowProfilePageOptions, U as FollowProfilePageResponse, F as FeatureAllowlistResponse, h as AdminReviewQueues, t as FetchActivityFeedOptions, c as ActivityFeedResponse, g as ActivityTeaserResponse, a6 as HeatmapResponse, af as MyGithubPullRequestsResponse, A as AccountCheckResult, aG as ReactionStatus, aF as ReactionResult, aE as ReactionError, aP as RoadmapVotesResponse, j as CastRoadmapVoteResult, D as DeleteAccountResult, aK as ResetProfileResult, bd as WipePreview, aJ as RepoDeleteInput, ah as OrgClaimResult, an as OrgProfileUpdateResult, ai as OrgDomainChallengeResult, aj as OrgDomainVerifyResult, ak as OrgNotificationEmailAddResult, al as OrgNotificationEmailRemoveResult, b9 as UserSettings } from './user-settings-
|
|
6
|
+
import { c as Profile, d as ProfilePosition, W as SkillRef, p as ExternalAccount, X as SkillSuggestion, s as OrgFloorVerdict } from './index-LxGL5I-J.js';
|
|
7
|
+
import { s as sifaQueryKeys, aI as RefreshPdsResult, b5 as UpdateProfileOverrideInput, b6 as UpdateProfileSelfInput, b7 as UploadAvatarResult, b8 as UploadPronunciationAudioResult, as as PrimarySection, a_ as SubCategoryBulkResult, ax as ProfileLocationInput, p as ExternalAccountInput, n as CreateExternalAccountResult, bc as VerifyExternalAccountResult, E as EndorsementInput, l as ConfirmationInput, m as ConfirmationSubjectInput, a2 as GivenConfirmation, ar as PendingConfirmationsPage, ad as InboxCounts, o as DismissUnlinkedPositionInput, b3 as UnlinkedPositionsResult, at as ProfileCompleteness, aQ as RpgClaimableResponse, aU as RpgStatusResponse, aH as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, ac as HideProfileItemInput, a7 as HiddenActivityItem, ab as HideActivityItemInput, b1 as UnhideActivityItemInput, f as ActivityPreferences, aY as SiteActivityPresetResponse, b4 as UpdateActivityPreferencesInput, aZ as StatsResponse, i as AppRegistryEntry, a8 as HiddenApp, b as AccountSummary, q as FeaturedProfile, aX as SimilarProfile, P as FetchSuggestionsOptions, b0 as SuggestionsResponse, V as FollowUserResult, x as FetchFollowListOptions, S as FollowListPage, $ as FollowingResponse, z as FetchFollowingFeedOptions, Z as FollowingFeedResponse, _ as FollowingFeedVersion, y as FetchFollowProfilePageOptions, U as FollowProfilePageResponse, F as FeatureAllowlistResponse, h as AdminReviewQueues, t as FetchActivityFeedOptions, c as ActivityFeedResponse, g as ActivityTeaserResponse, a6 as HeatmapResponse, af as MyGithubPullRequestsResponse, A as AccountCheckResult, aG as ReactionStatus, aF as ReactionResult, aE as ReactionError, aP as RoadmapVotesResponse, j as CastRoadmapVoteResult, D as DeleteAccountResult, aK as ResetProfileResult, bd as WipePreview, aJ as RepoDeleteInput, ah as OrgClaimResult, an as OrgProfileUpdateResult, ai as OrgDomainChallengeResult, aj as OrgDomainVerifyResult, ak as OrgNotificationEmailAddResult, al as OrgNotificationEmailRemoveResult, b9 as UserSettings } from './user-settings-DvqRXhdC.js';
|
|
8
8
|
import { z } from 'zod';
|
|
9
|
-
import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, n as EntitySelectResponse, l as EntitySelectRequest, r as FeatureFlag } from './follow-profile-
|
|
9
|
+
import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, n as EntitySelectResponse, l as EntitySelectRequest, r as FeatureFlag } from './follow-profile-CcMgQDsh.js';
|
|
10
10
|
import { O as OrgClaimRequestInput, h as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, d as OrgDomainVerifyRequestInput, f as OrgNotificationEmailRequestInput } from './org-settings-BShvhyFp.js';
|
|
11
11
|
|
|
12
12
|
interface SifaProviderProps {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a3 as WriteResult, a0 as SifaApiConfig, a1 as ApiFetchOptions, a2 as CreateResult, K as SiteActivityPreset, b as ActivityLabel, u as RepoDeleteResult, x as RepoInventory } from './types-
|
|
2
|
-
import { p as ExternalAccount, y as PositionViewerConfirmation } from './index-
|
|
3
|
-
import { a as AccountVerification } from './verification-providers-
|
|
4
|
-
import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-
|
|
1
|
+
import { a3 as WriteResult, a0 as SifaApiConfig, a1 as ApiFetchOptions, a2 as CreateResult, K as SiteActivityPreset, b as ActivityLabel, u as RepoDeleteResult, x as RepoInventory } from './types-DkrZo5eF.cjs';
|
|
2
|
+
import { p as ExternalAccount, y as PositionViewerConfirmation } from './index-C2n-GjH2.cjs';
|
|
3
|
+
import { a as AccountVerification } from './verification-providers-BPdY3KyH.cjs';
|
|
4
|
+
import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-D3zDoDll.cjs';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { d as OrgNotificationEmailRequestInput, b as OrgDomainChallengeRequestInput, O as OrgClaimRequestInput, a as OrgProfileUpdateRequestInput, c as OrgDomainVerifyRequestInput } from './org-settings-C73Sin5E.cjs';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a3 as WriteResult, a0 as SifaApiConfig, a1 as ApiFetchOptions, a2 as CreateResult, K as SiteActivityPreset, b as ActivityLabel, u as RepoDeleteResult, x as RepoInventory } from './types-
|
|
2
|
-
import { p as ExternalAccount, y as PositionViewerConfirmation } from './index-
|
|
3
|
-
import { a as AccountVerification } from './verification-providers-
|
|
4
|
-
import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-
|
|
1
|
+
import { a3 as WriteResult, a0 as SifaApiConfig, a1 as ApiFetchOptions, a2 as CreateResult, K as SiteActivityPreset, b as ActivityLabel, u as RepoDeleteResult, x as RepoInventory } from './types-CICITVJa.js';
|
|
2
|
+
import { p as ExternalAccount, y as PositionViewerConfirmation } from './index-LxGL5I-J.js';
|
|
3
|
+
import { a as AccountVerification } from './verification-providers-BPdY3KyH.js';
|
|
4
|
+
import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-CcMgQDsh.js';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { f as OrgNotificationEmailRequestInput, b as OrgDomainChallengeRequestInput, O as OrgClaimRequestInput, h as OrgProfileUpdateRequestInput, d as OrgDomainVerifyRequestInput } from './org-settings-BShvhyFp.js';
|
|
7
7
|
|
package/dist/{verification-providers-7il3kPQS.d.cts → verification-providers-BPdY3KyH.d.cts}
RENAMED
|
@@ -120,12 +120,25 @@ interface VerificationProvider {
|
|
|
120
120
|
*/
|
|
121
121
|
source: VerificationSource;
|
|
122
122
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* providers (Bluesky's AppView owns that decision). DIDs, not
|
|
126
|
-
* takeover must never confer verifier status.
|
|
123
|
+
* Trust-root DIDs for firehose-sourced providers. A verification record counts
|
|
124
|
+
* if its ISSUER DID is a root or a member of {@link verifierListUri}. Empty for
|
|
125
|
+
* `bluesky-api` providers (Bluesky's AppView owns that decision). DIDs, not
|
|
126
|
+
* handles: a handle takeover must never confer verifier status.
|
|
127
127
|
*/
|
|
128
128
|
verifierDids: readonly string[];
|
|
129
|
+
/**
|
|
130
|
+
* AT-URI of the `app.bsky.graph.list` where the provider publishes its
|
|
131
|
+
* trusted verifiers. Consumers load its members at runtime and pass them to
|
|
132
|
+
* {@link resolveVerifierProvider}, so a verifier the provider adds counts on
|
|
133
|
+
* Sifa without a release. The list owner must be in {@link verifierDids}.
|
|
134
|
+
*/
|
|
135
|
+
verifierListUri?: string;
|
|
136
|
+
/**
|
|
137
|
+
* Verifiers last confirmed by hand, used ONLY when the caller supplies no
|
|
138
|
+
* list members (list not loaded yet, or a consumer that does not load it).
|
|
139
|
+
* Keeps such callers working; once members are supplied, the list wins.
|
|
140
|
+
*/
|
|
141
|
+
fallbackVerifierDids?: readonly string[];
|
|
129
142
|
}
|
|
130
143
|
/**
|
|
131
144
|
* A verification held by an account, as surfaced to the UI. `issuerDid` is
|
|
@@ -135,6 +148,8 @@ interface AccountVerification {
|
|
|
135
148
|
provider: VerificationProviderId;
|
|
136
149
|
verifiedAt?: string | null;
|
|
137
150
|
issuerDid?: string | null;
|
|
151
|
+
/** Display name of the issuer (firehose providers), when the API knows it. */
|
|
152
|
+
issuerName?: string | null;
|
|
138
153
|
}
|
|
139
154
|
declare const VERIFICATION_PROVIDERS: Record<VerificationProviderId, VerificationProvider>;
|
|
140
155
|
declare function isKnownVerificationProvider(id: string): id is VerificationProviderId;
|
|
@@ -142,11 +157,30 @@ declare function getVerificationProvider(id: string): VerificationProvider | und
|
|
|
142
157
|
/**
|
|
143
158
|
* The firehose issuer gate: given the DID that authored an
|
|
144
159
|
* `app.bsky.graph.verification` record, return the provider it verifies for, or
|
|
145
|
-
* `null` if the issuer is not a recognized firehose verifier.
|
|
146
|
-
*
|
|
147
|
-
*
|
|
160
|
+
* `null` if the issuer is not a recognized firehose verifier. A DID counts if it
|
|
161
|
+
* is a provider's trust root, or if `listMembers` (built with
|
|
162
|
+
* {@link buildVerifierListMembers}) maps it to a firehose provider. Without
|
|
163
|
+
* `listMembers`, each provider's `fallbackVerifierDids` apply instead.
|
|
164
|
+
* API-sourced providers (Bluesky) are never matched here -- their verifications
|
|
165
|
+
* do not enter through the firehose, so a self-issued record cannot resolve to
|
|
166
|
+
* them.
|
|
167
|
+
*/
|
|
168
|
+
declare function resolveVerifierProvider(issuerDid: string, listMembers?: ReadonlyMap<string, VerificationProviderId>): VerificationProviderId | null;
|
|
169
|
+
/** One `app.bsky.graph.listitem` record value, plus the repo it was read from. */
|
|
170
|
+
interface VerifierListItem {
|
|
171
|
+
/** DID of the repo the listitem record was read from. */
|
|
172
|
+
repoDid: string;
|
|
173
|
+
list: unknown;
|
|
174
|
+
subject: unknown;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Build the `listMembers` map for {@link resolveVerifierProvider} from raw
|
|
178
|
+
* listitem records. An item counts only if it belongs to a firehose provider's
|
|
179
|
+
* {@link VerificationProvider.verifierListUri}, was read from that list owner's
|
|
180
|
+
* repo, and that owner is one of the provider's trust roots. Anything else
|
|
181
|
+
* (a list item someone else wrote, another list, a malformed subject) is dropped.
|
|
148
182
|
*/
|
|
149
|
-
declare function
|
|
183
|
+
declare function buildVerifierListMembers(items: readonly VerifierListItem[]): Map<string, VerificationProviderId>;
|
|
150
184
|
/**
|
|
151
185
|
* D1 primary-provider selection: from all verifications an account holds, pick
|
|
152
186
|
* the one whose provider has the highest priority (lowest `priority` number) for
|
|
@@ -155,4 +189,4 @@ declare function resolveVerifierProvider(issuerDid: string): VerificationProvide
|
|
|
155
189
|
*/
|
|
156
190
|
declare function primaryVerification(verifications: readonly AccountVerification[]): AccountVerification | null;
|
|
157
191
|
|
|
158
|
-
export { type AgentRef as A, VERIFICATION_PROVIDERS as V, type AccountVerification as a, type VerificationProvider as b, type VerificationProviderId as c, type VerificationSource as d,
|
|
192
|
+
export { type AgentRef as A, VERIFICATION_PROVIDERS as V, type AccountVerification as a, type VerificationProvider as b, type VerificationProviderId as c, type VerificationSource as d, type VerifierListItem as e, agentRefSchema as f, atUriSchema as g, buildVerifierListMembers as h, cidSchema as i, datetimeSchema as j, didSchema as k, externalRecordRefSchema as l, getVerificationProvider as m, isKnownVerificationProvider as n, languageTagSchema as o, maxGraphemes as p, partialDateSchema as q, primaryVerification as r, resolveVerifierProvider as s, selfLabelsSchema as t, skillRefSchema as u, strongRefSchema as v, uriSchema as w };
|
|
@@ -120,12 +120,25 @@ interface VerificationProvider {
|
|
|
120
120
|
*/
|
|
121
121
|
source: VerificationSource;
|
|
122
122
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* providers (Bluesky's AppView owns that decision). DIDs, not
|
|
126
|
-
* takeover must never confer verifier status.
|
|
123
|
+
* Trust-root DIDs for firehose-sourced providers. A verification record counts
|
|
124
|
+
* if its ISSUER DID is a root or a member of {@link verifierListUri}. Empty for
|
|
125
|
+
* `bluesky-api` providers (Bluesky's AppView owns that decision). DIDs, not
|
|
126
|
+
* handles: a handle takeover must never confer verifier status.
|
|
127
127
|
*/
|
|
128
128
|
verifierDids: readonly string[];
|
|
129
|
+
/**
|
|
130
|
+
* AT-URI of the `app.bsky.graph.list` where the provider publishes its
|
|
131
|
+
* trusted verifiers. Consumers load its members at runtime and pass them to
|
|
132
|
+
* {@link resolveVerifierProvider}, so a verifier the provider adds counts on
|
|
133
|
+
* Sifa without a release. The list owner must be in {@link verifierDids}.
|
|
134
|
+
*/
|
|
135
|
+
verifierListUri?: string;
|
|
136
|
+
/**
|
|
137
|
+
* Verifiers last confirmed by hand, used ONLY when the caller supplies no
|
|
138
|
+
* list members (list not loaded yet, or a consumer that does not load it).
|
|
139
|
+
* Keeps such callers working; once members are supplied, the list wins.
|
|
140
|
+
*/
|
|
141
|
+
fallbackVerifierDids?: readonly string[];
|
|
129
142
|
}
|
|
130
143
|
/**
|
|
131
144
|
* A verification held by an account, as surfaced to the UI. `issuerDid` is
|
|
@@ -135,6 +148,8 @@ interface AccountVerification {
|
|
|
135
148
|
provider: VerificationProviderId;
|
|
136
149
|
verifiedAt?: string | null;
|
|
137
150
|
issuerDid?: string | null;
|
|
151
|
+
/** Display name of the issuer (firehose providers), when the API knows it. */
|
|
152
|
+
issuerName?: string | null;
|
|
138
153
|
}
|
|
139
154
|
declare const VERIFICATION_PROVIDERS: Record<VerificationProviderId, VerificationProvider>;
|
|
140
155
|
declare function isKnownVerificationProvider(id: string): id is VerificationProviderId;
|
|
@@ -142,11 +157,30 @@ declare function getVerificationProvider(id: string): VerificationProvider | und
|
|
|
142
157
|
/**
|
|
143
158
|
* The firehose issuer gate: given the DID that authored an
|
|
144
159
|
* `app.bsky.graph.verification` record, return the provider it verifies for, or
|
|
145
|
-
* `null` if the issuer is not a recognized firehose verifier.
|
|
146
|
-
*
|
|
147
|
-
*
|
|
160
|
+
* `null` if the issuer is not a recognized firehose verifier. A DID counts if it
|
|
161
|
+
* is a provider's trust root, or if `listMembers` (built with
|
|
162
|
+
* {@link buildVerifierListMembers}) maps it to a firehose provider. Without
|
|
163
|
+
* `listMembers`, each provider's `fallbackVerifierDids` apply instead.
|
|
164
|
+
* API-sourced providers (Bluesky) are never matched here -- their verifications
|
|
165
|
+
* do not enter through the firehose, so a self-issued record cannot resolve to
|
|
166
|
+
* them.
|
|
167
|
+
*/
|
|
168
|
+
declare function resolveVerifierProvider(issuerDid: string, listMembers?: ReadonlyMap<string, VerificationProviderId>): VerificationProviderId | null;
|
|
169
|
+
/** One `app.bsky.graph.listitem` record value, plus the repo it was read from. */
|
|
170
|
+
interface VerifierListItem {
|
|
171
|
+
/** DID of the repo the listitem record was read from. */
|
|
172
|
+
repoDid: string;
|
|
173
|
+
list: unknown;
|
|
174
|
+
subject: unknown;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Build the `listMembers` map for {@link resolveVerifierProvider} from raw
|
|
178
|
+
* listitem records. An item counts only if it belongs to a firehose provider's
|
|
179
|
+
* {@link VerificationProvider.verifierListUri}, was read from that list owner's
|
|
180
|
+
* repo, and that owner is one of the provider's trust roots. Anything else
|
|
181
|
+
* (a list item someone else wrote, another list, a malformed subject) is dropped.
|
|
148
182
|
*/
|
|
149
|
-
declare function
|
|
183
|
+
declare function buildVerifierListMembers(items: readonly VerifierListItem[]): Map<string, VerificationProviderId>;
|
|
150
184
|
/**
|
|
151
185
|
* D1 primary-provider selection: from all verifications an account holds, pick
|
|
152
186
|
* the one whose provider has the highest priority (lowest `priority` number) for
|
|
@@ -155,4 +189,4 @@ declare function resolveVerifierProvider(issuerDid: string): VerificationProvide
|
|
|
155
189
|
*/
|
|
156
190
|
declare function primaryVerification(verifications: readonly AccountVerification[]): AccountVerification | null;
|
|
157
191
|
|
|
158
|
-
export { type AgentRef as A, VERIFICATION_PROVIDERS as V, type AccountVerification as a, type VerificationProvider as b, type VerificationProviderId as c, type VerificationSource as d,
|
|
192
|
+
export { type AgentRef as A, VERIFICATION_PROVIDERS as V, type AccountVerification as a, type VerificationProvider as b, type VerificationProviderId as c, type VerificationSource as d, type VerifierListItem as e, agentRefSchema as f, atUriSchema as g, buildVerifierListMembers as h, cidSchema as i, datetimeSchema as j, didSchema as k, externalRecordRefSchema as l, getVerificationProvider as m, isKnownVerificationProvider as n, languageTagSchema as o, maxGraphemes as p, partialDateSchema as q, primaryVerification as r, resolveVerifierProvider as s, selfLabelsSchema as t, skillRefSchema as u, strongRefSchema as v, uriSchema as w };
|
package/package.json
CHANGED