@singi-labs/sifa-sdk 0.22.0 → 0.23.1

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 (70) hide show
  1. package/dist/badge/index.cjs.map +1 -1
  2. package/dist/{follow-profile-CVcA2w1v.d.ts → follow-profile-CCL1tT1x.d.ts} +1 -1
  3. package/dist/{follow-profile-CgLLLQtJ.d.cts → follow-profile-RijPgyp-.d.cts} +1 -1
  4. package/dist/{index-DDh2RLvx.d.ts → index-Bcy443Qi.d.ts} +1 -1
  5. package/dist/{index-BQAKeEoj.d.cts → index-Ck5zdubP.d.cts} +1 -1
  6. package/dist/index.cjs +49 -7
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.cts +11 -11
  9. package/dist/index.d.ts +11 -11
  10. package/dist/index.js +17 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/jsonld/index.d.cts +2 -2
  13. package/dist/jsonld/index.d.ts +2 -2
  14. package/dist/{network-map-2OKh3wSB.d.ts → network-map-BGO1feWW.d.ts} +4 -4
  15. package/dist/{network-map-DJonNOl0.d.cts → network-map-DBiloRce.d.cts} +4 -4
  16. package/dist/{org-settings-BShvhyFp.d.ts → org-settings-BliQdqbB.d.cts} +57 -1
  17. package/dist/{profile-investment-QSwX2GL5.d.cts → profile-investment-BmuXFlZw.d.cts} +2 -0
  18. package/dist/{profile-investment-QSwX2GL5.d.ts → profile-investment-BmuXFlZw.d.ts} +2 -0
  19. package/dist/{org-settings-C73Sin5E.d.cts → profile-self-D59D_rhI.d.ts} +57 -1
  20. package/dist/{profile-summary-DF8-evvA.d.ts → profile-summary-5jNVFUR9.d.ts} +1 -1
  21. package/dist/{profile-summary-BCOKt3qS.d.cts → profile-summary-DJVnLbFV.d.cts} +1 -1
  22. package/dist/publishing/index.cjs +31 -1
  23. package/dist/publishing/index.cjs.map +1 -1
  24. package/dist/query/client.js +20 -1
  25. package/dist/query/client.js.map +1 -1
  26. package/dist/query/fetchers/index.cjs +51 -2
  27. package/dist/query/fetchers/index.cjs.map +1 -1
  28. package/dist/query/fetchers/index.d.cts +9 -9
  29. package/dist/query/fetchers/index.d.ts +9 -9
  30. package/dist/query/fetchers/profile-mutations.js.map +1 -1
  31. package/dist/query/hooks/index.cjs +51 -2
  32. package/dist/query/hooks/index.cjs.map +1 -1
  33. package/dist/query/hooks/index.d.cts +7 -7
  34. package/dist/query/hooks/index.d.ts +7 -7
  35. package/dist/query/index.cjs +20 -1
  36. package/dist/query/index.cjs.map +1 -1
  37. package/dist/query/index.d.cts +12 -12
  38. package/dist/query/index.d.ts +12 -12
  39. package/dist/query/index.js.map +1 -1
  40. package/dist/resume/index.d.cts +2 -2
  41. package/dist/resume/index.d.ts +2 -2
  42. package/dist/schemas/index.cjs +48 -6
  43. package/dist/schemas/index.cjs.map +1 -1
  44. package/dist/schemas/index.d.cts +3 -3
  45. package/dist/schemas/index.d.ts +3 -3
  46. package/dist/schemas/index.js +16 -0
  47. package/dist/schemas/index.js.map +1 -1
  48. package/dist/schemas/profile-self.js +18 -6
  49. package/dist/schemas/profile-self.js.map +1 -1
  50. package/dist/schemas/shared.js +41 -1
  51. package/dist/schemas/shared.js.map +1 -1
  52. package/dist/schemas/write/index.cjs +43 -6
  53. package/dist/schemas/write/index.cjs.map +1 -1
  54. package/dist/schemas/write/index.d.cts +2 -45
  55. package/dist/schemas/write/index.d.ts +2 -45
  56. package/dist/schemas/write/index.js +5 -1
  57. package/dist/schemas/write/index.js.map +1 -1
  58. package/dist/schemas/write/profile-self.js +19 -5
  59. package/dist/schemas/write/profile-self.js.map +1 -1
  60. package/dist/testing/index.d.cts +2 -2
  61. package/dist/testing/index.d.ts +2 -2
  62. package/dist/{types-JydVIhN5.d.cts → types-4MZHuQif.d.cts} +15 -3
  63. package/dist/{types-CkomzDlY.d.ts → types-DJrmm7p0.d.ts} +15 -3
  64. package/dist/{use-user-settings-DQ6Dyby7.d.ts → use-user-settings-BfGwI4x3.d.ts} +11 -6
  65. package/dist/{use-user-settings-Bn6g8bgr.d.cts → use-user-settings-g8ATc9zm.d.cts} +11 -6
  66. package/dist/{user-settings-BdNrDa9O.d.ts → user-settings-C3_y8_8T.d.ts} +6 -11
  67. package/dist/{user-settings-C8JUD4DM.d.cts → user-settings-CuqhXuTE.d.cts} +6 -11
  68. package/dist/{verification-providers-DeyGqaoC.d.cts → verification-providers-Dq6ni6e-.d.cts} +58 -1
  69. package/dist/{verification-providers-DeyGqaoC.d.ts → verification-providers-Dq6ni6e-.d.ts} +58 -1
  70. package/package.json +4 -1
