@singi-labs/sifa-sdk 0.18.14 → 0.18.16

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.
Files changed (49) hide show
  1. package/dist/{index-DIwi3bpk.d.cts → index-E2qQbMnv.d.cts} +10 -0
  2. package/dist/{index-DIwi3bpk.d.ts → index-E2qQbMnv.d.ts} +10 -0
  3. package/dist/index.cjs +13 -1
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +32 -7
  6. package/dist/index.d.ts +32 -7
  7. package/dist/index.js +13 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/jsonld/index.d.cts +1 -1
  10. package/dist/jsonld/index.d.ts +1 -1
  11. package/dist/{network-map-DnQvqpqi.d.ts → network-map-BYdQF1tr.d.ts} +8 -4
  12. package/dist/{network-map-8RDsXsr0.d.cts → network-map-BdDqR9-B.d.cts} +8 -4
  13. package/dist/{org-DvnZsZx9.d.ts → org-BftCzySH.d.ts} +31 -3
  14. package/dist/{org-0uCYKpq1.d.cts → org-DhAmipS-.d.cts} +31 -3
  15. package/dist/{profile-investment-CIG7Hy8g.d.cts → profile-investment-vmHROP_v.d.cts} +5 -0
  16. package/dist/{profile-investment-CIG7Hy8g.d.ts → profile-investment-vmHROP_v.d.ts} +5 -0
  17. package/dist/{profile-summary-B9EQmnC7.d.cts → profile-summary-BeiM3TmH.d.cts} +1 -1
  18. package/dist/{profile-summary-nbzILRkf.d.ts → profile-summary-CKAuwczF.d.ts} +1 -1
  19. package/dist/query/fetchers/index.cjs +26 -0
  20. package/dist/query/fetchers/index.cjs.map +1 -1
  21. package/dist/query/fetchers/index.d.cts +6 -6
  22. package/dist/query/fetchers/index.d.ts +6 -6
  23. package/dist/query/fetchers/index.js +24 -1
  24. package/dist/query/fetchers/index.js.map +1 -1
  25. package/dist/query/hooks/index.cjs +106 -24
  26. package/dist/query/hooks/index.cjs.map +1 -1
  27. package/dist/query/hooks/index.d.cts +5 -5
  28. package/dist/query/hooks/index.d.ts +5 -5
  29. package/dist/query/hooks/index.js +104 -25
  30. package/dist/query/hooks/index.js.map +1 -1
  31. package/dist/query/index.cjs +104 -23
  32. package/dist/query/index.cjs.map +1 -1
  33. package/dist/query/index.d.cts +8 -8
  34. package/dist/query/index.d.ts +8 -8
  35. package/dist/query/index.js +99 -24
  36. package/dist/query/index.js.map +1 -1
  37. package/dist/resume/index.d.cts +1 -1
  38. package/dist/resume/index.d.ts +1 -1
  39. package/dist/schemas/index.cjs +5 -0
  40. package/dist/schemas/index.cjs.map +1 -1
  41. package/dist/schemas/index.d.cts +1 -1
  42. package/dist/schemas/index.d.ts +1 -1
  43. package/dist/schemas/index.js +5 -0
  44. package/dist/schemas/index.js.map +1 -1
  45. package/dist/{types-XejLm3AA.d.cts → types-2qTC_DBy.d.cts} +6 -1
  46. package/dist/{types-DqVbTzXo.d.ts → types-CLrLfvXz.d.ts} +6 -1
  47. package/dist/{use-org-notification-emails-BL2q3Vf2.d.cts → use-org-notification-emails-CR2PDfjF.d.cts} +19 -4
  48. package/dist/{use-org-notification-emails-BznKD18w.d.ts → use-org-notification-emails-CxBtveF9.d.ts} +19 -4
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schemas/blob-ref.ts","../../src/schemas/shared.ts","../../src/schemas/endorsement-confirmation.ts","../../src/schemas/entity.ts","../../src/schemas/endorsement.ts","../../src/schemas/confirmation.ts","../../src/schemas/org-profile.ts","../../src/schemas/org-employment-attestation.ts","../../src/schemas/graph-follow.ts","../../src/schemas/follow-profile.ts","../../src/schemas/feed.ts","../../src/schemas/profile-certification.ts","../../src/schemas/profile-course.ts","../../src/schemas/profile-education.ts","../../src/schemas/profile-external-account.ts","../../src/schemas/profile-honor.ts","../../src/schemas/profile-project.ts","../../src/schemas/profile-involvement.ts","../../src/schemas/profile-language.ts","../../src/schemas/profile-position.ts","../../src/schemas/profile-presentation.ts","../../src/schemas/profile-presentation-delivery.ts","../../src/schemas/profile-publication.ts","../../src/schemas/profile-self.ts","../../src/schemas/profile-skill.ts","../../src/schemas/profile-volunteering.ts","../../src/schemas/profile-investment.ts"],"names":["z","entityRefField"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * Blob-ref passthrough shared by records that carry an uploaded blob (org logo,\n * presentation cover image, ...). Mirrors the `blobRefSchema` validated by the\n * sifa-api write endpoints -- the shape is validated, then written to the PDS\n * verbatim.\n */\nexport const BlobRefSchema = z.object({\n $type: z.literal('blob'),\n ref: z.object({ $link: z.string().min(1) }),\n mimeType: z.string().min(1).max(255),\n size: z.number().int().nonnegative(),\n});\n\nexport type BlobRef = z.infer<typeof BlobRefSchema>;\n","import { z } from 'zod';\n\n/**\n * Grapheme-aware refinement matching the AT Protocol lexicon `maxGraphemes`\n * constraint. JS strings are sequences of UTF-16 code units, but lexicon\n * `maxGraphemes` counts user-perceived characters (grapheme clusters), so\n * emoji sequences, regional indicators, ZWJ joins, and combining marks all\n * count as one unit each. We use `Intl.Segmenter` to enforce this correctly.\n */\nexport function maxGraphemes(max: number) {\n return (value: string): boolean => {\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n let count = 0;\n for (const _ of segmenter.segment(value)) {\n count++;\n if (count > max) return false;\n }\n return true;\n };\n}\n\n/** Decentralized identifier, AT Protocol `format: did`. */\nexport const didSchema = z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, 'Invalid DID');\n\n/** RFC 3339 datetime with timezone offset, AT Protocol `format: datetime`. */\nexport const datetimeSchema = z.string().datetime({ offset: true });\n\n/**\n * Freeform calendar date for user-facing profile dates (start/end, issued,\n * completed, awarded, published, etc.). Accepts a bare year, year-month,\n * year-month-day, or a full datetime (so a legacy record's RFC-3339 date maps\n * through on backfill without loss). NOT strict `datetime` -- users typically\n * remember only month/year, and LinkedIn-importer writes carry partial dates,\n * so the lexicons document these as freeform `YYYY-MM` / `YYYY-MM-DD`. Record\n * metadata like `createdAt` stays on `datetimeSchema`.\n */\nexport const partialDateSchema = z\n .string()\n .regex(/^\\d{4}(-\\d{2}(-\\d{2}(T.+)?)?)?$/, 'Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime');\n\n/** Generic AT-URI, AT Protocol `format: at-uri`. */\nexport const atUriSchema = z.string().regex(/^at:\\/\\/[^\\s]+$/, 'Invalid AT-URI');\n\n/** Content identifier, AT Protocol `format: cid`. Loose validation -- accepts CIDv0 and CIDv1. */\nexport const cidSchema = z\n .string()\n .regex(/^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[A-Za-z0-9+/=]+)$/, 'Invalid CID');\n\n/** BCP 47 language tag, AT Protocol `format: language`. */\nexport const languageTagSchema = z\n .string()\n .regex(/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/, 'Invalid BCP 47 language tag');\n\n/** Generic URI, AT Protocol `format: uri`. */\nexport const uriSchema = z.string().url();\n\n/**\n * StrongRef shape from `com.atproto.repo.strongRef` -- pins a record by both\n * AT-URI (identity) and CID (version).\n */\nexport const strongRefSchema = z.object({\n uri: atUriSchema,\n cid: cidSchema,\n});\n\n/**\n * Reference to an `id.sifa.profile.skill` record by AT-URI. Mirrors\n * `id.sifa.defs#skillRef`, which carries no CID at all: skills are mutable\n * records in the same user's repo, so the reference resolves live and tracks\n * edits to the target.\n */\nexport const skillRefSchema = z.object({\n uri: atUriSchema,\n});\n\n/**\n * Reference to a record by AT-URI, with an optional CID. Mirrors\n * `id.sifa.defs#externalRecordRef`. Unlike a strongRef the CID is optional:\n * consumers resolve the AT-URI live so the reference tracks edits to the\n * target, and the CID is a best-effort integrity hint only.\n */\nexport const externalRecordRefSchema = z.object({\n uri: atUriSchema,\n cid: cidSchema.optional(),\n});\n\n/**\n * Shared reference to an organization or person named by a record. Mirrors\n * `id.sifa.defs#agentRef`. `name` is a point-in-time snapshot label captured\n * when the record was saved; `did` and `entityRef` are the durable identity and\n * should be resolved live. `name` is required so an empty object cannot validate\n * as a no-op. `.passthrough()` (not `.strict()`): external apps may emit fields a\n * newer schema will define, and dropping them on a round-trip would silently\n * lose data.\n */\nexport const agentRefSchema = z\n .object({\n name: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n did: didSchema.optional(),\n entityRef: uriSchema.optional(),\n })\n .passthrough();\n\nexport type AgentRef = z.infer<typeof agentRefSchema>;\n\n/**\n * Self-labels shape from `com.atproto.label.defs#selfLabels`. Modelled\n * permissively because clients rarely construct this directly; the AppView\n * handles label validation.\n */\nexport const selfLabelsSchema = z.object({\n $type: z.literal('com.atproto.label.defs#selfLabels').optional(),\n values: z.array(z.object({ val: z.string() })),\n});\n","import { z } from 'zod';\n\nimport { datetimeSchema, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement.confirmation` records.\n * Lives in the endorsee's PDS to approve display of an endorsement.\n */\nexport const EndorsementConfirmationRecordSchema = z.object({\n endorsement: strongRefSchema,\n /**\n * Skill record this endorsement applies to. Set when the endorsement proposed\n * a skill: the subject creates the record and links it here, because the\n * endorser cannot write to the subject's repository. Also set when a proposed\n * name matched a skill the subject already had.\n */\n skill: strongRefSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementConfirmationRecord = z.infer<typeof EndorsementConfirmationRecordSchema>;\n","import { z } from 'zod';\n\n/**\n * Organization entity-resolution payloads (#159). Shared by the typeahead,\n * selection, and grow-on-demand import-search endpoints on sifa-api.\n */\n\n/**\n * A nullable string constrained to an http(s) URL. Rejects `javascript:` and\n * other script-bearing schemes at the SDK boundary so a hostile API response\n * cannot smuggle an XSS payload into a rendered `href`/`src`. Note: Wikidata\n * entity URIs are canonically `http://`, so both http and https are allowed.\n */\nconst httpUrlNullable = z\n .string()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'must be an http(s) URL' })\n .nullable();\n\nconst searchResultCommon = {\n kind: z.string(),\n name: z.string(),\n domain: z.string().nullable(),\n country: z.string().nullable(),\n logoUrl: httpUrlNullable,\n parentName: z.string().nullable(),\n};\n\n/**\n * A single typeahead row. Discriminated on `source`: a curated `entity` row\n * carries `entityId`, a `pdl` staging row carries `pdlId`. The union guarantees\n * the identifier for the row's source is always present, so a stable React key\n * can never be `entity:undefined`. The disambiguation fields\n * (domain/country/parentName) drive the dropdown display.\n */\nexport const EntitySearchResultSchema = z.discriminatedUnion('source', [\n z.object({\n source: z.literal('entity'),\n entityId: z.number().int().positive(),\n ...searchResultCommon,\n }),\n z.object({\n source: z.literal('pdl'),\n pdlId: z.string().min(1),\n ...searchResultCommon,\n }),\n]);\nexport type EntitySearchResult = z.infer<typeof EntitySearchResultSchema>;\n\n/** Response of `GET /api/entities/search`. */\nexport const EntitySearchResponseSchema = z.object({\n results: z.array(EntitySearchResultSchema),\n hasMore: z.boolean(),\n});\nexport type EntitySearchResponse = z.infer<typeof EntitySearchResponseSchema>;\n\n/**\n * Body of `POST /api/entities/select`: promote a PDL row OR bump an entity.\n * Exactly one of `entityId`/`pdlId` must be present -- supplying both is\n * ambiguous (the server would have to silently pick one) and is rejected.\n */\nexport const EntitySelectRequestSchema = z\n .object({\n entityId: z.number().int().positive().optional(),\n pdlId: z.string().min(1).optional(),\n })\n .refine((v) => (v.entityId != null) !== (v.pdlId != null), {\n message: 'exactly one of entityId or pdlId is required',\n });\nexport type EntitySelectRequest = z.infer<typeof EntitySelectRequestSchema>;\n\n/** Response of `POST /api/entities/select`. `entityRef` is the portable\n * Wikidata/ROR/LEI URI to write to the position record, or null for a\n * PDL-only entity (its resolution stays AppView-side). */\nexport const EntitySelectResponseSchema = z.object({\n entityId: z.number().int().positive(),\n slug: z.string(),\n kind: z.string(),\n canonicalName: z.string(),\n domain: z.string().nullable(),\n /**\n * The entity's website, gated to sources trustworthy enough to prefill into a\n * record the user signs. Narrower than `domain`, which is a display value and\n * may come from a crawl. Null when the entity has no such source.\n */\n website: httpUrlNullable.default(null),\n /** Which tier `website` came from. Crawled is never an accepted source. */\n websiteTier: z.enum(['org', 'curated']).nullable().default(null),\n entityRef: httpUrlNullable,\n});\nexport type EntitySelectResponse = z.infer<typeof EntitySelectResponseSchema>;\n\n/** Response of `POST /api/entities/import-search`. */\nexport const EntityImportSearchResponseSchema = z.object({\n results: z.array(EntitySearchResultSchema),\n});\nexport type EntityImportSearchResponse = z.infer<typeof EntityImportSearchResponseSchema>;\n\n/**\n * Body of the domain grow-on-demand endpoints (`POST /api/entities/resolve-domain`\n * and `POST /api/entities/mint-domain`). The server re-validates the value as a\n * registrable domain; 253 is the max DNS name length.\n */\nexport const EntityResolveDomainRequestSchema = z.object({\n domain: z.string().min(1).max(253),\n});\nexport type EntityResolveDomainRequest = z.infer<typeof EntityResolveDomainRequestSchema>;\n\n/**\n * Response of `POST /api/entities/resolve-domain` (grow-on-demand Branch 1). Any\n * notable companies whose official website is the domain, imported from Wikidata.\n * `canMint` is true when nothing notable matched AND the domain is eligible for\n * the user-initiated mint-from-domain path -- it drives the \"Add <domain>\"\n * affordance.\n */\nexport const EntityResolveDomainResponseSchema = z.object({\n results: z.array(EntitySearchResultSchema),\n canMint: z.boolean(),\n});\nexport type EntityResolveDomainResponse = z.infer<typeof EntityResolveDomainResponseSchema>;\n\n/**\n * Response of `POST /api/entities/mint-domain` (grow-on-demand Branch 2). The\n * linkable entity minted from (or already resolved for) the domain. A non-2xx\n * status (e.g. the domain is not mintable, a confusable look-alike, or the site\n * yielded nothing usable) surfaces as a thrown error, not a null result.\n *\n * `pending` is true when the entity is a fresh hidden-pending mint: the\n * requesting user's own link resolves to it immediately, but it stays out of\n * other users' typeahead + aggregation until an admin approves it. Clients should\n * reflect this (\"added -- pending review\") rather than \"added & live\".\n */\nexport const EntityMintDomainResponseSchema = z.object({\n result: EntitySearchResultSchema,\n pending: z.boolean(),\n});\nexport type EntityMintDomainResponse = z.infer<typeof EntityMintDomainResponseSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement` records. Lives in the endorser's PDS;\n * the endorser identity is implicit (whoever owns the repository).\n */\nexport const EndorsementRecordSchema = z.object({\n subject: didSchema,\n /**\n * Absent when the endorser is proposing a skill the subject has not listed,\n * named by `skillName`. The record it becomes is linked from the subject's\n * confirmation, since only they can write to their own repository.\n */\n skill: strongRefSchema.optional(),\n skillName: z.string().min(1).refine(maxGraphemes(64)).max(640),\n comment: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementRecord = z.infer<typeof EndorsementRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/**\n * Relations shipped today. The lexicon declares these as `knownValues`, not an\n * enum, so the schema accepts any string: a consumer that meets a relation it\n * does not recognise should still see that the named person affirmed something.\n */\nexport const CONFIRMATION_RELATIONS = [\n 'id.sifa.defs#coSpeaker',\n 'id.sifa.defs#projectMember',\n] as const;\n\nexport type ConfirmationRelation = (typeof CONFIRMATION_RELATIONS)[number];\n\n/**\n * Zod schema for `id.sifa.confirmation` records.\n *\n * The subject strongRef carries no collection constraint by design: one record\n * type affirms a co-speaker credit, a project membership, and whatever\n * people-link relations come next. Resolve it by AT-URI; the CID pins the\n * version seen at confirmation time and is an integrity hint, not a join key,\n * because the claimer editing their record changes its CID without\n * invalidating anything.\n */\nexport const ConfirmationRecordSchema = z.object({\n subject: strongRefSchema,\n relation: z.string().min(1),\n /**\n * Name the subject record carried at confirmation time. Lives in the\n * confirming person's repo, out of the claimer's reach, so a rename after\n * the fact is detectable.\n */\n subjectName: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ConfirmationRecord = z.infer<typeof ConfirmationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, selfLabelsSchema, uriSchema } from './shared.js';\n\n/**\n * Structured physical address for an organization. Mirrors\n * `community.lexicon.location.address` (all fields optional). Sifa enforces\n * ISO 3166-1 alpha-2 country codes at the app layer.\n */\nconst orgAddressSchema = z.object({\n country: z.string().optional(),\n postalCode: z.string().optional(),\n region: z.string().optional(),\n locality: z.string().optional(),\n street: z.string().optional(),\n name: z.string().optional(),\n});\n\n/** A featured link on the org profile. Both `name` and `url` are required. */\nconst orgLinkSchema = z.object({\n name: z.string().refine(maxGraphemes(60)).max(600),\n url: uriSchema.max(2048),\n});\n\n/**\n * Zod schema for `id.sifa.org.profile` records -- the self-declared\n * organization profile. Singleton (record key `self`), lives in the org's PDS.\n * Presence of this record marks the account as presenting as an organization;\n * trust is layered separately (rendering floor, verification labels).\n *\n * Mirrors the lexicon wire shape (grapheme + byte caps, blob logo, uri refs).\n * For the sifa-api write-endpoint contract, use the schemas under\n * `@singi-labs/sifa-sdk/schemas/write` instead.\n */\nexport const OrgProfileRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n /** Blob ref for the org logo (`image/png` | `image/jpeg`). Not deeply validated client-side. */\n logo: z.unknown().optional(),\n website: uriSchema.optional(),\n entityRefs: z.array(uriSchema).max(20).optional(),\n /** Contact email. NOT rendered publicly; validated as email at the app layer. */\n contact: z.string().optional(),\n /** Physical addresses (headquarters, offices). */\n addresses: z.array(orgAddressSchema).max(10).optional(),\n /**\n * Self-selected headcount range (a declared bucket, never a calculated count).\n * Open enum (bare-string knownValues in the lexicon): `1-10`, `11-50`,\n * `51-200`, `201-500`, `501-1000`, `1001-5000`, `5001-10000`, `10001+`. Any\n * string is accepted so future ranges do not break older records.\n */\n companySize: z.string().optional(),\n /** Featured links or content surfaced on the org profile. */\n links: z.array(orgLinkSchema).max(10).optional(),\n /**\n * Whether the account holder's personal profile stays visible alongside this\n * org profile. For sole traders whose personal domain is also their trade\n * name: one account, two facets, both pages render. Absent or false means the\n * account presents solely as an organization.\n */\n personalProfileVisible: z.boolean().optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type OrgProfileRecord = z.infer<typeof OrgProfileRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n} from './shared.js';\n\n/**\n * Zod schema for `id.sifa.org.employmentAttestation` records -- an\n * organization's attestation that a person is or was employed in a specific\n * position. Lives in the org's PDS (the org is implicit: whoever owns the repo).\n *\n * The position identity is pinned via a snapshot triple (`title`, `startedAt`,\n * and the entity identifier `entityRef` | `companyDid`) so editing those pinned\n * fields on the referenced position record voids the attestation. The free-text\n * company name is never pinned (a rebrand must not invalidate the attestation).\n *\n * `startedAt` / `endedAt` mirror the position lexicon's freeform `YYYY-MM` /\n * `YYYY-MM-DD` date shape, not strict `datetime`.\n */\nexport const OrgEmploymentAttestationRecordSchema = z.object({\n subject: didSchema,\n position: strongRefSchema,\n status: z.enum(['current', 'past']),\n title: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n startedAt: partialDateSchema,\n entityRef: uriSchema.optional(),\n companyDid: didSchema.optional(),\n endedAt: partialDateSchema.optional(),\n comment: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type OrgEmploymentAttestationRecord = z.infer<typeof OrgEmploymentAttestationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.graph.follow` records.\n *\n * One-way professional follow; the record lives in the follower's PDS. Per\n * iter-1 decisions (`plans/2026-06-01-in-sifa-follow-primitive.md`), this is\n * a **distinct** graph from `app.bsky.graph.follow`, not a superset — but\n * the required field shape (`subject` + `createdAt`) is intentionally\n * identical so generic Bluesky `listRecords` consumers get usable records.\n *\n * `note` is a Sifa addition: an optional reason for the follow (\"why I\n * followed\"). Capped at 200 graphemes to match other profile-flavored\n * lexicon fields.\n */\nexport const GraphFollowRecordSchema = z.object({\n subject: didSchema,\n createdAt: datetimeSchema,\n note: z.string().refine(maxGraphemes(200), 'note must be at most 200 graphemes').optional(),\n});\n\nexport type GraphFollowRecord = z.infer<typeof GraphFollowRecordSchema>;\n\n/**\n * Build a `GraphFollowRecordSchema` that rejects self-follow at the Zod\n * layer (CLAUDE.md mandatory standards #3 — input validation; sifa-api#673\n * E8 — defence in depth).\n *\n * Use this on the **client side** when constructing a new follow record\n * (the follower DID is the authenticated user). The plain\n * {@link GraphFollowRecordSchema} stays without the refine so firehose\n * consumers can validate records without context.\n */\nexport function makeGraphFollowRecordSchema(followerDid: string) {\n return GraphFollowRecordSchema.refine((record) => record.subject !== followerDid, {\n message: 'Self-follow is not allowed',\n path: ['subject'],\n });\n}\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema } from './shared.js';\n\n/**\n * Profile row shared across `/api/following`, `/api/profile/:handleOrDid/mutuals`,\n * and `/api/me/bluesky-suggestions`. Matches the existing `FollowProfile` TS\n * interface byte-for-byte but adds runtime validation for the SDK's pagination\n * helpers and the upcoming `sifa-app` consumer (where we can't trust the wire).\n *\n * Per `sifa-api#674` PR body: mutuals + bluesky-suggestions reuse this shape\n * exactly, so a single Zod schema covers all three endpoints.\n */\nexport const FollowProfileSchema = z.object({\n did: didSchema,\n handle: z.string(),\n displayName: z.string().optional(),\n headline: z.string().optional(),\n avatarUrl: z.string().optional(),\n source: z.string(),\n claimed: z.boolean(),\n followedAt: datetimeSchema,\n blueskyVerified: z.boolean().optional(),\n blueskyVerifiedAt: datetimeSchema.nullable().optional(),\n});\n\nexport type FollowProfileItem = z.infer<typeof FollowProfileSchema>;\n\n/**\n * Cursor-paginated page of {@link FollowProfileSchema} rows. Used by mutuals\n * + bluesky-suggestions. The legacy `/api/following` endpoint uses a different\n * wrapper key (`follows` instead of `items`) and is intentionally NOT covered\n * by this schema.\n */\nexport const FollowProfilePageSchema = z.object({\n items: z.array(FollowProfileSchema),\n cursor: z.string().nullable(),\n});\n\nexport type FollowProfilePage = z.infer<typeof FollowProfilePageSchema>;\n\n/**\n * Per-flag allowlist row returned by `GET /api/admin/feature-allowlists/:flag`.\n * Mirrors the `feature_allowlists` table; `note` is optional free-form text.\n */\nexport const FeatureAllowlistEntrySchema = z.object({\n did: didSchema,\n addedAt: datetimeSchema,\n note: z.string().nullable().optional(),\n});\n\nexport type FeatureAllowlistEntry = z.infer<typeof FeatureAllowlistEntrySchema>;\n\n/**\n * Known feature flags accepted by the admin allowlist endpoints. Mirrors the\n * server-side `FEATURE_FLAGS` const in `sifa-api`. Kept as a `const` tuple so\n * consumers can `as const`-narrow when building UIs.\n */\nexport const FEATURE_FLAGS = ['FEED_V5_ENABLED'] as const;\nexport type FeatureFlag = (typeof FEATURE_FLAGS)[number];\n","import { z } from 'zod';\n\nimport { atUriSchema, cidSchema, datetimeSchema, didSchema } from './shared.js';\n\n/**\n * Feed item from `GET /api/following/feed`. Discriminated on `source`:\n *\n * - `sifa`: a Sifa-native event (e.g. profile update, endorsement).\n * - `atmosphere`: a curated creation event from another ATproto app\n * (Barazo post, etc.). Payload is the hydrated `app.bsky.embed.*#view`\n * shape, NOT the raw record (per memory `sifa-hydrated-view-embed-types`).\n *\n * Both variants share `actor`, `indexedAt`, and `id` (the materialized\n * `feed_events.id` row identifier, used in the cursor).\n */\nexport const FeedActorSchema = z.object({\n did: didSchema,\n handle: z.string(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n});\n\nexport type FeedActor = z.infer<typeof FeedActorSchema>;\n\nconst FeedItemBaseSchema = z.object({\n id: z.string(),\n actor: FeedActorSchema,\n indexedAt: datetimeSchema,\n eventType: z.string(),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const SifaFeedItemSchema = FeedItemBaseSchema.extend({\n source: z.literal('sifa'),\n appId: z.literal('sifa').optional(),\n payload: z.record(z.string(), z.unknown()),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type SifaFeedItem = z.infer<typeof SifaFeedItemSchema>;\n\n/**\n * ATmosphere feed item. `payload` is intentionally permissive: it carries\n * a hydrated `app.bsky.embed.*#view` shape that varies by source app. The\n * AppView resolves the hydration; clients render via the existing\n * embed-view union (mirrors `sifa-web/src/components/stream/`).\n *\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const AtmosphereFeedItemSchema = FeedItemBaseSchema.extend({\n source: z.literal('atmosphere'),\n appId: z.string(),\n uri: atUriSchema.optional(),\n cid: cidSchema.optional(),\n payload: z.record(z.string(), z.unknown()),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type AtmosphereFeedItem = z.infer<typeof AtmosphereFeedItemSchema>;\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const FollowFeedItemSchema = z.discriminatedUnion('source', [\n SifaFeedItemSchema,\n AtmosphereFeedItemSchema,\n]);\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type FollowFeedItem = z.infer<typeof FollowFeedItemSchema>;\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const FollowFeedPageSchema = z.object({\n items: z.array(FollowFeedItemSchema),\n cursor: z.string().nullable(),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type FollowFeedPage = z.infer<typeof FollowFeedPageSchema>;\n\n/**\n * Composite feed cursor `(indexedAt DESC, source, id)`. Encoded as a\n * URL-safe base64 string so it survives `URLSearchParams` round-trips\n * without further encoding. Decoupling encode/decode from the API call\n * lets consumers persist cursors (e.g. for \"jump-back-here\" UX) and\n * lets us unit-test the format.\n */\nexport interface FeedCursor {\n indexedAt: string;\n source: 'sifa' | 'atmosphere';\n id: string;\n}\n\nconst FeedCursorSchema = z.object({\n indexedAt: datetimeSchema,\n source: z.union([z.literal('sifa'), z.literal('atmosphere')]),\n id: z.string().min(1),\n});\n\ninterface BufferLike {\n from: (input: string, encoding: 'utf-8' | 'base64') => { toString: (encoding: string) => string };\n}\n\ninterface Base64Global {\n btoa?: (input: string) => string;\n atob?: (input: string) => string;\n Buffer?: BufferLike;\n}\n\nfunction toBase64Url(input: string): string {\n const g = globalThis as unknown as Base64Global;\n const b64: string =\n typeof g.btoa === 'function'\n ? g.btoa(unescape(encodeURIComponent(input)))\n : (g.Buffer as BufferLike).from(input, 'utf-8').toString('base64');\n // Strip up to 2 trailing '=' (base64 padding). CodeQL flags `/=+$/` as a\n // polynomial regex on tainted input; we don't accept tainted input here,\n // but the deterministic loop sidesteps the alert.\n let end = b64.length;\n while (end > 0 && b64.charCodeAt(end - 1) === 61) end--;\n return b64.slice(0, end).replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\nfunction fromBase64Url(input: string): string {\n const padded = input.replace(/-/g, '+').replace(/_/g, '/') + '==='.slice((input.length + 3) % 4);\n const g = globalThis as unknown as Base64Global;\n if (typeof g.atob === 'function') {\n return decodeURIComponent(escape(g.atob(padded)));\n }\n return (g.Buffer as BufferLike).from(padded, 'base64').toString('utf-8');\n}\n\nexport function encodeFeedCursor(cursor: FeedCursor): string {\n return toBase64Url(JSON.stringify(cursor));\n}\n\nexport function decodeFeedCursor(encoded: string): FeedCursor {\n const json = fromBase64Url(encoded);\n const parsed: unknown = JSON.parse(json);\n return FeedCursorSchema.parse(parsed);\n}\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n uriSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.certification` records. */\nexport const ProfileCertificationRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n authority: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n authorityDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n credentialId: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n credentialUrl: uriSchema.optional(),\n issuedAt: partialDateSchema.optional(),\n expiresAt: partialDateSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCertificationRecord = z.infer<typeof ProfileCertificationRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n atUriSchema,\n datetimeSchema,\n maxGraphemes,\n partialDateSchema,\n strongRefSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.course` records. */\nexport const ProfileCourseRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n number: z.string().refine(maxGraphemes(50)).max(500).optional(),\n institution: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n education: strongRefSchema.optional(),\n // AT-URI of the associated id.sifa.profile.certification record. Plain\n // at-uri (not a strongRef) so the link tracks the live certification.\n credential: atUriSchema.optional(),\n completedAt: partialDateSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCourseRecord = z.infer<typeof ProfileCourseRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.education` records. */\nexport const ProfileEducationRecordSchema = z.object({\n institution: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n institutionDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n degree: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n fieldOfStudy: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n grade: z.string().refine(maxGraphemes(50)).max(500).optional(),\n activities: z.string().refine(maxGraphemes(1000)).max(10000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n location: z.unknown().optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileEducationRecord = z.infer<typeof ProfileEducationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.externalAccount` records.\n *\n * `platform` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#platform*` but unknown values are accepted.\n */\nexport const ProfileExternalAccountRecordSchema = z.object({\n platform: z.string(),\n url: uriSchema,\n label: z.string().refine(maxGraphemes(64)).max(640).optional(),\n feedUrl: uriSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileExternalAccountRecord = z.infer<typeof ProfileExternalAccountRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, partialDateSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.honor` records. */\nexport const ProfileHonorRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n issuer: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n issuerDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n awardedAt: partialDateSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileHonorRecord = z.infer<typeof ProfileHonorRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n externalRecordRefSchema,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n} from './shared.js';\n\n/**\n * A person named as a member of a project. Mirrors `id.sifa.defs#projectMemberRef`.\n *\n * A claim by the record author, not a fact: the named person carries a display\n * name, avatar, and profile link only once they publish a matching\n * `id.sifa.confirmation`. `role` is display only, since a record living in\n * someone else's repository cannot grant write access to anything.\n */\nexport const projectMemberRefSchema = z.object({\n did: didSchema,\n role: z.string().optional(),\n title: z.string().refine(maxGraphemes(128)).max(1280).optional(),\n});\n\nexport type ProjectMemberRef = z.infer<typeof projectMemberRefSchema>;\n\n/** Zod schema for `id.sifa.profile.project` records. */\nexport const ProfileProjectRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n url: uriSchema.optional(),\n members: z.array(projectMemberRefSchema).max(50).optional(),\n /**\n * The canonical `id.sifa.project.self` this personal entry corresponds to.\n * A composition link. For the same project recorded on someone else's\n * profile, see `sameAs`.\n */\n projectRef: strongRefSchema.optional(),\n /**\n * The same project as recorded on another person's profile. Each side stays\n * its own record; this only says the two describe one thing. Resolves by\n * AT-URI, since they will keep editing their copy.\n */\n sameAs: externalRecordRefSchema.optional(),\n position: strongRefSchema.optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileProjectRecord = z.infer<typeof ProfileProjectRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n externalRecordRefSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n uriSchema,\n} from './shared.js';\nimport { projectMemberRefSchema } from './profile-project.js';\n\n/** Collection NSID for involvement records. Pass to the generic record helpers. */\nexport const PROFILE_INVOLVEMENT_NSID = 'id.sifa.profile.involvement';\n\n/**\n * A public artifact proving a piece of work. Mirrors `id.sifa.defs#artifactLink`.\n * `kind` is an open enum (bare-string knownValues), so any string is accepted.\n * `.passthrough()` keeps unknown fields a newer client or co-writer may emit.\n */\nexport const ArtifactLinkSchema = z\n .object({\n url: uriSchema,\n kind: z.string().optional(),\n label: z.string().refine(maxGraphemes(200)).max(2000).optional(),\n })\n .passthrough();\n\nexport type ArtifactLink = z.infer<typeof ArtifactLinkSchema>;\n\n/**\n * Zod schema for `id.sifa.profile.involvement` records.\n *\n * `.passthrough()` (not `.strict()`): external apps (Verak, weareonhire)\n * co-write `id.sifa.*`, so an older SDK must not reject a record carrying a\n * field it doesn't know yet. `kind` is an open enum matching the lexicon's\n * knownValues but accepting any string for the same forward-compat reason.\n */\nexport const ProfileInvolvementRecordSchema = z\n .object({\n kind: z.string(),\n upstream: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n upstreamDid: didSchema.optional(),\n upstreamUrl: uriSchema.optional(),\n role: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n links: z.array(ArtifactLinkSchema).max(50).optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the resolver\n // typeahead, constrained to http(s) so a script scheme is never a valid ref.\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n // community.lexicon.location.address — validated at the app layer.\n location: z.unknown().optional(),\n // id.sifa.defs#skillRef references (at-uri to a skill record in the same repo).\n skills: z\n .array(z.object({ uri: z.string() }))\n .max(50)\n .optional(),\n labels: selfLabelsSchema.optional(),\n collaborators: z.array(projectMemberRefSchema).max(50).optional(),\n sameAs: externalRecordRefSchema.optional(),\n createdAt: datetimeSchema,\n })\n .passthrough();\n\nexport type ProfileInvolvementRecord = z.infer<typeof ProfileInvolvementRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.language` records.\n *\n * `proficiency` is advisory (`knownValues` in the lexicon) -- known values\n * are the five-level LinkedIn-compatible scale under `id.sifa.defs#*`.\n */\nexport const ProfileLanguageRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n proficiency: z.string().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileLanguageRecord = z.infer<typeof ProfileLanguageRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n skillRefSchema,\n} from './shared.js';\n\n// Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n// Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n// Shared by the two entity references on a position so the scheme check cannot\n// drift between them.\nconst entityRefField = z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional();\n\n/** Zod schema for `id.sifa.profile.position` records. */\nexport const ProfilePositionRecordSchema = z\n .object({\n company: z.string().min(1).refine(maxGraphemes(100)).max(1000).optional(),\n companyDid: didSchema.optional(),\n entityRef: entityRefField,\n title: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n employmentType: z.string().optional(),\n // Disclosure that the role is held as someone else's representative -- most often\n // a fund whose board seat this is. Capped at the lexicon's 256 graphemes rather\n // than the tighter limit used for `company`: a schema stricter than the lexicon\n // would reject records other clients can legally write.\n onBehalfOf: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n // May resolve to an organization or to a person (a family-office principal); a DID\n // does not distinguish the two, so this stays permissive.\n onBehalfOfDid: didSchema.optional(),\n onBehalfOfEntityRef: entityRefField,\n workplaceType: z.string().optional(),\n location: z.unknown().optional(),\n startedAt: partialDateSchema,\n endedAt: partialDateSchema.optional(),\n // id.sifa.defs#skillRef -- at-uri only, no cid. Skills are mutable records\n // in the same repo, so the ref resolves live rather than pinning a version.\n skills: z.array(skillRefSchema).max(50).optional(),\n isPrimary: z.boolean().optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n })\n .passthrough();\n\nexport type ProfilePositionRecord = z.infer<typeof ProfilePositionRecordSchema>;\n","import { z } from 'zod';\n\nimport { BlobRefSchema } from './blob-ref.js';\nimport { datetimeSchema, externalRecordRefSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/**\n * Duration of a presentation, in minutes. Mirrors\n * `id.sifa.profile.presentation#duration`: a fixed length (minMinutes only) or\n * a range (minMinutes to maxMinutes).\n */\nexport const PresentationDurationSchema = z\n .object({\n minMinutes: z.number().int().min(1),\n maxMinutes: z.number().int().min(1).optional(),\n })\n .refine((d) => d.maxMinutes === undefined || d.maxMinutes >= d.minMinutes, {\n message: 'maxMinutes must be greater than or equal to minMinutes',\n path: ['maxMinutes'],\n });\n\nexport type PresentationDuration = z.infer<typeof PresentationDurationSchema>;\n\n/**\n * A related link for a presentation or one of its deliveries. Mirrors\n * `id.sifa.defs#presentationLink`. `type` is an open enum (knownValues), so any\n * string is accepted.\n */\nexport const PresentationLinkSchema = z.object({\n uri: uriSchema,\n label: z.string().refine(maxGraphemes(64)).max(640).optional(),\n type: z.string().optional(),\n});\n\nexport type PresentationLink = z.infer<typeof PresentationLinkSchema>;\n\n/** Zod schema for `id.sifa.profile.presentation` records (the reusable content). */\nexport const ProfilePresentationRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(300)).max(3000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n duration: PresentationDurationSchema.optional(),\n intendedAudiences: z\n .array(z.string().refine(maxGraphemes(100)).max(1000))\n .max(20)\n .optional(),\n links: z.array(PresentationLinkSchema).max(20).optional(),\n // Optional reference to a long-form write-up (pub.leaflet.document or\n // site.standard.document). Plain at-uri + optional cid so it tracks edits.\n writeupRef: externalRecordRefSchema.optional(),\n // Optional uploaded cover image for the talk page.\n coverImage: BlobRefSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePresentationRecord = z.infer<typeof ProfilePresentationRecordSchema>;\n","import { z } from 'zod';\n\nimport { PresentationLinkSchema } from './profile-presentation.js';\nimport { datetimeSchema, externalRecordRefSchema, maxGraphemes } from './shared.js';\n\n/**\n * Structured address for a delivery occasion. Mirrors\n * `community.lexicon.location.address` (all fields optional).\n */\nconst communityAddressSchema = z.object({\n country: z.string().optional(),\n postalCode: z.string().optional(),\n region: z.string().optional(),\n locality: z.string().optional(),\n street: z.string().optional(),\n name: z.string().optional(),\n});\n\n/**\n * Zod schema for `id.sifa.profile.presentationDelivery` records (one occasion\n * on which a presentation was delivered). Works standalone or linked to a\n * presentation and/or a calendar event. `role`, `mode`, and `status` are open\n * enums (knownValues); `mode`/`status` store the full\n * `community.lexicon.calendar.event` token.\n */\nexport const ProfilePresentationDeliveryRecordSchema = z.object({\n // Optional reference to the id.sifa.profile.presentation delivered here.\n presentationRef: externalRecordRefSchema.optional(),\n // Fallback title used when there is no presentationRef.\n title: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n role: z.string().refine(maxGraphemes(64)).max(640).optional(),\n eventName: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n // Calendar date as YYYY-MM-DD (day only).\n date: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'date must be YYYY-MM-DD')\n .optional(),\n location: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n // Structured community.lexicon.location.address for the occasion. The\n // free-text `location` string above stays as a legacy fallback.\n address: communityAddressSchema.optional(),\n mode: z.string().optional(),\n status: z.string().optional(),\n links: z.array(PresentationLinkSchema).max(20).optional(),\n // Optional reference to a community.lexicon.calendar.event for this occasion.\n eventRef: externalRecordRefSchema.optional(),\n // DIDs of co-speakers who presented alongside the author at this occasion.\n coSpeakers: z\n .array(z.string().regex(/^did:[a-z]+:[^\\s]+$/, 'must be a DID'))\n .max(20)\n .optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePresentationDeliveryRecord = z.infer<\n typeof ProfilePresentationDeliveryRecordSchema\n>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, partialDateSchema, uriSchema } from './shared.js';\n\n/** Author shape from `id.sifa.profile.publication#author`. */\nexport const PublicationAuthorSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n did: didSchema.optional(),\n});\n\nexport type PublicationAuthor = z.infer<typeof PublicationAuthorSchema>;\n\n/** Zod schema for `id.sifa.profile.publication` records. */\nexport const ProfilePublicationRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n subtitle: z.string().refine(maxGraphemes(200)).max(2000).optional(),\n publisher: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n url: uriSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n authors: z.array(PublicationAuthorSchema).max(50).optional(),\n publishedAt: partialDateSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePublicationRecord = z.infer<typeof ProfilePublicationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, languageTagSchema, maxGraphemes, selfLabelsSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.self` records. Singleton (record key `self`).\n *\n * `knownValues` on `openTo` and `preferredWorkplace` are advisory per the\n * lexicon spec -- unknown values are allowed, but documented options live\n * under the `id.sifa.defs#*` namespace.\n */\nexport const ProfileSelfRecordSchema = z.object({\n headline: z.string().refine(maxGraphemes(120)).max(1200).optional(),\n about: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n industry: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n givenName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n familyName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n namePronunciation: z.string().refine(maxGraphemes(64)).max(640).optional(),\n location: z.unknown().optional(),\n openTo: z.array(z.string()).max(10).optional(),\n preferredWorkplace: z.array(z.string()).max(3).optional(),\n langs: z.array(languageTagSchema).max(3).optional(),\n labels: selfLabelsSchema.optional(),\n discoverable: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSelfRecord = z.infer<typeof ProfileSelfRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.skill` records.\n *\n * `category` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#*` but unknown values are accepted. `subCategory` is a\n * freeform user-defined grouping label nested under `category` (no known\n * values); renderers decide its display label.\n */\nexport const ProfileSkillRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n category: z.string().optional(),\n subCategory: z.string().refine(maxGraphemes(64)).max(640).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSkillRecord = z.infer<typeof ProfileSkillRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, partialDateSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.volunteering` records. */\nexport const ProfileVolunteeringRecordSchema = z.object({\n organization: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n organizationDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n role: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n cause: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileVolunteeringRecord = z.infer<typeof ProfileVolunteeringRecordSchema>;\n","import { z } from 'zod';\n\nimport { ArtifactLinkSchema } from './profile-involvement.js';\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n} from './shared.js';\n\n// Portable entity identifier (Wikidata/ROR/LEI URI) from the typeahead. Constrained\n// to http(s) so a script-bearing scheme is never a valid ref (#159). An investment\n// carries two of these -- the company and the vehicle -- so the check is shared.\nconst entityRefField = z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional();\n\n/**\n * A deliberately structured amount. Free text was rejected here: an unparseable\n * money string is worse than no amount at all, and cannot be repaired once people\n * have written them.\n */\nexport const InvestmentAmountSchema = z.object({\n /** Whole major currency units (euros, not cents). Cheque sizes are round numbers. */\n value: z.number().int().min(0),\n /** ISO 4217 three-letter code, uppercase. */\n currency: z.string().length(3),\n});\n\n/** Collection NSID for investment records. */\nexport const PROFILE_INVESTMENT_NSID = 'id.sifa.profile.investment';\n\n/** Zod schema for `id.sifa.profile.investment` records. */\nexport const ProfileInvestmentRecordSchema = z\n .object({\n /** For a limited-partner entry this names the fund, not a portfolio company. */\n company: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n companyDid: didSchema.optional(),\n entityRef: entityRefField,\n role: z.string().optional(),\n stage: z.string().optional(),\n status: z.string().optional(),\n /** The vehicle the capital went through. Absent for a cheque in the person's own name. */\n via: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n viaDid: didSchema.optional(),\n viaEntityRef: entityRefField,\n /**\n * Optional and empty by default. Cheque size is a personal financial disclosure,\n * and clients must not prompt for it.\n */\n amount: InvestmentAmountSchema.optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n links: z.array(ArtifactLinkSchema).max(50).optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n })\n .passthrough();\n\nexport type ProfileInvestmentRecord = z.infer<typeof ProfileInvestmentRecordSchema>;\n"]}
1
+ {"version":3,"sources":["../../src/schemas/blob-ref.ts","../../src/schemas/shared.ts","../../src/schemas/endorsement-confirmation.ts","../../src/schemas/entity.ts","../../src/schemas/endorsement.ts","../../src/schemas/confirmation.ts","../../src/schemas/org-profile.ts","../../src/schemas/org-employment-attestation.ts","../../src/schemas/graph-follow.ts","../../src/schemas/follow-profile.ts","../../src/schemas/feed.ts","../../src/schemas/profile-certification.ts","../../src/schemas/profile-course.ts","../../src/schemas/profile-education.ts","../../src/schemas/profile-external-account.ts","../../src/schemas/profile-honor.ts","../../src/schemas/profile-project.ts","../../src/schemas/profile-involvement.ts","../../src/schemas/profile-language.ts","../../src/schemas/profile-position.ts","../../src/schemas/profile-presentation.ts","../../src/schemas/profile-presentation-delivery.ts","../../src/schemas/profile-publication.ts","../../src/schemas/profile-self.ts","../../src/schemas/profile-skill.ts","../../src/schemas/profile-volunteering.ts","../../src/schemas/profile-investment.ts"],"names":["z","entityRefField"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * Blob-ref passthrough shared by records that carry an uploaded blob (org logo,\n * presentation cover image, ...). Mirrors the `blobRefSchema` validated by the\n * sifa-api write endpoints -- the shape is validated, then written to the PDS\n * verbatim.\n */\nexport const BlobRefSchema = z.object({\n $type: z.literal('blob'),\n ref: z.object({ $link: z.string().min(1) }),\n mimeType: z.string().min(1).max(255),\n size: z.number().int().nonnegative(),\n});\n\nexport type BlobRef = z.infer<typeof BlobRefSchema>;\n","import { z } from 'zod';\n\n/**\n * Grapheme-aware refinement matching the AT Protocol lexicon `maxGraphemes`\n * constraint. JS strings are sequences of UTF-16 code units, but lexicon\n * `maxGraphemes` counts user-perceived characters (grapheme clusters), so\n * emoji sequences, regional indicators, ZWJ joins, and combining marks all\n * count as one unit each. We use `Intl.Segmenter` to enforce this correctly.\n */\nexport function maxGraphemes(max: number) {\n return (value: string): boolean => {\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n let count = 0;\n for (const _ of segmenter.segment(value)) {\n count++;\n if (count > max) return false;\n }\n return true;\n };\n}\n\n/** Decentralized identifier, AT Protocol `format: did`. */\nexport const didSchema = z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, 'Invalid DID');\n\n/** RFC 3339 datetime with timezone offset, AT Protocol `format: datetime`. */\nexport const datetimeSchema = z.string().datetime({ offset: true });\n\n/**\n * Freeform calendar date for user-facing profile dates (start/end, issued,\n * completed, awarded, published, etc.). Accepts a bare year, year-month,\n * year-month-day, or a full datetime (so a legacy record's RFC-3339 date maps\n * through on backfill without loss). NOT strict `datetime` -- users typically\n * remember only month/year, and LinkedIn-importer writes carry partial dates,\n * so the lexicons document these as freeform `YYYY-MM` / `YYYY-MM-DD`. Record\n * metadata like `createdAt` stays on `datetimeSchema`.\n */\nexport const partialDateSchema = z\n .string()\n .regex(/^\\d{4}(-\\d{2}(-\\d{2}(T.+)?)?)?$/, 'Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime');\n\n/** Generic AT-URI, AT Protocol `format: at-uri`. */\nexport const atUriSchema = z.string().regex(/^at:\\/\\/[^\\s]+$/, 'Invalid AT-URI');\n\n/** Content identifier, AT Protocol `format: cid`. Loose validation -- accepts CIDv0 and CIDv1. */\nexport const cidSchema = z\n .string()\n .regex(/^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[A-Za-z0-9+/=]+)$/, 'Invalid CID');\n\n/** BCP 47 language tag, AT Protocol `format: language`. */\nexport const languageTagSchema = z\n .string()\n .regex(/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/, 'Invalid BCP 47 language tag');\n\n/** Generic URI, AT Protocol `format: uri`. */\nexport const uriSchema = z.string().url();\n\n/**\n * StrongRef shape from `com.atproto.repo.strongRef` -- pins a record by both\n * AT-URI (identity) and CID (version).\n */\nexport const strongRefSchema = z.object({\n uri: atUriSchema,\n cid: cidSchema,\n});\n\n/**\n * Reference to an `id.sifa.profile.skill` record by AT-URI. Mirrors\n * `id.sifa.defs#skillRef`, which carries no CID at all: skills are mutable\n * records in the same user's repo, so the reference resolves live and tracks\n * edits to the target.\n */\nexport const skillRefSchema = z.object({\n uri: atUriSchema,\n});\n\n/**\n * Reference to a record by AT-URI, with an optional CID. Mirrors\n * `id.sifa.defs#externalRecordRef`. Unlike a strongRef the CID is optional:\n * consumers resolve the AT-URI live so the reference tracks edits to the\n * target, and the CID is a best-effort integrity hint only.\n */\nexport const externalRecordRefSchema = z.object({\n uri: atUriSchema,\n cid: cidSchema.optional(),\n});\n\n/**\n * Shared reference to an organization or person named by a record. Mirrors\n * `id.sifa.defs#agentRef`. `name` is a point-in-time snapshot label captured\n * when the record was saved; `did` and `entityRef` are the durable identity and\n * should be resolved live. `name` is required so an empty object cannot validate\n * as a no-op. `.passthrough()` (not `.strict()`): external apps may emit fields a\n * newer schema will define, and dropping them on a round-trip would silently\n * lose data.\n */\nexport const agentRefSchema = z\n .object({\n name: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n did: didSchema.optional(),\n entityRef: uriSchema.optional(),\n })\n .passthrough();\n\nexport type AgentRef = z.infer<typeof agentRefSchema>;\n\n/**\n * Self-labels shape from `com.atproto.label.defs#selfLabels`. Modelled\n * permissively because clients rarely construct this directly; the AppView\n * handles label validation.\n */\nexport const selfLabelsSchema = z.object({\n $type: z.literal('com.atproto.label.defs#selfLabels').optional(),\n values: z.array(z.object({ val: z.string() })),\n});\n","import { z } from 'zod';\n\nimport { datetimeSchema, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement.confirmation` records.\n * Lives in the endorsee's PDS to approve display of an endorsement.\n */\nexport const EndorsementConfirmationRecordSchema = z.object({\n endorsement: strongRefSchema,\n /**\n * Skill record this endorsement applies to. Set when the endorsement proposed\n * a skill: the subject creates the record and links it here, because the\n * endorser cannot write to the subject's repository. Also set when a proposed\n * name matched a skill the subject already had.\n */\n skill: strongRefSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementConfirmationRecord = z.infer<typeof EndorsementConfirmationRecordSchema>;\n","import { z } from 'zod';\n\n/**\n * Organization entity-resolution payloads (#159). Shared by the typeahead,\n * selection, and grow-on-demand import-search endpoints on sifa-api.\n */\n\n/**\n * A nullable string constrained to an http(s) URL. Rejects `javascript:` and\n * other script-bearing schemes at the SDK boundary so a hostile API response\n * cannot smuggle an XSS payload into a rendered `href`/`src`. Note: Wikidata\n * entity URIs are canonically `http://`, so both http and https are allowed.\n */\nconst httpUrlNullable = z\n .string()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'must be an http(s) URL' })\n .nullable();\n\nconst searchResultCommon = {\n kind: z.string(),\n name: z.string(),\n domain: z.string().nullable(),\n country: z.string().nullable(),\n logoUrl: httpUrlNullable,\n parentName: z.string().nullable(),\n};\n\n/**\n * A single typeahead row. Discriminated on `source`: a curated `entity` row\n * carries `entityId`, a `pdl` staging row carries `pdlId`. The union guarantees\n * the identifier for the row's source is always present, so a stable React key\n * can never be `entity:undefined`. The disambiguation fields\n * (domain/country/parentName) drive the dropdown display.\n */\nexport const EntitySearchResultSchema = z.discriminatedUnion('source', [\n z.object({\n source: z.literal('entity'),\n entityId: z.number().int().positive(),\n ...searchResultCommon,\n }),\n z.object({\n source: z.literal('pdl'),\n pdlId: z.string().min(1),\n ...searchResultCommon,\n }),\n]);\nexport type EntitySearchResult = z.infer<typeof EntitySearchResultSchema>;\n\n/** Response of `GET /api/entities/search`. */\nexport const EntitySearchResponseSchema = z.object({\n results: z.array(EntitySearchResultSchema),\n hasMore: z.boolean(),\n});\nexport type EntitySearchResponse = z.infer<typeof EntitySearchResponseSchema>;\n\n/**\n * Body of `POST /api/entities/select`: promote a PDL row OR bump an entity.\n * Exactly one of `entityId`/`pdlId` must be present -- supplying both is\n * ambiguous (the server would have to silently pick one) and is rejected.\n */\nexport const EntitySelectRequestSchema = z\n .object({\n entityId: z.number().int().positive().optional(),\n pdlId: z.string().min(1).optional(),\n })\n .refine((v) => (v.entityId != null) !== (v.pdlId != null), {\n message: 'exactly one of entityId or pdlId is required',\n });\nexport type EntitySelectRequest = z.infer<typeof EntitySelectRequestSchema>;\n\n/** Response of `POST /api/entities/select`. `entityRef` is the portable\n * Wikidata/ROR/LEI URI to write to the position record, or null for a\n * PDL-only entity (its resolution stays AppView-side). */\nexport const EntitySelectResponseSchema = z.object({\n entityId: z.number().int().positive(),\n slug: z.string(),\n kind: z.string(),\n canonicalName: z.string(),\n domain: z.string().nullable(),\n /**\n * The entity's website, gated to sources trustworthy enough to prefill into a\n * record the user signs. Narrower than `domain`, which is a display value and\n * may come from a crawl. Null when the entity has no such source.\n */\n website: httpUrlNullable.default(null),\n /** Which tier `website` came from. Crawled is never an accepted source. */\n websiteTier: z.enum(['org', 'curated']).nullable().default(null),\n entityRef: httpUrlNullable,\n});\nexport type EntitySelectResponse = z.infer<typeof EntitySelectResponseSchema>;\n\n/** Response of `POST /api/entities/import-search`. */\nexport const EntityImportSearchResponseSchema = z.object({\n results: z.array(EntitySearchResultSchema),\n});\nexport type EntityImportSearchResponse = z.infer<typeof EntityImportSearchResponseSchema>;\n\n/**\n * Body of the domain grow-on-demand endpoints (`POST /api/entities/resolve-domain`\n * and `POST /api/entities/mint-domain`). The server re-validates the value as a\n * registrable domain; 253 is the max DNS name length.\n */\nexport const EntityResolveDomainRequestSchema = z.object({\n domain: z.string().min(1).max(253),\n});\nexport type EntityResolveDomainRequest = z.infer<typeof EntityResolveDomainRequestSchema>;\n\n/**\n * Response of `POST /api/entities/resolve-domain` (grow-on-demand Branch 1). Any\n * notable companies whose official website is the domain, imported from Wikidata.\n * `canMint` is true when nothing notable matched AND the domain is eligible for\n * the user-initiated mint-from-domain path -- it drives the \"Add <domain>\"\n * affordance.\n */\nexport const EntityResolveDomainResponseSchema = z.object({\n results: z.array(EntitySearchResultSchema),\n canMint: z.boolean(),\n});\nexport type EntityResolveDomainResponse = z.infer<typeof EntityResolveDomainResponseSchema>;\n\n/**\n * Response of `POST /api/entities/mint-domain` (grow-on-demand Branch 2). The\n * linkable entity minted from (or already resolved for) the domain. A non-2xx\n * status (e.g. the domain is not mintable, a confusable look-alike, or the site\n * yielded nothing usable) surfaces as a thrown error, not a null result.\n *\n * `pending` is true when the entity is a fresh hidden-pending mint: the\n * requesting user's own link resolves to it immediately, but it stays out of\n * other users' typeahead + aggregation until an admin approves it. Clients should\n * reflect this (\"added -- pending review\") rather than \"added & live\".\n */\nexport const EntityMintDomainResponseSchema = z.object({\n result: EntitySearchResultSchema,\n pending: z.boolean(),\n});\nexport type EntityMintDomainResponse = z.infer<typeof EntityMintDomainResponseSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement` records. Lives in the endorser's PDS;\n * the endorser identity is implicit (whoever owns the repository).\n */\nexport const EndorsementRecordSchema = z.object({\n subject: didSchema,\n /**\n * Absent when the endorser is proposing a skill the subject has not listed,\n * named by `skillName`. The record it becomes is linked from the subject's\n * confirmation, since only they can write to their own repository.\n */\n skill: strongRefSchema.optional(),\n skillName: z.string().min(1).refine(maxGraphemes(64)).max(640),\n comment: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementRecord = z.infer<typeof EndorsementRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/**\n * Relations shipped today. The lexicon declares these as `knownValues`, not an\n * enum, so the schema accepts any string: a consumer that meets a relation it\n * does not recognise should still see that the named person affirmed something.\n */\nexport const CONFIRMATION_RELATIONS = [\n 'id.sifa.defs#coSpeaker',\n 'id.sifa.defs#projectMember',\n] as const;\n\nexport type ConfirmationRelation = (typeof CONFIRMATION_RELATIONS)[number];\n\n/**\n * Zod schema for `id.sifa.confirmation` records.\n *\n * The subject strongRef carries no collection constraint by design: one record\n * type affirms a co-speaker credit, a project membership, and whatever\n * people-link relations come next. Resolve it by AT-URI; the CID pins the\n * version seen at confirmation time and is an integrity hint, not a join key,\n * because the claimer editing their record changes its CID without\n * invalidating anything.\n */\nexport const ConfirmationRecordSchema = z.object({\n subject: strongRefSchema,\n relation: z.string().min(1),\n /**\n * Name the subject record carried at confirmation time. Lives in the\n * confirming person's repo, out of the claimer's reach, so a rename after\n * the fact is detectable.\n */\n subjectName: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ConfirmationRecord = z.infer<typeof ConfirmationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, selfLabelsSchema, uriSchema } from './shared.js';\n\n/**\n * Structured physical address for an organization. Mirrors\n * `community.lexicon.location.address` (all fields optional). Sifa enforces\n * ISO 3166-1 alpha-2 country codes at the app layer.\n */\nconst orgAddressSchema = z.object({\n country: z.string().optional(),\n postalCode: z.string().optional(),\n region: z.string().optional(),\n locality: z.string().optional(),\n street: z.string().optional(),\n name: z.string().optional(),\n});\n\n/** A featured link on the org profile. Both `name` and `url` are required. */\nconst orgLinkSchema = z.object({\n name: z.string().refine(maxGraphemes(60)).max(600),\n url: uriSchema.max(2048),\n});\n\n/**\n * Zod schema for `id.sifa.org.profile` records -- the self-declared\n * organization profile. Singleton (record key `self`), lives in the org's PDS.\n * Presence of this record marks the account as presenting as an organization;\n * trust is layered separately (rendering floor, verification labels).\n *\n * Mirrors the lexicon wire shape (grapheme + byte caps, blob logo, uri refs).\n * For the sifa-api write-endpoint contract, use the schemas under\n * `@singi-labs/sifa-sdk/schemas/write` instead.\n */\nexport const OrgProfileRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n /** Blob ref for the org logo (`image/png` | `image/jpeg`). Not deeply validated client-side. */\n logo: z.unknown().optional(),\n website: uriSchema.optional(),\n entityRefs: z.array(uriSchema).max(20).optional(),\n /** Contact email. NOT rendered publicly; validated as email at the app layer. */\n contact: z.string().optional(),\n /** Physical addresses (headquarters, offices). */\n addresses: z.array(orgAddressSchema).max(10).optional(),\n /**\n * Self-selected headcount range (a declared bucket, never a calculated count).\n * Open enum (bare-string knownValues in the lexicon): `1-10`, `11-50`,\n * `51-200`, `201-500`, `501-1000`, `1001-5000`, `5001-10000`, `10001+`. Any\n * string is accepted so future ranges do not break older records.\n */\n companySize: z.string().optional(),\n /** Featured links or content surfaced on the org profile. */\n links: z.array(orgLinkSchema).max(10).optional(),\n /**\n * Whether the account holder's personal profile stays visible alongside this\n * org profile. For sole traders whose personal domain is also their trade\n * name: one account, two facets, both pages render. Absent or false means the\n * account presents solely as an organization.\n */\n personalProfileVisible: z.boolean().optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type OrgProfileRecord = z.infer<typeof OrgProfileRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n} from './shared.js';\n\n/**\n * Zod schema for `id.sifa.org.employmentAttestation` records -- an\n * organization's attestation that a person is or was employed in a specific\n * position. Lives in the org's PDS (the org is implicit: whoever owns the repo).\n *\n * The position identity is pinned via a snapshot triple (`title`, `startedAt`,\n * and the entity identifier `entityRef` | `companyDid`) so editing those pinned\n * fields on the referenced position record voids the attestation. The free-text\n * company name is never pinned (a rebrand must not invalidate the attestation).\n *\n * `startedAt` / `endedAt` mirror the position lexicon's freeform `YYYY-MM` /\n * `YYYY-MM-DD` date shape, not strict `datetime`.\n */\nexport const OrgEmploymentAttestationRecordSchema = z.object({\n subject: didSchema,\n position: strongRefSchema,\n status: z.enum(['current', 'past']),\n title: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n startedAt: partialDateSchema,\n entityRef: uriSchema.optional(),\n companyDid: didSchema.optional(),\n endedAt: partialDateSchema.optional(),\n comment: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type OrgEmploymentAttestationRecord = z.infer<typeof OrgEmploymentAttestationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.graph.follow` records.\n *\n * One-way professional follow; the record lives in the follower's PDS. Per\n * iter-1 decisions (`plans/2026-06-01-in-sifa-follow-primitive.md`), this is\n * a **distinct** graph from `app.bsky.graph.follow`, not a superset — but\n * the required field shape (`subject` + `createdAt`) is intentionally\n * identical so generic Bluesky `listRecords` consumers get usable records.\n *\n * `note` is a Sifa addition: an optional reason for the follow (\"why I\n * followed\"). Capped at 200 graphemes to match other profile-flavored\n * lexicon fields.\n */\nexport const GraphFollowRecordSchema = z.object({\n subject: didSchema,\n createdAt: datetimeSchema,\n note: z.string().refine(maxGraphemes(200), 'note must be at most 200 graphemes').optional(),\n});\n\nexport type GraphFollowRecord = z.infer<typeof GraphFollowRecordSchema>;\n\n/**\n * Build a `GraphFollowRecordSchema` that rejects self-follow at the Zod\n * layer (CLAUDE.md mandatory standards #3 — input validation; sifa-api#673\n * E8 — defence in depth).\n *\n * Use this on the **client side** when constructing a new follow record\n * (the follower DID is the authenticated user). The plain\n * {@link GraphFollowRecordSchema} stays without the refine so firehose\n * consumers can validate records without context.\n */\nexport function makeGraphFollowRecordSchema(followerDid: string) {\n return GraphFollowRecordSchema.refine((record) => record.subject !== followerDid, {\n message: 'Self-follow is not allowed',\n path: ['subject'],\n });\n}\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema } from './shared.js';\n\n/**\n * Profile row shared across `/api/following`, `/api/profile/:handleOrDid/mutuals`,\n * and `/api/me/bluesky-suggestions`. Matches the existing `FollowProfile` TS\n * interface byte-for-byte but adds runtime validation for the SDK's pagination\n * helpers and the upcoming `sifa-app` consumer (where we can't trust the wire).\n *\n * Per `sifa-api#674` PR body: mutuals + bluesky-suggestions reuse this shape\n * exactly, so a single Zod schema covers all three endpoints.\n */\nexport const FollowProfileSchema = z.object({\n did: didSchema,\n handle: z.string(),\n displayName: z.string().optional(),\n headline: z.string().optional(),\n avatarUrl: z.string().optional(),\n source: z.string(),\n claimed: z.boolean(),\n followedAt: datetimeSchema,\n blueskyVerified: z.boolean().optional(),\n blueskyVerifiedAt: datetimeSchema.nullable().optional(),\n});\n\nexport type FollowProfileItem = z.infer<typeof FollowProfileSchema>;\n\n/**\n * Cursor-paginated page of {@link FollowProfileSchema} rows. Used by mutuals\n * + bluesky-suggestions. The legacy `/api/following` endpoint uses a different\n * wrapper key (`follows` instead of `items`) and is intentionally NOT covered\n * by this schema.\n */\nexport const FollowProfilePageSchema = z.object({\n items: z.array(FollowProfileSchema),\n cursor: z.string().nullable(),\n});\n\nexport type FollowProfilePage = z.infer<typeof FollowProfilePageSchema>;\n\n/**\n * Per-flag allowlist row returned by `GET /api/admin/feature-allowlists/:flag`.\n * Mirrors the `feature_allowlists` table; `note` is optional free-form text.\n */\nexport const FeatureAllowlistEntrySchema = z.object({\n did: didSchema,\n addedAt: datetimeSchema,\n note: z.string().nullable().optional(),\n});\n\nexport type FeatureAllowlistEntry = z.infer<typeof FeatureAllowlistEntrySchema>;\n\n/**\n * Known feature flags accepted by the admin allowlist endpoints. Mirrors the\n * server-side `FEATURE_FLAGS` const in `sifa-api`. Kept as a `const` tuple so\n * consumers can `as const`-narrow when building UIs.\n */\nexport const FEATURE_FLAGS = ['FEED_V5_ENABLED'] as const;\nexport type FeatureFlag = (typeof FEATURE_FLAGS)[number];\n","import { z } from 'zod';\n\nimport { atUriSchema, cidSchema, datetimeSchema, didSchema } from './shared.js';\n\n/**\n * Feed item from `GET /api/following/feed`. Discriminated on `source`:\n *\n * - `sifa`: a Sifa-native event (e.g. profile update, endorsement).\n * - `atmosphere`: a curated creation event from another ATproto app\n * (Barazo post, etc.). Payload is the hydrated `app.bsky.embed.*#view`\n * shape, NOT the raw record (per memory `sifa-hydrated-view-embed-types`).\n *\n * Both variants share `actor`, `indexedAt`, and `id` (the materialized\n * `feed_events.id` row identifier, used in the cursor).\n */\nexport const FeedActorSchema = z.object({\n did: didSchema,\n handle: z.string(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n});\n\nexport type FeedActor = z.infer<typeof FeedActorSchema>;\n\nconst FeedItemBaseSchema = z.object({\n id: z.string(),\n actor: FeedActorSchema,\n indexedAt: datetimeSchema,\n eventType: z.string(),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const SifaFeedItemSchema = FeedItemBaseSchema.extend({\n source: z.literal('sifa'),\n appId: z.literal('sifa').optional(),\n payload: z.record(z.string(), z.unknown()),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type SifaFeedItem = z.infer<typeof SifaFeedItemSchema>;\n\n/**\n * ATmosphere feed item. `payload` is intentionally permissive: it carries\n * a hydrated `app.bsky.embed.*#view` shape that varies by source app. The\n * AppView resolves the hydration; clients render via the existing\n * embed-view union (mirrors `sifa-web/src/components/stream/`).\n *\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const AtmosphereFeedItemSchema = FeedItemBaseSchema.extend({\n source: z.literal('atmosphere'),\n appId: z.string(),\n uri: atUriSchema.optional(),\n cid: cidSchema.optional(),\n payload: z.record(z.string(), z.unknown()),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type AtmosphereFeedItem = z.infer<typeof AtmosphereFeedItemSchema>;\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const FollowFeedItemSchema = z.discriminatedUnion('source', [\n SifaFeedItemSchema,\n AtmosphereFeedItemSchema,\n]);\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type FollowFeedItem = z.infer<typeof FollowFeedItemSchema>;\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport const FollowFeedPageSchema = z.object({\n items: z.array(FollowFeedItemSchema),\n cursor: z.string().nullable(),\n});\n\n/**\n * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).\n * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere\n * Stream are two distinct surfaces with different data paths (Barazo API\n * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed\n * types are no longer consumed. Scheduled for removal in next major bump.\n */\nexport type FollowFeedPage = z.infer<typeof FollowFeedPageSchema>;\n\n/**\n * Composite feed cursor `(indexedAt DESC, source, id)`. Encoded as a\n * URL-safe base64 string so it survives `URLSearchParams` round-trips\n * without further encoding. Decoupling encode/decode from the API call\n * lets consumers persist cursors (e.g. for \"jump-back-here\" UX) and\n * lets us unit-test the format.\n */\nexport interface FeedCursor {\n indexedAt: string;\n source: 'sifa' | 'atmosphere';\n id: string;\n}\n\nconst FeedCursorSchema = z.object({\n indexedAt: datetimeSchema,\n source: z.union([z.literal('sifa'), z.literal('atmosphere')]),\n id: z.string().min(1),\n});\n\ninterface BufferLike {\n from: (input: string, encoding: 'utf-8' | 'base64') => { toString: (encoding: string) => string };\n}\n\ninterface Base64Global {\n btoa?: (input: string) => string;\n atob?: (input: string) => string;\n Buffer?: BufferLike;\n}\n\nfunction toBase64Url(input: string): string {\n const g = globalThis as unknown as Base64Global;\n const b64: string =\n typeof g.btoa === 'function'\n ? g.btoa(unescape(encodeURIComponent(input)))\n : (g.Buffer as BufferLike).from(input, 'utf-8').toString('base64');\n // Strip up to 2 trailing '=' (base64 padding). CodeQL flags `/=+$/` as a\n // polynomial regex on tainted input; we don't accept tainted input here,\n // but the deterministic loop sidesteps the alert.\n let end = b64.length;\n while (end > 0 && b64.charCodeAt(end - 1) === 61) end--;\n return b64.slice(0, end).replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\nfunction fromBase64Url(input: string): string {\n const padded = input.replace(/-/g, '+').replace(/_/g, '/') + '==='.slice((input.length + 3) % 4);\n const g = globalThis as unknown as Base64Global;\n if (typeof g.atob === 'function') {\n return decodeURIComponent(escape(g.atob(padded)));\n }\n return (g.Buffer as BufferLike).from(padded, 'base64').toString('utf-8');\n}\n\nexport function encodeFeedCursor(cursor: FeedCursor): string {\n return toBase64Url(JSON.stringify(cursor));\n}\n\nexport function decodeFeedCursor(encoded: string): FeedCursor {\n const json = fromBase64Url(encoded);\n const parsed: unknown = JSON.parse(json);\n return FeedCursorSchema.parse(parsed);\n}\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n uriSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.certification` records. */\nexport const ProfileCertificationRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n authority: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n authorityDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n credentialId: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n credentialUrl: uriSchema.optional(),\n issuedAt: partialDateSchema.optional(),\n expiresAt: partialDateSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCertificationRecord = z.infer<typeof ProfileCertificationRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n atUriSchema,\n datetimeSchema,\n maxGraphemes,\n partialDateSchema,\n strongRefSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.course` records. */\nexport const ProfileCourseRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n number: z.string().refine(maxGraphemes(50)).max(500).optional(),\n institution: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n education: strongRefSchema.optional(),\n // AT-URI of the associated id.sifa.profile.certification record. Plain\n // at-uri (not a strongRef) so the link tracks the live certification.\n credential: atUriSchema.optional(),\n completedAt: partialDateSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCourseRecord = z.infer<typeof ProfileCourseRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.education` records. */\nexport const ProfileEducationRecordSchema = z.object({\n institution: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n institutionDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n degree: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n fieldOfStudy: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n grade: z.string().refine(maxGraphemes(50)).max(500).optional(),\n activities: z.string().refine(maxGraphemes(1000)).max(10000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n location: z.unknown().optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n labels: selfLabelsSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileEducationRecord = z.infer<typeof ProfileEducationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.externalAccount` records.\n *\n * `platform` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#platform*` but unknown values are accepted.\n */\nexport const ProfileExternalAccountRecordSchema = z.object({\n platform: z.string(),\n url: uriSchema,\n label: z.string().refine(maxGraphemes(64)).max(640).optional(),\n feedUrl: uriSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileExternalAccountRecord = z.infer<typeof ProfileExternalAccountRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, partialDateSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.honor` records. */\nexport const ProfileHonorRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n issuer: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n issuerDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n awardedAt: partialDateSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileHonorRecord = z.infer<typeof ProfileHonorRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n externalRecordRefSchema,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n} from './shared.js';\n\n/**\n * A person named as a member of a project. Mirrors `id.sifa.defs#projectMemberRef`.\n *\n * A claim by the record author, not a fact: the named person carries a display\n * name, avatar, and profile link only once they publish a matching\n * `id.sifa.confirmation`. `role` is display only, since a record living in\n * someone else's repository cannot grant write access to anything.\n */\nexport const projectMemberRefSchema = z.object({\n did: didSchema,\n role: z.string().optional(),\n title: z.string().refine(maxGraphemes(128)).max(1280).optional(),\n});\n\nexport type ProjectMemberRef = z.infer<typeof projectMemberRefSchema>;\n\n/** Zod schema for `id.sifa.profile.project` records. */\nexport const ProfileProjectRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n url: uriSchema.optional(),\n members: z.array(projectMemberRefSchema).max(50).optional(),\n /**\n * The canonical `id.sifa.project.self` this personal entry corresponds to.\n * A composition link. For the same project recorded on someone else's\n * profile, see `sameAs`.\n */\n projectRef: strongRefSchema.optional(),\n /**\n * The same project as recorded on another person's profile. Each side stays\n * its own record; this only says the two describe one thing. Resolves by\n * AT-URI, since they will keep editing their copy.\n */\n sameAs: externalRecordRefSchema.optional(),\n position: strongRefSchema.optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n labels: selfLabelsSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileProjectRecord = z.infer<typeof ProfileProjectRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n externalRecordRefSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n uriSchema,\n} from './shared.js';\nimport { projectMemberRefSchema } from './profile-project.js';\n\n/** Collection NSID for involvement records. Pass to the generic record helpers. */\nexport const PROFILE_INVOLVEMENT_NSID = 'id.sifa.profile.involvement';\n\n/**\n * A public artifact proving a piece of work. Mirrors `id.sifa.defs#artifactLink`.\n * `kind` is an open enum (bare-string knownValues), so any string is accepted.\n * `.passthrough()` keeps unknown fields a newer client or co-writer may emit.\n */\nexport const ArtifactLinkSchema = z\n .object({\n url: uriSchema,\n kind: z.string().optional(),\n label: z.string().refine(maxGraphemes(200)).max(2000).optional(),\n })\n .passthrough();\n\nexport type ArtifactLink = z.infer<typeof ArtifactLinkSchema>;\n\n/**\n * Zod schema for `id.sifa.profile.involvement` records.\n *\n * `.passthrough()` (not `.strict()`): external apps (Verak, weareonhire)\n * co-write `id.sifa.*`, so an older SDK must not reject a record carrying a\n * field it doesn't know yet. `kind` is an open enum matching the lexicon's\n * knownValues but accepting any string for the same forward-compat reason.\n */\nexport const ProfileInvolvementRecordSchema = z\n .object({\n kind: z.string(),\n upstream: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n upstreamDid: didSchema.optional(),\n upstreamUrl: uriSchema.optional(),\n role: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n links: z.array(ArtifactLinkSchema).max(50).optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the resolver\n // typeahead, constrained to http(s) so a script scheme is never a valid ref.\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n // community.lexicon.location.address — validated at the app layer.\n location: z.unknown().optional(),\n // id.sifa.defs#skillRef references (at-uri to a skill record in the same repo).\n skills: z\n .array(z.object({ uri: z.string() }))\n .max(50)\n .optional(),\n labels: selfLabelsSchema.optional(),\n collaborators: z.array(projectMemberRefSchema).max(50).optional(),\n sameAs: externalRecordRefSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n })\n .passthrough();\n\nexport type ProfileInvolvementRecord = z.infer<typeof ProfileInvolvementRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.language` records.\n *\n * `proficiency` is advisory (`knownValues` in the lexicon) -- known values\n * are the five-level LinkedIn-compatible scale under `id.sifa.defs#*`.\n */\nexport const ProfileLanguageRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n proficiency: z.string().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileLanguageRecord = z.infer<typeof ProfileLanguageRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n skillRefSchema,\n} from './shared.js';\n\n// Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n// Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n// Shared by the two entity references on a position so the scheme check cannot\n// drift between them.\nconst entityRefField = z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional();\n\n/** Zod schema for `id.sifa.profile.position` records. */\nexport const ProfilePositionRecordSchema = z\n .object({\n company: z.string().min(1).refine(maxGraphemes(100)).max(1000).optional(),\n companyDid: didSchema.optional(),\n entityRef: entityRefField,\n title: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n employmentType: z.string().optional(),\n // Disclosure that the role is held as someone else's representative -- most often\n // a fund whose board seat this is. Capped at the lexicon's 256 graphemes rather\n // than the tighter limit used for `company`: a schema stricter than the lexicon\n // would reject records other clients can legally write.\n onBehalfOf: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n // May resolve to an organization or to a person (a family-office principal); a DID\n // does not distinguish the two, so this stays permissive.\n onBehalfOfDid: didSchema.optional(),\n onBehalfOfEntityRef: entityRefField,\n workplaceType: z.string().optional(),\n location: z.unknown().optional(),\n startedAt: partialDateSchema,\n endedAt: partialDateSchema.optional(),\n // id.sifa.defs#skillRef -- at-uri only, no cid. Skills are mutable records\n // in the same repo, so the ref resolves live rather than pinning a version.\n skills: z.array(skillRefSchema).max(50).optional(),\n isPrimary: z.boolean().optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n })\n .passthrough();\n\nexport type ProfilePositionRecord = z.infer<typeof ProfilePositionRecordSchema>;\n","import { z } from 'zod';\n\nimport { BlobRefSchema } from './blob-ref.js';\nimport { datetimeSchema, externalRecordRefSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/**\n * Duration of a presentation, in minutes. Mirrors\n * `id.sifa.profile.presentation#duration`: a fixed length (minMinutes only) or\n * a range (minMinutes to maxMinutes).\n */\nexport const PresentationDurationSchema = z\n .object({\n minMinutes: z.number().int().min(1),\n maxMinutes: z.number().int().min(1).optional(),\n })\n .refine((d) => d.maxMinutes === undefined || d.maxMinutes >= d.minMinutes, {\n message: 'maxMinutes must be greater than or equal to minMinutes',\n path: ['maxMinutes'],\n });\n\nexport type PresentationDuration = z.infer<typeof PresentationDurationSchema>;\n\n/**\n * A related link for a presentation or one of its deliveries. Mirrors\n * `id.sifa.defs#presentationLink`. `type` is an open enum (knownValues), so any\n * string is accepted.\n */\nexport const PresentationLinkSchema = z.object({\n uri: uriSchema,\n label: z.string().refine(maxGraphemes(64)).max(640).optional(),\n type: z.string().optional(),\n});\n\nexport type PresentationLink = z.infer<typeof PresentationLinkSchema>;\n\n/** Zod schema for `id.sifa.profile.presentation` records (the reusable content). */\nexport const ProfilePresentationRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(300)).max(3000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n duration: PresentationDurationSchema.optional(),\n intendedAudiences: z\n .array(z.string().refine(maxGraphemes(100)).max(1000))\n .max(20)\n .optional(),\n links: z.array(PresentationLinkSchema).max(20).optional(),\n // Optional reference to a long-form write-up (pub.leaflet.document or\n // site.standard.document). Plain at-uri + optional cid so it tracks edits.\n writeupRef: externalRecordRefSchema.optional(),\n // Optional uploaded cover image for the talk page.\n coverImage: BlobRefSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePresentationRecord = z.infer<typeof ProfilePresentationRecordSchema>;\n","import { z } from 'zod';\n\nimport { PresentationLinkSchema } from './profile-presentation.js';\nimport { datetimeSchema, externalRecordRefSchema, maxGraphemes } from './shared.js';\n\n/**\n * Structured address for a delivery occasion. Mirrors\n * `community.lexicon.location.address` (all fields optional).\n */\nconst communityAddressSchema = z.object({\n country: z.string().optional(),\n postalCode: z.string().optional(),\n region: z.string().optional(),\n locality: z.string().optional(),\n street: z.string().optional(),\n name: z.string().optional(),\n});\n\n/**\n * Zod schema for `id.sifa.profile.presentationDelivery` records (one occasion\n * on which a presentation was delivered). Works standalone or linked to a\n * presentation and/or a calendar event. `role`, `mode`, and `status` are open\n * enums (knownValues); `mode`/`status` store the full\n * `community.lexicon.calendar.event` token.\n */\nexport const ProfilePresentationDeliveryRecordSchema = z.object({\n // Optional reference to the id.sifa.profile.presentation delivered here.\n presentationRef: externalRecordRefSchema.optional(),\n // Fallback title used when there is no presentationRef.\n title: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n role: z.string().refine(maxGraphemes(64)).max(640).optional(),\n eventName: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n // Calendar date as YYYY-MM-DD (day only).\n date: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'date must be YYYY-MM-DD')\n .optional(),\n location: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n // Structured community.lexicon.location.address for the occasion. The\n // free-text `location` string above stays as a legacy fallback.\n address: communityAddressSchema.optional(),\n mode: z.string().optional(),\n status: z.string().optional(),\n links: z.array(PresentationLinkSchema).max(20).optional(),\n // Optional reference to a community.lexicon.calendar.event for this occasion.\n eventRef: externalRecordRefSchema.optional(),\n // DIDs of co-speakers who presented alongside the author at this occasion.\n coSpeakers: z\n .array(z.string().regex(/^did:[a-z]+:[^\\s]+$/, 'must be a DID'))\n .max(20)\n .optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePresentationDeliveryRecord = z.infer<\n typeof ProfilePresentationDeliveryRecordSchema\n>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, partialDateSchema, uriSchema } from './shared.js';\n\n/** Author shape from `id.sifa.profile.publication#author`. */\nexport const PublicationAuthorSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n did: didSchema.optional(),\n});\n\nexport type PublicationAuthor = z.infer<typeof PublicationAuthorSchema>;\n\n/** Zod schema for `id.sifa.profile.publication` records. */\nexport const ProfilePublicationRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n subtitle: z.string().refine(maxGraphemes(200)).max(2000).optional(),\n publisher: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n url: uriSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n authors: z.array(PublicationAuthorSchema).max(50).optional(),\n publishedAt: partialDateSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePublicationRecord = z.infer<typeof ProfilePublicationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, languageTagSchema, maxGraphemes, selfLabelsSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.self` records. Singleton (record key `self`).\n *\n * `knownValues` on `openTo` and `preferredWorkplace` are advisory per the\n * lexicon spec -- unknown values are allowed, but documented options live\n * under the `id.sifa.defs#*` namespace.\n */\nexport const ProfileSelfRecordSchema = z.object({\n headline: z.string().refine(maxGraphemes(120)).max(1200).optional(),\n about: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n industry: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n givenName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n familyName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n namePronunciation: z.string().refine(maxGraphemes(64)).max(640).optional(),\n location: z.unknown().optional(),\n openTo: z.array(z.string()).max(10).optional(),\n preferredWorkplace: z.array(z.string()).max(3).optional(),\n langs: z.array(languageTagSchema).max(3).optional(),\n labels: selfLabelsSchema.optional(),\n discoverable: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSelfRecord = z.infer<typeof ProfileSelfRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.skill` records.\n *\n * `category` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#*` but unknown values are accepted. `subCategory` is a\n * freeform user-defined grouping label nested under `category` (no known\n * values); renderers decide its display label.\n */\nexport const ProfileSkillRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n category: z.string().optional(),\n subCategory: z.string().refine(maxGraphemes(64)).max(640).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSkillRecord = z.infer<typeof ProfileSkillRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, partialDateSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.volunteering` records. */\nexport const ProfileVolunteeringRecordSchema = z.object({\n organization: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n organizationDid: didSchema.optional(),\n // Portable org entity identifier (Wikidata/ROR/LEI URI) from the typeahead.\n // Constrained to http(s) so a script-bearing scheme is never a valid ref (#159).\n entityRef: z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional(),\n role: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n cause: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileVolunteeringRecord = z.infer<typeof ProfileVolunteeringRecordSchema>;\n","import { z } from 'zod';\n\nimport { ArtifactLinkSchema } from './profile-involvement.js';\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n} from './shared.js';\n\n// Portable entity identifier (Wikidata/ROR/LEI URI) from the typeahead. Constrained\n// to http(s) so a script-bearing scheme is never a valid ref (#159). An investment\n// carries two of these -- the company and the vehicle -- so the check is shared.\nconst entityRefField = z\n .string()\n .url()\n .refine((s) => /^https?:\\/\\//i.test(s), { message: 'entityRef must be an http(s) URL' })\n .max(2048)\n .optional();\n\n/**\n * A deliberately structured amount. Free text was rejected here: an unparseable\n * money string is worse than no amount at all, and cannot be repaired once people\n * have written them.\n */\nexport const InvestmentAmountSchema = z.object({\n /** Whole major currency units (euros, not cents). Cheque sizes are round numbers. */\n value: z.number().int().min(0),\n /** ISO 4217 three-letter code, uppercase. */\n currency: z.string().length(3),\n});\n\n/** Collection NSID for investment records. */\nexport const PROFILE_INVESTMENT_NSID = 'id.sifa.profile.investment';\n\n/** Zod schema for `id.sifa.profile.investment` records. */\nexport const ProfileInvestmentRecordSchema = z\n .object({\n /** For a limited-partner entry this names the fund, not a portfolio company. */\n company: z.string().min(1).refine(maxGraphemes(256)).max(2560),\n companyDid: didSchema.optional(),\n entityRef: entityRefField,\n role: z.string().optional(),\n stage: z.string().optional(),\n status: z.string().optional(),\n /** The vehicle the capital went through. Absent for a cheque in the person's own name. */\n via: z.string().refine(maxGraphemes(256)).max(2560).optional(),\n viaDid: didSchema.optional(),\n viaEntityRef: entityRefField,\n /**\n * Optional and empty by default. Cheque size is a personal financial disclosure,\n * and clients must not prompt for it.\n */\n amount: InvestmentAmountSchema.optional(),\n startedAt: partialDateSchema.optional(),\n endedAt: partialDateSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n links: z.array(ArtifactLinkSchema).max(50).optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n })\n .passthrough();\n\nexport type ProfileInvestmentRecord = z.infer<typeof ProfileInvestmentRecordSchema>;\n"]}
@@ -1,4 +1,4 @@
1
- import { w as PresentationLinkView, b as PdsProviderInfo } from './index-DIwi3bpk.cjs';
1
+ import { w as PresentationLinkView, b as PdsProviderInfo } from './index-E2qQbMnv.cjs';
2
2
 
3
3
  /**
4
4
  * Types for the `id.sifa.getProfileView` XRPC query: the aggregated public
@@ -59,6 +59,7 @@ interface EducationView {
59
59
  description?: string;
60
60
  startedAt?: string;
61
61
  endedAt?: string;
62
+ primary?: boolean;
62
63
  }
63
64
  interface SkillView {
64
65
  rkey: string;
@@ -96,6 +97,7 @@ interface ProjectView {
96
97
  /** AT-URI of the same project as recorded elsewhere, when this entry duplicates another. */
97
98
  /** AT-URI of the same record on another person's profile, when they keep one. */
98
99
  sameAs?: string;
100
+ primary?: boolean;
99
101
  }