@@ -1,8 +1,8 @@
1
- export { A as ArtifactLink, c as ArtifactLinkSchema, d as AtmosphereFeedItem, e as AtmosphereFeedItemSchema, B as BlobRef, f as BlobRefSchema, E as EMPLOYMENT_STATUS_TOKENS, g as EmploymentVerificationRecord, h as EmploymentVerificationRecordSchema, i as EmploymentVerificationResolution, j as EndorsementConfirmationRecord, k as EndorsementConfirmationRecordSchema, l as EndorsementRecord, m as EndorsementRecordSchema, F as FeedActor, n as FeedActorSchema, o as FeedCursor, p as FollowFeedItem, q as FollowFeedItemSchema, r as FollowFeedPage, s as FollowFeedPageSchema, G as GraphFollowRecord, t as GraphFollowRecordSchema, I as InvestmentAmountSchema, u as OrgEmploymentAttestationRecord, v as OrgEmploymentAttestationRecordSchema, O as OrgProfileRecord, w as OrgProfileRecordSchema, x as PROFILE_INVESTMENT_NSID, y as PROFILE_INVOLVEMENT_NSID, P as PresentationDuration, z as PresentationDurationSchema, C as PresentationLink, D as PresentationLinkSchema, H as ProfileCertificationRecord, J as ProfileCertificationRecordSchema, K as ProfileCourseRecord, L as ProfileCourseRecordSchema, M as ProfileEducationRecord, N as ProfileEducationRecordSchema, Q as ProfileExternalAccountRecord, R as ProfileExternalAccountRecordSchema, S as ProfileHonorRecord, T as ProfileHonorRecordSchema, am as ProfileInvestmentRecord, U as ProfileInvestmentRecordSchema, V as ProfileInvolvementRecord, W as ProfileInvolvementRecordSchema, X as ProfileLanguageRecord, Y as ProfileLanguageRecordSchema, Z as ProfilePositionRecord, _ as ProfilePositionRecordSchema, a as ProfilePresentationDeliveryRecord, $ as ProfilePresentationDeliveryRecordSchema, b as ProfilePresentationRecord, a0 as ProfilePresentationRecordSchema, a1 as ProfileProjectRecord, a2 as ProfileProjectRecordSchema, a3 as ProfilePublicationRecord, a4 as ProfilePublicationRecordSchema, a5 as ProfileSelfRecord, a6 as ProfileSelfRecordSchema, a7 as ProfileSkillRecord, a8 as ProfileSkillRecordSchema, a9 as ProfileVolunteeringRecord, aa as ProfileVolunteeringRecordSchema, ab as PublicationAuthor, ac as PublicationAuthorSchema, ad as RelatedIdentifierSchema, ae as ResolveEmploymentVerificationOptions, af as SifaFeedItem, ag as SifaFeedItemSchema, ah as VERIFICATION_METHOD_TOKENS, ai as decodeFeedCursor, aj as encodeFeedCursor, ak as makeGraphFollowRecordSchema, al as resolveEmploymentVerification } from '../profile-investment-QSwX2GL5.js';
2
- export { a as EntityImportSearchResponse, b as EntityImportSearchResponseSchema, c as EntityMintDomainResponse, d as EntityMintDomainResponseSchema, e as EntityResolveDomainRequest, f as EntityResolveDomainRequestSchema, g as EntityResolveDomainResponse, h as EntityResolveDomainResponseSchema, i as EntitySearchResponse, j as EntitySearchResponseSchema, E as EntitySearchResult, k as EntitySearchResultSchema, l as EntitySelectRequest, m as EntitySelectRequestSchema, n as EntitySelectResponse, o as EntitySelectResponseSchema, F as FEATURE_FLAGS, p as FeatureAllowlistEntry, q as FeatureAllowlistEntrySchema, r as FeatureFlag, s as FollowProfileItem, t as FollowProfilePage, u as FollowProfilePageSchema, v as FollowProfileSchema } from '../follow-profile-CVcA2w1v.js';
1
+ export { A as ArtifactLink, c as ArtifactLinkSchema, d as AtmosphereFeedItem, e as AtmosphereFeedItemSchema, B as BlobRef, f as BlobRefSchema, E as EMPLOYMENT_STATUS_TOKENS, g as EmploymentVerificationRecord, h as EmploymentVerificationRecordSchema, i as EmploymentVerificationResolution, j as EndorsementConfirmationRecord, k as EndorsementConfirmationRecordSchema, l as EndorsementRecord, m as EndorsementRecordSchema, F as FeedActor, n as FeedActorSchema, o as FeedCursor, p as FollowFeedItem, q as FollowFeedItemSchema, r as FollowFeedPage, s as FollowFeedPageSchema, G as GraphFollowRecord, t as GraphFollowRecordSchema, I as InvestmentAmountSchema, u as OrgEmploymentAttestationRecord, v as OrgEmploymentAttestationRecordSchema, O as OrgProfileRecord, w as OrgProfileRecordSchema, x as PROFILE_INVESTMENT_NSID, y as PROFILE_INVOLVEMENT_NSID, P as PresentationDuration, z as PresentationDurationSchema, C as PresentationLink, D as PresentationLinkSchema, H as ProfileCertificationRecord, J as ProfileCertificationRecordSchema, K as ProfileCourseRecord, L as ProfileCourseRecordSchema, M as ProfileEducationRecord, N as ProfileEducationRecordSchema, Q as ProfileExternalAccountRecord, R as ProfileExternalAccountRecordSchema, S as ProfileHonorRecord, T as ProfileHonorRecordSchema, am as ProfileInvestmentRecord, U as ProfileInvestmentRecordSchema, V as ProfileInvolvementRecord, W as ProfileInvolvementRecordSchema, X as ProfileLanguageRecord, Y as ProfileLanguageRecordSchema, Z as ProfilePositionRecord, _ as ProfilePositionRecordSchema, a as ProfilePresentationDeliveryRecord, $ as ProfilePresentationDeliveryRecordSchema, b as ProfilePresentationRecord, a0 as ProfilePresentationRecordSchema, a1 as ProfileProjectRecord, a2 as ProfileProjectRecordSchema, a3 as ProfilePublicationRecord, a4 as ProfilePublicationRecordSchema, a5 as ProfileSelfRecord, a6 as ProfileSelfRecordSchema, a7 as ProfileSkillRecord, a8 as ProfileSkillRecordSchema, a9 as ProfileVolunteeringRecord, aa as ProfileVolunteeringRecordSchema, ab as PublicationAuthor, ac as PublicationAuthorSchema, ad as RelatedIdentifierSchema, ae as ResolveEmploymentVerificationOptions, af as SifaFeedItem, ag as SifaFeedItemSchema, ah as VERIFICATION_METHOD_TOKENS, ai as decodeFeedCursor, aj as encodeFeedCursor, ak as makeGraphFollowRecordSchema, al as resolveEmploymentVerification } from '../profile-investment-BmuXFlZw.js';
2
+ export { a as EntityImportSearchResponse, b as EntityImportSearchResponseSchema, c as EntityMintDomainResponse, d as EntityMintDomainResponseSchema, e as EntityResolveDomainRequest, f as EntityResolveDomainRequestSchema, g as EntityResolveDomainResponse, h as EntityResolveDomainResponseSchema, i as EntitySearchResponse, j as EntitySearchResponseSchema, E as EntitySearchResult, k as EntitySearchResultSchema, l as EntitySelectRequest, m as EntitySelectRequestSchema, n as EntitySelectResponse, o as EntitySelectResponseSchema, F as FEATURE_FLAGS, p as FeatureAllowlistEntry, q as FeatureAllowlistEntrySchema, r as FeatureFlag, s as FollowProfileItem, t as FollowProfilePage, u as FollowProfilePageSchema, v as FollowProfileSchema } from '../follow-profile-CCL1tT1x.js';
3
3
  export { a as GERM_SHOW_BUTTON_TO_VALUES, G as GermDeclarationRecord, b as GermDeclarationRecordSchema, c as GermShowButtonTo } from '../germ-declaration-BQBocGww.js';