100
102
  /**
101
103
  * A person named as a member of a project (also used for involvement
@@ -147,6 +149,7 @@ interface InvolvementView {
147
149
  collaborators?: ProjectMemberView[];
148
150
  /** AT-URI of the same involvement as recorded on another person's profile. */
149
151
  sameAs?: string;
152
+ primary?: boolean;
150
153
  }
151
154
  interface ContributorView {
152
155
  name: string;
@@ -173,6 +176,7 @@ interface PublicationView {
173
176
  publicationUrl?: string;
174
177
  publicationName?: string;
175
178
  image?: string;
179
+ primary?: boolean;
176
180
  }
177
181
  interface CourseView {
178
182
  rkey: string;
@@ -235,6 +239,7 @@ interface PresentationView {
235
239
  links?: PresentationLinkView[];
236
240
  writeupUri?: string;
237
241
  coverImageUrl?: string;
242
+ primary?: boolean;
238
243
  deliveries: PresentationDeliveryView[];
239
244
  }
240
245
  interface HonorView {
@@ -1,4 +1,4 @@
1
- import { w as PresentationLinkView, b as PdsProviderInfo } from './index-DIwi3bpk.js';
1
+ import { w as PresentationLinkView, b as PdsProviderInfo } from './index-E2qQbMnv.js';
2
2
 
3
3
  /**
4
4
  * Types for the `id.sifa.getProfileView` XRPC query: the aggregated public
@@ -59,6 +59,7 @@ interface EducationView {
59
59
  description?: string;
60
60
  startedAt?: string;
61
61
  endedAt?: string;
62
+ primary?: boolean;
62
63
  }
63
64
  interface SkillView {
64
65
  rkey: string;
@@ -96,6 +97,7 @@ interface ProjectView {
96
97
  /** AT-URI of the same project as recorded elsewhere, when this entry duplicates another. */
97
98
  /** AT-URI of the same record on another person's profile, when they keep one. */
98
99
  sameAs?: string;
100
+ primary?: boolean;
99
101
  }
100
102
  /**
101
103
  * A person named as a member of a project (also used for involvement
@@ -147,6 +149,7 @@ interface InvolvementView {
147
149
  collaborators?: ProjectMemberView[];
148
150
  /** AT-URI of the same involvement as recorded on another person's profile. */
149
151
  sameAs?: string;
152
+ primary?: boolean;
150
153
  }
151
154
  interface ContributorView {
152
155
  name: string;
@@ -173,6 +176,7 @@ interface PublicationView {
173
176
  publicationUrl?: string;
174
177
  publicationName?: string;
175
178
  image?: string;
179
+ primary?: boolean;
176
180
  }
177
181
  interface CourseView {
178
182
  rkey: string;
@@ -235,6 +239,7 @@ interface PresentationView {
235
239
  links?: PresentationLinkView[];
236
240
  writeupUri?: string;
237
241
  coverImageUrl?: string;
242
+ primary?: boolean;
238
243
  deliveries: PresentationDeliveryView[];
239
244
  }
240
245
  interface HonorView {
@@ -1,10 +1,10 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { S as SifaApiConfig, s as sifaQueryKeys, W as WriteResult, aD as RefreshPdsResult, aX as UpdateProfileOverrideInput, aY as UpdateProfileSelfInput, aZ as UploadAvatarResult, a_ as UploadPronunciationAudioResult, C as CreateResult, aR as SubCategoryBulkResult, ar as ProfileLocationInput, q as ExternalAccountInput, p as CreateExternalAccountResult, a$ as VerifyExternalAccountResult, E as EndorsementInput, n as ConfirmationInput, o as ConfirmationSubjectInput, Z as GivenConfirmation, am as PendingConfirmationsPage, a8 as InboxCounts, aW as UnlinkedPositionsResult, an as ProfileCompleteness, aC as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a7 as HideProfileItemInput, a2 as HiddenActivityItem, a6 as HideActivityItemInput, aU as UnhideActivityItemInput, aQ as StatsResponse, k as AppRegistryEntry, a3 as HiddenApp, d as AccountSummary, P as FilterOptions, aL as SearchFilters, aM as SearchResponse, aP as SkillSearchResult, cC as CompanySearchFilters, cD as CompanySearchResponse, r as FeaturedProfile, aO as SimilarProfile, N as FetchSuggestionsOptions, aT as SuggestionsResponse, U as FollowUserResult, x as FetchFollowListOptions, Q as FollowListPage, V as FollowingResponse, z as FetchFollowingFeedOptions, y as FetchFollowProfilePageOptions, T as FollowProfilePageResponse, F as FeatureAllowlistResponse, i as AdminReviewQueues, u as FetchActivityFeedOptions, e as ActivityFeedResponse, h as ActivityTeaserResponse, a1 as HeatmapResponse, aa as MyGithubPullRequestsResponse, c as AccountCheckResult, aB as ReactionStatus, aA as ReactionResult, az as ReactionError, aK as RoadmapVotesResponse, l as CastRoadmapVoteResult, D as DeleteAccountResult, aF as ResetProfileResult, b0 as WipePreview, aE as RepoDeleteInput, ac as OrgClaimResult, ai as OrgProfileUpdateResult, ad as OrgDomainChallengeResult, ae as OrgDomainVerifyResult, af as OrgNotificationEmailAddResult, ag as OrgNotificationEmailRemoveResult } from './org-0uCYKpq1.cjs';
3
+ import { S as SifaApiConfig, s as sifaQueryKeys, W as WriteResult, aF as RefreshPdsResult, aZ as UpdateProfileOverrideInput, a_ as UpdateProfileSelfInput, a$ as UploadAvatarResult, b0 as UploadPronunciationAudioResult, C as CreateResult, ao as PrimarySection, aT as SubCategoryBulkResult, at as ProfileLocationInput, r as ExternalAccountInput, p as CreateExternalAccountResult, b1 as VerifyExternalAccountResult, E as EndorsementInput, n as ConfirmationInput, o as ConfirmationSubjectInput, _ as GivenConfirmation, an as PendingConfirmationsPage, a9 as InboxCounts, q as DismissUnlinkedPositionInput, aY as UnlinkedPositionsResult, ap as ProfileCompleteness, aE as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a8 as HideProfileItemInput, a3 as HiddenActivityItem, a7 as HideActivityItemInput, aW as UnhideActivityItemInput, aS as StatsResponse, k as AppRegistryEntry, a4 as HiddenApp, d as AccountSummary, Q as FilterOptions, aN as SearchFilters, aO as SearchResponse, aR as SkillSearchResult, cH as CompanySearchFilters, cI as CompanySearchResponse, t as FeaturedProfile, aQ as SimilarProfile, O as FetchSuggestionsOptions, aV as SuggestionsResponse, V as FollowUserResult, y as FetchFollowListOptions, R as FollowListPage, X as FollowingResponse, G as FetchFollowingFeedOptions, z as FetchFollowProfilePageOptions, U as FollowProfilePageResponse, F as FeatureAllowlistResponse, i as AdminReviewQueues, v as FetchActivityFeedOptions, e as ActivityFeedResponse, h as ActivityTeaserResponse, a2 as HeatmapResponse, ab as MyGithubPullRequestsResponse, c as AccountCheckResult, aD as ReactionStatus, aC as ReactionResult, aB as ReactionError, aM as RoadmapVotesResponse, l as CastRoadmapVoteResult, D as DeleteAccountResult, aH as ResetProfileResult, b2 as WipePreview, aG as RepoDeleteInput, ad as OrgClaimResult, aj as OrgProfileUpdateResult, ae as OrgDomainChallengeResult, af as OrgDomainVerifyResult, ag as OrgNotificationEmailAddResult, ah as OrgNotificationEmailRemoveResult } from './org-DhAmipS-.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, S as SkillRef, p as ExternalAccount, Q as SkillSuggestion, s as OrgFloorVerdict } from './index-DIwi3bpk.cjs';
7
- import { n as ProfileView, t as RepoDeleteResult, w as RepoInventory } from './types-XejLm3AA.cjs';
6
+ import { c as Profile, d as ProfilePosition, S as SkillRef, p as ExternalAccount, Q as SkillSuggestion, s as OrgFloorVerdict } from './index-E2qQbMnv.cjs';
7
+ import { n as ProfileView, t as RepoDeleteResult, w as RepoInventory } from './types-2qTC_DBy.cjs';
8
8
  import { j as EntitySearchResponse, E as EntitySearchResult, d as EntityMintDomainResponse, h as EntityResolveDomainResponse, o as EntitySelectResponse, m as EntitySelectRequest, y as FollowFeedPage, s as FeatureFlag } from './feed-BMm9Pkew.cjs';
9
9
  import { O as OrgClaimRequestInput, a as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, c as OrgDomainVerifyRequestInput, d as OrgNotificationEmailRequestInput } from './org-settings-CZ_tmAYl.cjs';
10
10
 
@@ -127,6 +127,15 @@ declare function useUpdateEducation(ownerHandleOrDid: string, options?: Omit<Use
127
127
  /** React hook for deleting an education record. Variable: the `rkey` string. */
128
128
  declare function useDeleteEducation(ownerHandleOrDid: string, options?: Omit<UseMutationOptions<WriteResult, Error, string>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<WriteResult, Error, string, unknown>;
129
129
 
130
+ /**
131
+ * React hook for marking a section record as the user's primary item. Variable:
132
+ * the record's `rkey`. Invalidates the owner's profile query on success so the
133
+ * Highlights block and section editors re-render with the new choice.
134
+ */
135
+ declare function useSetSectionPrimary(section: PrimarySection, ownerHandleOrDid: string, options?: Omit<UseMutationOptions<WriteResult, Error, string>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<WriteResult, Error, string, unknown>;
136
+ /** React hook for clearing the primary flag on a section record. */
137
+ declare function useUnsetSectionPrimary(section: PrimarySection, ownerHandleOrDid: string, options?: Omit<UseMutationOptions<WriteResult, Error, string>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<WriteResult, Error, string, unknown>;
138
+
130
139
  /** React hook for creating a skill record. */
131
140
  declare function useCreateSkill(ownerHandleOrDid: string, options?: Omit<UseMutationOptions<CreateResult, Error, Record<string, unknown>>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<CreateResult, Error, Record<string, unknown>, unknown>;
132
141
  /** Variables for {@link useUpdateSkill}. */
@@ -270,6 +279,12 @@ declare function useInboxCounts(options?: Omit<UseQueryOptions<InboxCounts, Erro
270
279
  * or on error.
271
280
  */
272
281
  declare function useUnlinkedPositions(options?: Omit<UseQueryOptions<UnlinkedPositionsResult, Error, UnlinkedPositionsResult, ReturnType<typeof sifaQueryKeys.position.unlinked>>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<NoInfer<UnlinkedPositionsResult>, Error>;
282
+ /**
283
+ * Dismiss the unlinked-company task for one position. On success the position
284
+ * leaves the Inbox and the bell count, so both the unlinked-positions list and
285
+ * the inbox counts are invalidated.
286
+ */
287
+ declare function useDismissUnlinkedPosition(options?: Omit<UseMutationOptions<WriteResult, Error, DismissUnlinkedPositionInput>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<WriteResult, Error, DismissUnlinkedPositionInput, unknown>;
273
288
 
274
289
  /**
275
290
  * Completeness of the signed-in user's own profile (which tracked signals are
@@ -873,4 +888,4 @@ declare function useRemoveOrgNotificationEmail(options?: Omit<UseMutationOptions
873
888
  email: string;
874
889
  }, unknown>;
875
890
 
876
- export { useDeleteReaction as $, type AddFeatureAllowlistVariables as A, useCanonicalSkillSearch as B, type CreateReactionVariables as C, type DeleteReactionVariables as D, useCastRoadmapVote as E, type FollowVariables as F, useCreateConfirmation as G, useCreateEducation as H, useCreateEndorsement as I, useCreateExternalAccount as J, useCreatePosition as K, useCreateProfileLocation as L, useCreateReaction as M, useCreateRecord as N, useCreateSkill as O, type PositionSkillLinkVariables as P, useDebouncedValue as Q, type RemoveFeatureAllowlistVariables as R, SifaProvider as S, useDeleteAccount as T, type UnfollowVariables as U, useDeleteAvatarOverride as V, useDeleteEducation as W, useDeleteExternalAccount as X, useDeleteNamePronunciationAudio as Y, useDeletePosition as Z, useDeleteProfileLocation as _, type CreateRecordVariables as a, useUnfollow as a$, useDeleteRecord as a0, useDeleteRepoRecords as a1, useDeleteSkill as a2, useDismissConfirmation as a3, useEndorsementCount as a4, useEntitySearch as a5, useExternalAccounts as a6, useFeatureAllowlist as a7, useFeaturedProfile as a8, useFollow as a9, useOrgProfile as aA, usePendingConfirmations as aB, useProfile as aC, useProfileCompleteness as aD, useReactionStatus as aE, useRefreshOrcidPublications as aF, useRefreshPds as aG, useRemoveFeatureAllowlist as aH, useRemoveOrgNotificationEmail as aI, useRepoInventory as aJ, useResetProfile as aK, useResolveEntityDomain as aL, useRetractRoadmapVote as aM, useRevealMarqueDomain as aN, useRevokeConfirmation as aO, useRoadmapVotes as aP, useSearchFilters as aQ, useSearchProfiles as aR, useSelectEntity as aS, useSetExternalAccountPrimary as aT, useSetPositionPrimary as aU, useSifaConfig as aV, useSimilarProfiles as aW, useSkillSuggestions as aX, useStats as aY, useSuggestionCount as aZ, useSuggestions as a_, useFollowers as aa, useFollowing as ab, useFollowingFeed as ac, useFollowingList as ad, useGetProfileView as ae, useGivenConfirmations as af, useHeatmapData as ag, useHiddenActivityItems as ah, useHiddenApps as ai, useHideActivityItem as aj, useHideKeytraceClaim as ak, useHideOrcidPublication as al, useHideProfileItem as am, useHideSifaPublication as an, useHideStandardPublication as ao, useImportSearchEntities as ap, useInboxCounts as aq, useLinkSkillToPosition as ar, useMintEntityDomain as as, useMutuals as at, useMyGithubPullRequests as au, useMyRoadmapVotes as av, useNetworkStreamCount as aw, useOrgClaim as ax, useOrgDomainChallenge as ay, useOrgDomainVerify as az, type DeleteRecordVariables as b, useUnhideActivityItem as b0, useUnhideKeytraceClaim as b1, useUnhideOrcidPublication as b2, useUnhideProfileItem as b3, useUnhideSifaPublication as b4, useUnhideStandardPublication as b5, useUnlinkSkillFromPosition as b6, useUnlinkedPositions as b7, useUnrevealMarqueDomain as b8, useUnsetExternalAccountPrimary as b9, useUnsetPositionPrimary as ba, useUpdateEducation as bb, useUpdateExternalAccount as bc, useUpdateOrgProfile as bd, useUpdatePosition as be, useUpdateProfileLocation as bf, useUpdateProfileOverride as bg, useUpdateProfileSelf as bh, useUpdateRecord as bi, useUpdateSkill as bj, useUpdateSkillSubCategories as bk, useUploadAvatar as bl, useUploadNamePronunciationAudio as bm, useVerifyExternalAccount as bn, useWipePreview as bo, useSearchCompanies as bp, type SifaProviderProps as c, type UpdateEducationVariables as d, type UpdateExternalAccountVariables as e, type UpdatePositionVariables as f, type UpdateProfileLocationVariables as g, type UpdateRecordVariables as h, type UpdateSkillSubCategoriesVariables as i, type UpdateSkillVariables as j, type UseEntitySearchOptions as k, type UseMyGithubPullRequestsParams as l, useActivityFeed as m, useActivityTeaser as n, useAddFeatureAllowlist as o, useAddOrgNotificationEmail as p, useAdminReviewQueues as q, useAppAccountCheck as r, useAppsRegistry as s, useAtFundLink as t, useAccounts as u, useBlueskySuggestions as v, useBulkHideProfileItems as w, useBulkHideStandardPublications as x, useBulkUnhideProfileItems as y, useBulkUnhideStandardPublications as z };
891
+ export { useDeleteReaction as $, type AddFeatureAllowlistVariables as A, useCanonicalSkillSearch as B, type CreateReactionVariables as C, type DeleteReactionVariables as D, useCastRoadmapVote as E, type FollowVariables as F, useCreateConfirmation as G, useCreateEducation as H, useCreateEndorsement as I, useCreateExternalAccount as J, useCreatePosition as K, useCreateProfileLocation as L, useCreateReaction as M, useCreateRecord as N, useCreateSkill as O, type PositionSkillLinkVariables as P, useDebouncedValue as Q, type RemoveFeatureAllowlistVariables as R, SifaProvider as S, useDeleteAccount as T, type UnfollowVariables as U, useDeleteAvatarOverride as V, useDeleteEducation as W, useDeleteExternalAccount as X, useDeleteNamePronunciationAudio as Y, useDeletePosition as Z, useDeleteProfileLocation as _, type CreateRecordVariables as a, useSuggestionCount as a$, useDeleteRecord as a0, useDeleteRepoRecords as a1, useDeleteSkill as a2, useDismissConfirmation as a3, useDismissUnlinkedPosition as a4, useEndorsementCount as a5, useEntitySearch as a6, useExternalAccounts as a7, useFeatureAllowlist as a8, useFeaturedProfile as a9, useOrgDomainVerify as aA, useOrgProfile as aB, usePendingConfirmations as aC, useProfile as aD, useProfileCompleteness as aE, useReactionStatus as aF, useRefreshOrcidPublications as aG, useRefreshPds as aH, useRemoveFeatureAllowlist as aI, useRemoveOrgNotificationEmail as aJ, useRepoInventory as aK, useResetProfile as aL, useResolveEntityDomain as aM, useRetractRoadmapVote as aN, useRevealMarqueDomain as aO, useRevokeConfirmation as aP, useRoadmapVotes as aQ, useSearchFilters as aR, useSearchProfiles as aS, useSelectEntity as aT, useSetExternalAccountPrimary as aU, useSetPositionPrimary as aV, useSetSectionPrimary as aW, useSifaConfig as aX, useSimilarProfiles as aY, useSkillSuggestions as aZ, useStats as a_, useFollow as aa, useFollowers as ab, useFollowing as ac, useFollowingFeed as ad, useFollowingList as ae, useGetProfileView as af, useGivenConfirmations as ag, useHeatmapData as ah, useHiddenActivityItems as ai, useHiddenApps as aj, useHideActivityItem as ak, useHideKeytraceClaim as al, useHideOrcidPublication as am, useHideProfileItem as an, useHideSifaPublication as ao, useHideStandardPublication as ap, useImportSearchEntities as aq, useInboxCounts as ar, useLinkSkillToPosition as as, useMintEntityDomain as at, useMutuals as au, useMyGithubPullRequests as av, useMyRoadmapVotes as aw, useNetworkStreamCount as ax, useOrgClaim as ay, useOrgDomainChallenge as az, type DeleteRecordVariables as b, useSuggestions as b0, useUnfollow as b1, useUnhideActivityItem as b2, useUnhideKeytraceClaim as b3, useUnhideOrcidPublication as b4, useUnhideProfileItem as b5, useUnhideSifaPublication as b6, useUnhideStandardPublication as b7, useUnlinkSkillFromPosition as b8, useUnlinkedPositions as b9, useUnrevealMarqueDomain as ba, useUnsetExternalAccountPrimary as bb, useUnsetPositionPrimary as bc, useUnsetSectionPrimary as bd, useUpdateEducation as be, useUpdateExternalAccount as bf, useUpdateOrgProfile as bg, useUpdatePosition as bh, useUpdateProfileLocation as bi, useUpdateProfileOverride as bj, useUpdateProfileSelf as bk, useUpdateRecord as bl, useUpdateSkill as bm, useUpdateSkillSubCategories as bn, useUploadAvatar as bo, useUploadNamePronunciationAudio as bp, useVerifyExternalAccount as bq, useWipePreview as br, useSearchCompanies as bs, type SifaProviderProps as c, type UpdateEducationVariables as d, type UpdateExternalAccountVariables as e, type UpdatePositionVariables as f, type UpdateProfileLocationVariables as g, type UpdateRecordVariables as h, type UpdateSkillSubCategoriesVariables as i, type UpdateSkillVariables as j, type UseEntitySearchOptions as k, type UseMyGithubPullRequestsParams as l, useActivityFeed as m, useActivityTeaser as n, useAddFeatureAllowlist as o, useAddOrgNotificationEmail as p, useAdminReviewQueues as q, useAppAccountCheck as r, useAppsRegistry as s, useAtFundLink as t, useAccounts as u, useBlueskySuggestions as v, useBulkHideProfileItems as w, useBulkHideStandardPublications as x, useBulkUnhideProfileItems as y, useBulkUnhideStandardPublications as z };