4
4
  import { z } from 'zod';
5
- export { A as AgentRef, f as agentRefSchema, g as atUriSchema, i as cidSchema, j as datetimeSchema, k as didSchema, l as externalRecordRefSchema, o as languageTagSchema, p as maxGraphemes, q as partialDateSchema, u as selfLabelsSchema, v as skillRefSchema, w as strongRefSchema, x as uriSchema } from '../verification-providers-DeyGqaoC.js';
5
+ export { A as AgentRef, P as PROFILE_TEXT_LIMITS, f as agentRefSchema, g as atUriSchema, i as cidSchema, j as datetimeSchema, k as didSchema, l as externalRecordRefSchema, o as languageTagSchema, p as lexiconString, q as maxBytes, r as maxGraphemes, s as partialDateSchema, u as profileAboutSchema, v as profileDisplayNameSchema, w as profileHeadlineSchema, x as profileNameSchema, y as profilePronounsSchema, C as selfLabelsSchema, D as skillRefSchema, E as strongRefSchema, F as uriSchema } from '../verification-providers-Dq6ni6e-.js';
6
6
 
7
7
  /**
8
8
  * Relations shipped today. The lexicon declares these as `knownValues`, not an
@@ -94,8 +94,16 @@ import {
94
94
  didSchema,
95
95
  externalRecordRefSchema,
96
96
  languageTagSchema,
97
+ lexiconString,
98
+ maxBytes,
97
99
  maxGraphemes,
100
+ PROFILE_TEXT_LIMITS,
98
101
  partialDateSchema,
102
+ profileAboutSchema,
103
+ profileDisplayNameSchema,
104
+ profileHeadlineSchema,
105
+ profileNameSchema,
106
+ profilePronounsSchema,
99
107
  selfLabelsSchema,
100
108
  skillRefSchema,
101
109
  strongRefSchema,
@@ -139,6 +147,7 @@ export {
139
147
  OrgProfileRecordSchema,
140
148
  PROFILE_INVESTMENT_NSID,
141
149
  PROFILE_INVOLVEMENT_NSID,
150
+ PROFILE_TEXT_LIMITS,
142
151
  PresentationDurationSchema,
143
152
  PresentationLinkSchema,
144
153
  ProfileCertificationRecordSchema,
@@ -170,9 +179,16 @@ export {
170
179
  encodeFeedCursor,
171
180
  externalRecordRefSchema,
172
181
  languageTagSchema,
182
+ lexiconString,
173
183
  makeGraphFollowRecordSchema,
184
+ maxBytes,
174
185
  maxGraphemes,
175
186
  partialDateSchema,
187
+ profileAboutSchema,
188
+ profileDisplayNameSchema,
189
+ profileHeadlineSchema,
190
+ profileNameSchema,
191
+ profilePronounsSchema,
176
192
  resolveEmploymentVerification,
177
193
  selfLabelsSchema,
178
194
  skillRefSchema,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schemas/index.ts"],"sourcesContent":["export { BlobRefSchema, type BlobRef } from './blob-ref.js';\nexport {\n EndorsementConfirmationRecordSchema,\n type EndorsementConfirmationRecord,\n} from './endorsement-confirmation.js';\nexport {\n EntitySearchResultSchema,\n EntitySearchResponseSchema,\n EntitySelectRequestSchema,\n EntitySelectResponseSchema,\n EntityImportSearchResponseSchema,\n EntityResolveDomainRequestSchema,\n EntityResolveDomainResponseSchema,\n EntityMintDomainResponseSchema,\n type EntitySearchResult,\n type EntitySearchResponse,\n type EntitySelectRequest,\n type EntitySelectResponse,\n type EntityImportSearchResponse,\n type EntityResolveDomainRequest,\n type EntityResolveDomainResponse,\n type EntityMintDomainResponse,\n} from './entity.js';\nexport { EndorsementRecordSchema, type EndorsementRecord } from './endorsement.js';\nexport {\n GermDeclarationRecordSchema,\n GERM_SHOW_BUTTON_TO_VALUES,\n type GermDeclarationRecord,\n type GermShowButtonTo,\n} from './germ-declaration.js';\nexport {\n ConfirmationRecordSchema,\n CONFIRMATION_RELATIONS,\n type ConfirmationRecord,\n type ConfirmationRelation,\n} from './confirmation.js';\nexport { OrgProfileRecordSchema, type OrgProfileRecord } from './org-profile.js';\nexport {\n OrgEmploymentAttestationRecordSchema,\n type OrgEmploymentAttestationRecord,\n} from './org-employment-attestation.js';\nexport {\n EmploymentVerificationRecordSchema,\n EMPLOYMENT_STATUS_TOKENS,\n VERIFICATION_METHOD_TOKENS,\n resolveEmploymentVerification,\n type EmploymentVerificationRecord,\n type EmploymentVerificationResolution,\n type ResolveEmploymentVerificationOptions,\n} from './employment-verification.js';\nexport {\n GraphFollowRecordSchema,\n makeGraphFollowRecordSchema,\n type GraphFollowRecord,\n} from './graph-follow.js';\nexport {\n FEATURE_FLAGS,\n FeatureAllowlistEntrySchema,\n FollowProfilePageSchema,\n FollowProfileSchema,\n type FeatureAllowlistEntry,\n type FeatureFlag,\n type FollowProfileItem,\n type FollowProfilePage,\n} from './follow-profile.js';\nexport {\n AtmosphereFeedItemSchema,\n FeedActorSchema,\n FollowFeedItemSchema,\n FollowFeedPageSchema,\n SifaFeedItemSchema,\n decodeFeedCursor,\n encodeFeedCursor,\n type AtmosphereFeedItem,\n type FeedActor,\n type FeedCursor,\n type FollowFeedItem,\n type FollowFeedPage,\n type SifaFeedItem,\n} from './feed.js';\nexport {\n ProfileCertificationRecordSchema,\n type ProfileCertificationRecord,\n} from './profile-certification.js';\nexport { ProfileCourseRecordSchema, type ProfileCourseRecord } from './profile-course.js';\nexport { ProfileEducationRecordSchema, type ProfileEducationRecord } from './profile-education.js';\nexport {\n ProfileExternalAccountRecordSchema,\n type ProfileExternalAccountRecord,\n} from './profile-external-account.js';\nexport { ProfileHonorRecordSchema, type ProfileHonorRecord } from './profile-honor.js';\nexport {\n ArtifactLinkSchema,\n PROFILE_INVOLVEMENT_NSID,\n ProfileInvolvementRecordSchema,\n type ArtifactLink,\n type ProfileInvolvementRecord,\n} from './profile-involvement.js';\nexport { ProfileLanguageRecordSchema, type ProfileLanguageRecord } from './profile-language.js';\nexport { ProfilePositionRecordSchema, type ProfilePositionRecord } from './profile-position.js';\nexport {\n PresentationDurationSchema,\n PresentationLinkSchema,\n ProfilePresentationRecordSchema,\n type PresentationDuration,\n type PresentationLink,\n type ProfilePresentationRecord,\n} from './profile-presentation.js';\nexport {\n ProfilePresentationDeliveryRecordSchema,\n type ProfilePresentationDeliveryRecord,\n} from './profile-presentation-delivery.js';\nexport { ProfileProjectRecordSchema, type ProfileProjectRecord } from './profile-project.js';\nexport {\n ProfilePublicationRecordSchema,\n PublicationAuthorSchema,\n RelatedIdentifierSchema,\n type ProfilePublicationRecord,\n type PublicationAuthor,\n} from './profile-publication.js';\nexport { ProfileSelfRecordSchema, type ProfileSelfRecord } from './profile-self.js';\nexport { ProfileSkillRecordSchema, type ProfileSkillRecord } from './profile-skill.js';\nexport {\n ProfileVolunteeringRecordSchema,\n type ProfileVolunteeringRecord,\n} from './profile-volunteering.js';\nexport {\n agentRefSchema,\n atUriSchema,\n cidSchema,\n datetimeSchema,\n didSchema,\n externalRecordRefSchema,\n languageTagSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n skillRefSchema,\n strongRefSchema,\n uriSchema,\n type AgentRef,\n} from './shared.js';\nexport {\n ProfileInvestmentRecordSchema,\n InvestmentAmountSchema,\n PROFILE_INVESTMENT_NSID,\n type ProfileInvestmentRecord,\n} from './profile-investment.js';\n"],"mappings":";AAAA,SAAS,qBAAmC;AAC5C;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OASK;AACP,SAAS,+BAAuD;AAChE;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP,SAAS,8BAAqD;AAC9D;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAOK;AACP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,iCAA2D;AACpE,SAAS,oCAAiE;AAC1E;AAAA,EACE;AAAA,OAEK;AACP,SAAS,gCAAyD;AAClE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mCAA+D;AACxE,SAAS,mCAA+D;AACxE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,kCAA6D;AACtE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,+BAAuD;AAChE,SAAS,gCAAyD;AAClE;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;","names":[]}
1
+ {"version":3,"sources":["../../src/schemas/index.ts"],"sourcesContent":["export { BlobRefSchema, type BlobRef } from './blob-ref.js';\nexport {\n EndorsementConfirmationRecordSchema,\n type EndorsementConfirmationRecord,\n} from './endorsement-confirmation.js';\nexport {\n EntitySearchResultSchema,\n EntitySearchResponseSchema,\n EntitySelectRequestSchema,\n EntitySelectResponseSchema,\n EntityImportSearchResponseSchema,\n EntityResolveDomainRequestSchema,\n EntityResolveDomainResponseSchema,\n EntityMintDomainResponseSchema,\n type EntitySearchResult,\n type EntitySearchResponse,\n type EntitySelectRequest,\n type EntitySelectResponse,\n type EntityImportSearchResponse,\n type EntityResolveDomainRequest,\n type EntityResolveDomainResponse,\n type EntityMintDomainResponse,\n} from './entity.js';\nexport { EndorsementRecordSchema, type EndorsementRecord } from './endorsement.js';\nexport {\n GermDeclarationRecordSchema,\n GERM_SHOW_BUTTON_TO_VALUES,\n type GermDeclarationRecord,\n type GermShowButtonTo,\n} from './germ-declaration.js';\nexport {\n ConfirmationRecordSchema,\n CONFIRMATION_RELATIONS,\n type ConfirmationRecord,\n type ConfirmationRelation,\n} from './confirmation.js';\nexport { OrgProfileRecordSchema, type OrgProfileRecord } from './org-profile.js';\nexport {\n OrgEmploymentAttestationRecordSchema,\n type OrgEmploymentAttestationRecord,\n} from './org-employment-attestation.js';\nexport {\n EmploymentVerificationRecordSchema,\n EMPLOYMENT_STATUS_TOKENS,\n VERIFICATION_METHOD_TOKENS,\n resolveEmploymentVerification,\n type EmploymentVerificationRecord,\n type EmploymentVerificationResolution,\n type ResolveEmploymentVerificationOptions,\n} from './employment-verification.js';\nexport {\n GraphFollowRecordSchema,\n makeGraphFollowRecordSchema,\n type GraphFollowRecord,\n} from './graph-follow.js';\nexport {\n FEATURE_FLAGS,\n FeatureAllowlistEntrySchema,\n FollowProfilePageSchema,\n FollowProfileSchema,\n type FeatureAllowlistEntry,\n type FeatureFlag,\n type FollowProfileItem,\n type FollowProfilePage,\n} from './follow-profile.js';\nexport {\n AtmosphereFeedItemSchema,\n FeedActorSchema,\n FollowFeedItemSchema,\n FollowFeedPageSchema,\n SifaFeedItemSchema,\n decodeFeedCursor,\n encodeFeedCursor,\n type AtmosphereFeedItem,\n type FeedActor,\n type FeedCursor,\n type FollowFeedItem,\n type FollowFeedPage,\n type SifaFeedItem,\n} from './feed.js';\nexport {\n ProfileCertificationRecordSchema,\n type ProfileCertificationRecord,\n} from './profile-certification.js';\nexport { ProfileCourseRecordSchema, type ProfileCourseRecord } from './profile-course.js';\nexport { ProfileEducationRecordSchema, type ProfileEducationRecord } from './profile-education.js';\nexport {\n ProfileExternalAccountRecordSchema,\n type ProfileExternalAccountRecord,\n} from './profile-external-account.js';\nexport { ProfileHonorRecordSchema, type ProfileHonorRecord } from './profile-honor.js';\nexport {\n ArtifactLinkSchema,\n PROFILE_INVOLVEMENT_NSID,\n ProfileInvolvementRecordSchema,\n type ArtifactLink,\n type ProfileInvolvementRecord,\n} from './profile-involvement.js';\nexport { ProfileLanguageRecordSchema, type ProfileLanguageRecord } from './profile-language.js';\nexport { ProfilePositionRecordSchema, type ProfilePositionRecord } from './profile-position.js';\nexport {\n PresentationDurationSchema,\n PresentationLinkSchema,\n ProfilePresentationRecordSchema,\n type PresentationDuration,\n type PresentationLink,\n type ProfilePresentationRecord,\n} from './profile-presentation.js';\nexport {\n ProfilePresentationDeliveryRecordSchema,\n type ProfilePresentationDeliveryRecord,\n} from './profile-presentation-delivery.js';\nexport { ProfileProjectRecordSchema, type ProfileProjectRecord } from './profile-project.js';\nexport {\n ProfilePublicationRecordSchema,\n PublicationAuthorSchema,\n RelatedIdentifierSchema,\n type ProfilePublicationRecord,\n type PublicationAuthor,\n} from './profile-publication.js';\nexport { ProfileSelfRecordSchema, type ProfileSelfRecord } from './profile-self.js';\nexport { ProfileSkillRecordSchema, type ProfileSkillRecord } from './profile-skill.js';\nexport {\n ProfileVolunteeringRecordSchema,\n type ProfileVolunteeringRecord,\n} from './profile-volunteering.js';\nexport {\n agentRefSchema,\n atUriSchema,\n cidSchema,\n datetimeSchema,\n didSchema,\n externalRecordRefSchema,\n languageTagSchema,\n lexiconString,\n maxBytes,\n maxGraphemes,\n PROFILE_TEXT_LIMITS,\n partialDateSchema,\n profileAboutSchema,\n profileDisplayNameSchema,\n profileHeadlineSchema,\n profileNameSchema,\n profilePronounsSchema,\n selfLabelsSchema,\n skillRefSchema,\n strongRefSchema,\n uriSchema,\n type AgentRef,\n} from './shared.js';\nexport {\n ProfileInvestmentRecordSchema,\n InvestmentAmountSchema,\n PROFILE_INVESTMENT_NSID,\n type ProfileInvestmentRecord,\n} from './profile-investment.js';\n"],"mappings":";AAAA,SAAS,qBAAmC;AAC5C;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OASK;AACP,SAAS,+BAAuD;AAChE;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP,SAAS,8BAAqD;AAC9D;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAOK;AACP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,iCAA2D;AACpE,SAAS,oCAAiE;AAC1E;AAAA,EACE;AAAA,OAEK;AACP,SAAS,gCAAyD;AAClE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,mCAA+D;AACxE,SAAS,mCAA+D;AACxE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,kCAA6D;AACtE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,+BAAuD;AAChE,SAAS,gCAAyD;AAClE;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;","names":[]}
@@ -1,13 +1,25 @@
1
1
  // src/schemas/profile-self.ts
2
2
  import { z } from "zod";
3
- import { datetimeSchema, languageTagSchema, maxGraphemes, selfLabelsSchema } from "./shared.js";
3
+ import {
4
+ datetimeSchema,
5
+ languageTagSchema,
6
+ maxGraphemes,
7
+ profileAboutSchema,
8
+ profileDisplayNameSchema,
9
+ profileHeadlineSchema,
10
+ profileNameSchema,
11
+ profilePronounsSchema,
12
+ selfLabelsSchema
13
+ } from "./shared.js";
4
14
  var ProfileSelfRecordSchema = z.object({
5
- headline: z.string().refine(maxGraphemes(120)).max(1200).optional(),
6
- about: z.string().refine(maxGraphemes(5e3)).max(5e4).optional(),
15
+ displayName: profileDisplayNameSchema.optional(),
16
+ pronouns: profilePronounsSchema.optional(),
17
+ headline: profileHeadlineSchema.optional(),
18
+ about: profileAboutSchema.optional(),
7
19
  industry: z.string().refine(maxGraphemes(100)).max(1e3).optional(),
8
- givenName: z.string().refine(maxGraphemes(64)).max(640).optional(),
9
- familyName: z.string().refine(maxGraphemes(64)).max(640).optional(),
10
- namePronunciation: z.string().refine(maxGraphemes(64)).max(640).optional(),
20
+ givenName: profileNameSchema.optional(),
21
+ familyName: profileNameSchema.optional(),
22
+ namePronunciation: profileNameSchema.optional(),
11
23
  location: z.unknown().optional(),
12
24
  openTo: z.array(z.string()).max(10).optional(),
13
25
  preferredWorkplace: z.array(z.string()).max(3).optional(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schemas/profile-self.ts"],"sourcesContent":["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 /**\n * Where the avatar comes from instead of the avatar blob. Open per the\n * lexicon (`knownValues`); Sifa renders `actor.rpg.sprite`, the user's\n * rpg.actor character.\n */\n avatarSource: z.string().max(128).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSelfRecord = z.infer<typeof ProfileSelfRecordSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,gBAAgB,mBAAmB,cAAc,wBAAwB;AAS3E,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,UAAU,EAAE,OAAO,EAAE,OAAO,aAAa,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,EAClE,OAAO,EAAE,OAAO,EAAE,OAAO,aAAa,GAAI,CAAC,EAAE,IAAI,GAAK,EAAE,SAAS;AAAA,EACjE,UAAU,EAAE,OAAO,EAAE,OAAO,aAAa,GAAG,CAAC,EAAE,IAAI,GAAI,EAAE,SAAS;AAAA,EAClE,WAAW,EAAE,OAAO,EAAE,OAAO,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjE,YAAY,EAAE,OAAO,EAAE,OAAO,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAClE,mBAAmB,EAAE,OAAO,EAAE,OAAO,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACzE,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EAC7C,oBAAoB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxD,OAAO,EAAE,MAAM,iBAAiB,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClD,QAAQ,iBAAiB,SAAS;AAAA,EAClC,cAAc,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC3C,WAAW;AACb,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/schemas/profile-self.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport {\n datetimeSchema,\n languageTagSchema,\n maxGraphemes,\n profileAboutSchema,\n profileDisplayNameSchema,\n profileHeadlineSchema,\n profileNameSchema,\n profilePronounsSchema,\n selfLabelsSchema,\n} 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 displayName: profileDisplayNameSchema.optional(),\n pronouns: profilePronounsSchema.optional(),\n headline: profileHeadlineSchema.optional(),\n about: profileAboutSchema.optional(),\n industry: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n givenName: profileNameSchema.optional(),\n familyName: profileNameSchema.optional(),\n namePronunciation: profileNameSchema.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 /**\n * Where the avatar comes from instead of the avatar blob. Open per the\n * lexicon (`knownValues`); Sifa renders `actor.rpg.sprite`, the user's\n * rpg.actor character.\n */\n avatarSource: z.string().max(128).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSelfRecord = z.infer<typeof ProfileSelfRecordSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASA,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,aAAa,yBAAyB,SAAS;AAAA,EAC/C,UAAU,sBAAsB,SAAS;AAAA,EACzC,UAAU,sBAAsB,SAAS;AAAA,EACzC,OAAO,mBAAmB,SAAS;AAAA,EACnC,UAAU,EAAE,OAAO,EAAE,OAAO,aAAa,GAAG,CAAC,EAAE,IAAI,GAAI,EAAE,SAAS;AAAA,EAClE,WAAW,kBAAkB,SAAS;AAAA,EACtC,YAAY,kBAAkB,SAAS;AAAA,EACvC,mBAAmB,kBAAkB,SAAS;AAAA,EAC9C,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EAC7C,oBAAoB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxD,OAAO,EAAE,MAAM,iBAAiB,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClD,QAAQ,iBAAiB,SAAS;AAAA,EAClC,cAAc,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC3C,WAAW;AACb,CAAC;","names":[]}
@@ -1,8 +1,8 @@
1
1
  // src/schemas/shared.ts
2
2
  import { z } from "zod";
3
3
  function maxGraphemes(max) {
4
+ const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
4
5
  return (value) => {
5
- const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
6
6
  let count = 0;
7
7
  for (const _ of segmenter.segment(value)) {
8
8
  count++;
@@ -11,6 +11,38 @@ function maxGraphemes(max) {
11
11
  return true;
12
12
  };
13
13
  }
14
+ function maxBytes(max) {
15
+ const encoder = new TextEncoder();
16
+ return (value) => {
17
+ if (value.length * 3 <= max) return true;
18
+ return encoder.encode(value).length <= max;
19
+ };
20
+ }
21
+ function lexiconString(graphemes, bytes) {
22
+ return z.string().refine(maxGraphemes(graphemes), {
23
+ message: `Must be at most ${graphemes} characters`,
24
+ abort: true
25
+ }).refine(maxBytes(bytes), {
26
+ message: "This text is too long. Emoji and some scripts take more space, so shorten it a little."
27
+ });
28
+ }
29
+ var PROFILE_TEXT_LIMITS = {
30
+ displayName: { graphemes: 64, bytes: 640 },
31
+ givenName: { graphemes: 64, bytes: 640 },
32
+ familyName: { graphemes: 64, bytes: 640 },
33
+ namePronunciation: { graphemes: 64, bytes: 640 },
34
+ pronouns: { graphemes: 20, bytes: 200 },
35
+ headline: { graphemes: 120, bytes: 1200 },
36
+ about: { graphemes: 5e3, bytes: 5e4 }
37
+ };
38
+ function profileText(limit) {
39
+ return lexiconString(limit.graphemes, limit.bytes);
40
+ }
41
+ var profileDisplayNameSchema = profileText(PROFILE_TEXT_LIMITS.displayName);
42
+ var profileNameSchema = profileText(PROFILE_TEXT_LIMITS.givenName);
43
+ var profilePronounsSchema = profileText(PROFILE_TEXT_LIMITS.pronouns);
44
+ var profileHeadlineSchema = profileText(PROFILE_TEXT_LIMITS.headline);
45
+ var profileAboutSchema = profileText(PROFILE_TEXT_LIMITS.about);
14
46
  var didSchema = z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, "Invalid DID");
15
47
  var datetimeSchema = z.string().datetime({ offset: true });
16
48
  var partialDateSchema = z.string().regex(/^\d{4}(-\d{2}(-\d{2}(T.+)?)?)?$/, "Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime");
@@ -39,6 +71,7 @@ var selfLabelsSchema = z.object({
39
71
  values: z.array(z.object({ val: z.string() }))
40
72
  });
41
73
  export {
74
+ PROFILE_TEXT_LIMITS,
42
75
  agentRefSchema,
43
76
  atUriSchema,
44
77
  cidSchema,
@@ -46,8 +79,15 @@ export {
46
79
  didSchema,
47
80
  externalRecordRefSchema,
48
81
  languageTagSchema,
82
+ lexiconString,
83
+ maxBytes,
49
84
  maxGraphemes,
50
85
  partialDateSchema,
86
+ profileAboutSchema,
87
+ profileDisplayNameSchema,
88
+ profileHeadlineSchema,
89
+ profileNameSchema,
90
+ profilePronounsSchema,
51
91
  selfLabelsSchema,
52
92
  skillRefSchema,
53
93
  strongRefSchema,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schemas/shared.ts"],"sourcesContent":["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"],"mappings":";AAAA,SAAS,SAAS;AASX,SAAS,aAAa,KAAa;AACxC,SAAO,CAAC,UAA2B;AACjC,UAAM,YAAY,IAAI,KAAK,UAAU,QAAW,EAAE,aAAa,WAAW,CAAC;AAC3E,QAAI,QAAQ;AACZ,eAAW,KAAK,UAAU,QAAQ,KAAK,GAAG;AACxC;AACA,UAAI,QAAQ,IAAK,QAAO;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AACF;AAGO,IAAM,YAAY,EAAE,OAAO,EAAE,MAAM,kCAAkC,aAAa;AAGlF,IAAM,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAW3D,IAAM,oBAAoB,EAC9B,OAAO,EACP,MAAM,mCAAmC,mDAAmD;AAGxF,IAAM,cAAc,EAAE,OAAO,EAAE,MAAM,mBAAmB,gBAAgB;AAGxE,IAAM,YAAY,EACtB,OAAO,EACP,MAAM,mDAAmD,aAAa;AAGlE,IAAM,oBAAoB,EAC9B,OAAO,EACP,MAAM,uCAAuC,6BAA6B;AAGtE,IAAM,YAAY,EAAE,OAAO,EAAE,IAAI;AAMjC,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,KAAK;AAAA,EACL,KAAK;AACP,CAAC;AAQM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,KAAK;AACP,CAAC;AAQM,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,KAAK;AAAA,EACL,KAAK,UAAU,SAAS;AAC1B,CAAC;AAWM,IAAM,iBAAiB,EAC3B,OAAO;AAAA,EACN,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,aAAa,GAAG,CAAC,EAAE,IAAI,IAAI;AAAA,EAC1D,KAAK,UAAU,SAAS;AAAA,EACxB,WAAW,UAAU,SAAS;AAChC,CAAC,EACA,YAAY;AASR,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,OAAO,EAAE,QAAQ,mCAAmC,EAAE,SAAS;AAAA,EAC/D,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/schemas/shared.ts"],"sourcesContent":["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 const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n return (value: string): boolean => {\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/**\n * Byte-length refinement matching the AT Protocol lexicon string `maxLength`\n * constraint, which counts UTF-8 bytes (not UTF-16 code units). Uses\n * `TextEncoder` rather than `Buffer` so it also runs in browsers.\n */\nexport function maxBytes(max: number) {\n const encoder = new TextEncoder();\n return (value: string): boolean => {\n // UTF-8 uses at most 3 bytes per UTF-16 unit, so short strings cannot exceed `max`.\n if (value.length * 3 <= max) return true;\n return encoder.encode(value).length <= max;\n };\n}\n\n/**\n * A string capped by a lexicon `maxGraphemes` (user-perceived characters) and\n * `maxLength` (UTF-8 bytes) pair. The grapheme check aborts first, so an\n * over-long value reports only the character error.\n */\nexport function lexiconString(graphemes: number, bytes: number) {\n return z\n .string()\n .refine(maxGraphemes(graphemes), {\n message: `Must be at most ${graphemes} characters`,\n abort: true,\n })\n .refine(maxBytes(bytes), {\n message:\n 'This text is too long. Emoji and some scripts take more space, so shorten it a little.',\n });\n}\n\n/**\n * Lexicon limits for the `id.sifa.profile.self` text fields: `graphemes` is the\n * `maxGraphemes` cap (user-perceived characters), `bytes` the `maxLength` cap\n * (UTF-8 bytes). The field schemas below are built from these numbers, so\n * forms can show counters and caps without duplicating them.\n */\nexport const PROFILE_TEXT_LIMITS = {\n displayName: { graphemes: 64, bytes: 640 },\n givenName: { graphemes: 64, bytes: 640 },\n familyName: { graphemes: 64, bytes: 640 },\n namePronunciation: { graphemes: 64, bytes: 640 },\n pronouns: { graphemes: 20, bytes: 200 },\n headline: { graphemes: 120, bytes: 1200 },\n about: { graphemes: 5000, bytes: 50000 },\n} as const;\n\nfunction profileText(limit: { readonly graphemes: number; readonly bytes: number }) {\n return lexiconString(limit.graphemes, limit.bytes);\n}\n\n/**\n * Field schemas for `id.sifa.profile.self`, shared by the record schema and the\n * write schemas so the lexicon limits live in one place.\n */\nexport const profileDisplayNameSchema = profileText(PROFILE_TEXT_LIMITS.displayName);\nexport const profileNameSchema = profileText(PROFILE_TEXT_LIMITS.givenName);\nexport const profilePronounsSchema = profileText(PROFILE_TEXT_LIMITS.pronouns);\nexport const profileHeadlineSchema = profileText(PROFILE_TEXT_LIMITS.headline);\nexport const profileAboutSchema = profileText(PROFILE_TEXT_LIMITS.about);\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"],"mappings":";AAAA,SAAS,SAAS;AASX,SAAS,aAAa,KAAa;AACxC,QAAM,YAAY,IAAI,KAAK,UAAU,QAAW,EAAE,aAAa,WAAW,CAAC;AAC3E,SAAO,CAAC,UAA2B;AACjC,QAAI,QAAQ;AACZ,eAAW,KAAK,UAAU,QAAQ,KAAK,GAAG;AACxC;AACA,UAAI,QAAQ,IAAK,QAAO;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AACF;AAOO,SAAS,SAAS,KAAa;AACpC,QAAM,UAAU,IAAI,YAAY;AAChC,SAAO,CAAC,UAA2B;AAEjC,QAAI,MAAM,SAAS,KAAK,IAAK,QAAO;AACpC,WAAO,QAAQ,OAAO,KAAK,EAAE,UAAU;AAAA,EACzC;AACF;AAOO,SAAS,cAAc,WAAmB,OAAe;AAC9D,SAAO,EACJ,OAAO,EACP,OAAO,aAAa,SAAS,GAAG;AAAA,IAC/B,SAAS,mBAAmB,SAAS;AAAA,IACrC,OAAO;AAAA,EACT,CAAC,EACA,OAAO,SAAS,KAAK,GAAG;AAAA,IACvB,SACE;AAAA,EACJ,CAAC;AACL;AAQO,IAAM,sBAAsB;AAAA,EACjC,aAAa,EAAE,WAAW,IAAI,OAAO,IAAI;AAAA,EACzC,WAAW,EAAE,WAAW,IAAI,OAAO,IAAI;AAAA,EACvC,YAAY,EAAE,WAAW,IAAI,OAAO,IAAI;AAAA,EACxC,mBAAmB,EAAE,WAAW,IAAI,OAAO,IAAI;AAAA,EAC/C,UAAU,EAAE,WAAW,IAAI,OAAO,IAAI;AAAA,EACtC,UAAU,EAAE,WAAW,KAAK,OAAO,KAAK;AAAA,EACxC,OAAO,EAAE,WAAW,KAAM,OAAO,IAAM;AACzC;AAEA,SAAS,YAAY,OAA+D;AAClF,SAAO,cAAc,MAAM,WAAW,MAAM,KAAK;AACnD;AAMO,IAAM,2BAA2B,YAAY,oBAAoB,WAAW;AAC5E,IAAM,oBAAoB,YAAY,oBAAoB,SAAS;AACnE,IAAM,wBAAwB,YAAY,oBAAoB,QAAQ;AACtE,IAAM,wBAAwB,YAAY,oBAAoB,QAAQ;AACtE,IAAM,qBAAqB,YAAY,oBAAoB,KAAK;AAGhE,IAAM,YAAY,EAAE,OAAO,EAAE,MAAM,kCAAkC,aAAa;AAGlF,IAAM,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAW3D,IAAM,oBAAoB,EAC9B,OAAO,EACP,MAAM,mCAAmC,mDAAmD;AAGxF,IAAM,cAAc,EAAE,OAAO,EAAE,MAAM,mBAAmB,gBAAgB;AAGxE,IAAM,YAAY,EACtB,OAAO,EACP,MAAM,mDAAmD,aAAa;AAGlE,IAAM,oBAAoB,EAC9B,OAAO,EACP,MAAM,uCAAuC,6BAA6B;AAGtE,IAAM,YAAY,EAAE,OAAO,EAAE,IAAI;AAMjC,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,KAAK;AAAA,EACL,KAAK;AACP,CAAC;AAQM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,KAAK;AACP,CAAC;AAQM,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,KAAK;AAAA,EACL,KAAK,UAAU,SAAS;AAC1B,CAAC;AAWM,IAAM,iBAAiB,EAC3B,OAAO;AAAA,EACN,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,aAAa,GAAG,CAAC,EAAE,IAAI,IAAI;AAAA,EAC1D,KAAK,UAAU,SAAS;AAAA,EACxB,WAAW,UAAU,SAAS;AAChC,CAAC,EACA,YAAY;AASR,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,OAAO,EAAE,QAAQ,mCAAmC,EAAE,SAAS;AAAA,EAC/D,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;","names":[]}
@@ -232,8 +232,8 @@ var OrgEmploymentAttestationWriteSchema = zod.z.object({
232
232
  createdAt: zod.z.string()
233
233
  });
234
234
  function maxGraphemes(max) {
235
+ const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
235
236
  return (value) => {
236
- const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
237
237
  let count = 0;
238
238
  for (const _ of segmenter.segment(value)) {
239
239
  count++;
@@ -242,6 +242,36 @@ function maxGraphemes(max) {
242
242
  return true;
243
243
  };
244
244
  }
245
+ function maxBytes(max) {
246
+ const encoder = new TextEncoder();
247
+ return (value) => {
248
+ if (value.length * 3 <= max) return true;
249
+ return encoder.encode(value).length <= max;
250
+ };
251
+ }
252
+ function lexiconString(graphemes, bytes) {
253
+ return zod.z.string().refine(maxGraphemes(graphemes), {
254
+ message: `Must be at most ${graphemes} characters`,
255
+ abort: true
256
+ }).refine(maxBytes(bytes), {
257
+ message: "This text is too long. Emoji and some scripts take more space, so shorten it a little."
258
+ });
259
+ }
260
+ var PROFILE_TEXT_LIMITS = {
261
+ displayName: { graphemes: 64, bytes: 640 },
262
+ givenName: { graphemes: 64, bytes: 640 },
263
+ pronouns: { graphemes: 20, bytes: 200 },
264
+ headline: { graphemes: 120, bytes: 1200 },
265
+ about: { graphemes: 5e3, bytes: 5e4 }
266
+ };
267
+ function profileText(limit) {
268
+ return lexiconString(limit.graphemes, limit.bytes);
269
+ }
270
+ var profileDisplayNameSchema = profileText(PROFILE_TEXT_LIMITS.displayName);
271
+ var profileNameSchema = profileText(PROFILE_TEXT_LIMITS.givenName);
272
+ var profilePronounsSchema = profileText(PROFILE_TEXT_LIMITS.pronouns);
273
+ var profileHeadlineSchema = profileText(PROFILE_TEXT_LIMITS.headline);
274
+ var profileAboutSchema = profileText(PROFILE_TEXT_LIMITS.about);
245
275
  var didSchema = zod.z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, "Invalid DID");
246
276
  var datetimeSchema = zod.z.string().datetime({ offset: true });
247
277
  zod.z.string().regex(/^\d{4}(-\d{2}(-\d{2}(T.+)?)?)?$/, "Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime");
@@ -588,11 +618,11 @@ var RPG_AVATAR_SOURCE = "actor.rpg.sprite";
588
618
 
589
619
  // src/schemas/write/profile-self.ts
590
620
  var ProfileSelfWriteSchema = zod.z.object({
591
- headline: zod.z.string().max(300).optional(),
592
- about: zod.z.string().max(5e4).optional(),
593
- givenName: zod.z.string().max(640).optional(),
594
- familyName: zod.z.string().max(640).optional(),
595
- namePronunciation: zod.z.string().max(640).optional(),
621
+ headline: profileHeadlineSchema.optional(),
622
+ about: profileAboutSchema.optional(),
623
+ givenName: profileNameSchema.optional(),
624
+ familyName: profileNameSchema.optional(),
625
+ namePronunciation: profileNameSchema.optional(),
596
626
  industries: zod.z.array(
597
627
  zod.z.object({
598
628
  industry: zod.z.string().max(100),
@@ -614,6 +644,12 @@ var ProfileSelfWriteSchema = zod.z.object({
614
644
  */
615
645
  avatarSource: zod.z.enum([RPG_AVATAR_SOURCE]).nullable().optional()
616
646
  }).passthrough();
647
+ var ProfileOverrideWriteSchema = zod.z.object({
648
+ headline: profileHeadlineSchema.nullish(),
649
+ about: profileAboutSchema.nullish(),
650
+ displayName: profileDisplayNameSchema.nullish(),
651
+ pronouns: profilePronounsSchema.nullish()
652
+ });
617
653
 
618
654
  // src/format/doi.ts
619
655
  function normalizeDoi(value) {
@@ -692,6 +728,7 @@ exports.PositionWriteSchema = PositionWriteSchema;
692
728
  exports.PresentationDeliveryWriteSchema = PresentationDeliveryWriteSchema;
693
729
  exports.PresentationWriteSchema = PresentationWriteSchema;
694
730
  exports.ProfileLocationWriteSchema = ProfileLocationWriteSchema;
731
+ exports.ProfileOverrideWriteSchema = ProfileOverrideWriteSchema;
695
732
  exports.ProfileSelfWriteSchema = ProfileSelfWriteSchema;
696
733
  exports.ProjectWriteSchema = ProjectWriteSchema;
697
734
  exports.PublicationWriteSchema = PublicationWriteSchema;