@singi-labs/sifa-sdk 0.21.0 → 0.23.0

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 (87) hide show
  1. package/dist/{follow-profile-CgLLLQtJ.d.cts → follow-profile-BG_6eZwW.d.cts} +1 -1
  2. package/dist/{follow-profile-CVcA2w1v.d.ts → follow-profile-DGZzB5iM.d.ts} +1 -1
  3. package/dist/{index-BQAKeEoj.d.cts → index-BKvI1Bvg.d.cts} +1 -1
  4. package/dist/{index-DDh2RLvx.d.ts → index-BR8LDBo1.d.ts} +1 -1
  5. package/dist/index.cjs +35 -7
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +11 -11
  8. package/dist/index.d.ts +11 -11
  9. package/dist/index.js +3 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/jsonld/index.d.cts +2 -2
  12. package/dist/jsonld/index.d.ts +2 -2
  13. package/dist/{network-map-2OKh3wSB.d.ts → network-map-CMyjk6jc.d.ts} +4 -4
  14. package/dist/{network-map-DJonNOl0.d.cts → network-map-CqLYThmY.d.cts} +4 -4
  15. package/dist/{org-settings-BShvhyFp.d.ts → org-settings-BliQdqbB.d.cts} +57 -1
  16. package/dist/{profile-investment-QSwX2GL5.d.cts → profile-investment-BmuXFlZw.d.cts} +2 -0
  17. package/dist/{profile-investment-QSwX2GL5.d.ts → profile-investment-BmuXFlZw.d.ts} +2 -0
  18. package/dist/{org-settings-C73Sin5E.d.cts → profile-self-D59D_rhI.d.ts} +57 -1
  19. package/dist/{profile-summary-BCOKt3qS.d.cts → profile-summary-CoTNGDpt.d.cts} +1 -1
  20. package/dist/{profile-summary-DF8-evvA.d.ts → profile-summary-Sv6rqQbx.d.ts} +1 -1
  21. package/dist/publishing/index.cjs +21 -1
  22. package/dist/publishing/index.cjs.map +1 -1
  23. package/dist/query/fetchers/index.cjs +21 -1
  24. package/dist/query/fetchers/index.cjs.map +1 -1
  25. package/dist/query/fetchers/index.d.cts +9 -9
  26. package/dist/query/fetchers/index.d.ts +9 -9
  27. package/dist/query/fetchers/profile-mutations.js.map +1 -1
  28. package/dist/query/hooks/index.cjs +21 -1
  29. package/dist/query/hooks/index.cjs.map +1 -1
  30. package/dist/query/hooks/index.d.cts +7 -7
  31. package/dist/query/hooks/index.d.ts +7 -7
  32. package/dist/query/index.cjs.map +1 -1
  33. package/dist/query/index.d.cts +12 -12
  34. package/dist/query/index.d.ts +12 -12
  35. package/dist/resume/index.d.cts +2 -2
  36. package/dist/resume/index.d.ts +2 -2
  37. package/dist/schemas/index.cjs +29 -6
  38. package/dist/schemas/index.cjs.map +1 -1
  39. package/dist/schemas/index.d.cts +3 -3
  40. package/dist/schemas/index.d.ts +3 -3
  41. package/dist/schemas/index.js +2 -0
  42. package/dist/schemas/index.js.map +1 -1
  43. package/dist/schemas/profile-self.js +18 -6
  44. package/dist/schemas/profile-self.js.map +1 -1
  45. package/dist/schemas/shared.js +28 -1
  46. package/dist/schemas/shared.js.map +1 -1
  47. package/dist/schemas/write/certification.js +3 -3
  48. package/dist/schemas/write/certification.js.map +1 -1
  49. package/dist/schemas/write/course.js +5 -10
  50. package/dist/schemas/write/course.js.map +1 -1
  51. package/dist/schemas/write/education.js +3 -3
  52. package/dist/schemas/write/education.js.map +1 -1
  53. package/dist/schemas/write/honor.js +2 -2
  54. package/dist/schemas/write/honor.js.map +1 -1
  55. package/dist/schemas/write/index.cjs +58 -32
  56. package/dist/schemas/write/index.cjs.map +1 -1
  57. package/dist/schemas/write/index.d.cts +21 -64
  58. package/dist/schemas/write/index.d.ts +21 -64
  59. package/dist/schemas/write/index.js +5 -1
  60. package/dist/schemas/write/index.js.map +1 -1
  61. package/dist/schemas/write/investment.js +3 -3
  62. package/dist/schemas/write/investment.js.map +1 -1
  63. package/dist/schemas/write/involvement.js +3 -3
  64. package/dist/schemas/write/involvement.js.map +1 -1
  65. package/dist/schemas/write/position.js +8 -3
  66. package/dist/schemas/write/position.js.map +1 -1
  67. package/dist/schemas/write/profile-self.js +19 -5
  68. package/dist/schemas/write/profile-self.js.map +1 -1
  69. package/dist/schemas/write/project.js +3 -3
  70. package/dist/schemas/write/project.js.map +1 -1
  71. package/dist/schemas/write/publication.js +2 -2
  72. package/dist/schemas/write/publication.js.map +1 -1
  73. package/dist/schemas/write/shared.js +6 -0
  74. package/dist/schemas/write/shared.js.map +1 -1
  75. package/dist/schemas/write/volunteering.js +3 -3
  76. package/dist/schemas/write/volunteering.js.map +1 -1
  77. package/dist/testing/index.d.cts +2 -2
  78. package/dist/testing/index.d.ts +2 -2
  79. package/dist/{types-JydVIhN5.d.cts → types-BC4A9-W9.d.cts} +2 -2
  80. package/dist/{types-CkomzDlY.d.ts → types-CcVRIHcX.d.ts} +2 -2
  81. package/dist/{use-user-settings-DQ6Dyby7.d.ts → use-user-settings-CI9eZQpp.d.ts} +11 -6
  82. package/dist/{use-user-settings-Bn6g8bgr.d.cts → use-user-settings-CfQKSBAC.d.cts} +11 -6
  83. package/dist/{user-settings-BdNrDa9O.d.ts → user-settings-BVFxLAOa.d.cts} +6 -11
  84. package/dist/{user-settings-C8JUD4DM.d.cts → user-settings-C65eFsPR.d.ts} +6 -11
  85. package/dist/{verification-providers-DeyGqaoC.d.cts → verification-providers-DQLIOSCK.d.cts} +7 -1
  86. package/dist/{verification-providers-DeyGqaoC.d.ts → verification-providers-DQLIOSCK.d.ts} +7 -1
  87. package/package.json +1 -1
@@ -94,6 +94,7 @@ import {
94
94
  didSchema,
95
95
  externalRecordRefSchema,
96
96
  languageTagSchema,
97
+ maxBytes,
97
98
  maxGraphemes,
98
99
  partialDateSchema,
99
100
  selfLabelsSchema,
@@ -171,6 +172,7 @@ export {
171
172
  externalRecordRefSchema,
172
173
  languageTagSchema,
173
174
  makeGraphFollowRecordSchema,
175
+ maxBytes,
174
176
  maxGraphemes,
175
177
  partialDateSchema,
176
178
  resolveEmploymentVerification,
@@ -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 maxBytes,\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,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,26 @@ 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 profileDisplayNameSchema = lexiconString(64, 640);
30
+ var profileNameSchema = lexiconString(64, 640);
31
+ var profilePronounsSchema = lexiconString(20, 200);
32
+ var profileHeadlineSchema = lexiconString(120, 1200);
33
+ var profileAboutSchema = lexiconString(5e3, 5e4);
14
34
  var didSchema = z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, "Invalid DID");
15
35
  var datetimeSchema = z.string().datetime({ offset: true });
16
36
  var partialDateSchema = z.string().regex(/^\d{4}(-\d{2}(-\d{2}(T.+)?)?)?$/, "Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime");
@@ -46,8 +66,15 @@ export {
46
66
  didSchema,
47
67
  externalRecordRefSchema,
48
68
  languageTagSchema,
69
+ lexiconString,
70
+ maxBytes,
49
71
  maxGraphemes,
50
72
  partialDateSchema,
73
+ profileAboutSchema,
74
+ profileDisplayNameSchema,
75
+ profileHeadlineSchema,
76
+ profileNameSchema,
77
+ profilePronounsSchema,
51
78
  selfLabelsSchema,
52
79
  skillRefSchema,
53
80
  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 * 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 = lexiconString(64, 640);\nexport const profileNameSchema = lexiconString(64, 640);\nexport const profilePronounsSchema = lexiconString(20, 200);\nexport const profileHeadlineSchema = lexiconString(120, 1200);\nexport const profileAboutSchema = lexiconString(5000, 50000);\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;AAMO,IAAM,2BAA2B,cAAc,IAAI,GAAG;AACtD,IAAM,oBAAoB,cAAc,IAAI,GAAG;AAC/C,IAAM,wBAAwB,cAAc,IAAI,GAAG;AACnD,IAAM,wBAAwB,cAAc,KAAK,IAAI;AACrD,IAAM,qBAAqB,cAAc,KAAM,GAAK;AAGpD,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,14 +1,14 @@
1
1
  // src/schemas/write/certification.ts
2
2
  import { z } from "zod";
3
- import { entityRefSchema, optionalUrl } from "./shared.js";
3
+ import { entityRefSchema, optionalUrl, partialDateFieldSchema } from "./shared.js";
4
4
  var CertificationWriteSchema = z.object({
5
5
  name: z.string().min(1).max(256),
6
6
  authority: z.string().max(256).nullable().optional(),
7
7
  entityRef: entityRefSchema,
8
8
  credentialId: z.string().max(256).nullable().optional(),
9
9
  credentialUrl: optionalUrl(),
10
- issuedAt: z.string().nullable().optional(),
11
- expiresAt: z.string().nullable().optional()
10
+ issuedAt: partialDateFieldSchema,
11
+ expiresAt: partialDateFieldSchema
12
12
  });
13
13
  export {
14
14
  CertificationWriteSchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/write/certification.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema, optionalUrl } from './shared.js';\n\n/** Schema enforced by the generic-record write endpoint for `id.sifa.profile.certification`. */\nexport const CertificationWriteSchema = z.object({\n name: z.string().min(1).max(256),\n authority: z.string().max(256).nullable().optional(),\n entityRef: entityRefSchema,\n credentialId: z.string().max(256).nullable().optional(),\n credentialUrl: optionalUrl(),\n issuedAt: z.string().nullable().optional(),\n expiresAt: z.string().nullable().optional(),\n});\n\nexport type CertificationWriteInput = z.infer<typeof CertificationWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,mBAAmB;AAGtC,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,WAAW;AAAA,EACX,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,eAAe,YAAY;AAAA,EAC3B,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/schemas/write/certification.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema, optionalUrl, partialDateFieldSchema } from './shared.js';\n\n/** Schema enforced by the generic-record write endpoint for `id.sifa.profile.certification`. */\nexport const CertificationWriteSchema = z.object({\n name: z.string().min(1).max(256),\n authority: z.string().max(256).nullable().optional(),\n entityRef: entityRefSchema,\n credentialId: z.string().max(256).nullable().optional(),\n credentialUrl: optionalUrl(),\n issuedAt: partialDateFieldSchema,\n expiresAt: partialDateFieldSchema,\n});\n\nexport type CertificationWriteInput = z.infer<typeof CertificationWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,aAAa,8BAA8B;AAG9D,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,WAAW;AAAA,EACX,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,eAAe,YAAY;AAAA,EAC3B,UAAU;AAAA,EACV,WAAW;AACb,CAAC;","names":[]}
@@ -1,8 +1,7 @@
1
1
  // src/schemas/write/course.ts
2
2
  import { z } from "zod";
3
- import { entityRefSchema, isValidPartialDate } from "./shared.js";
3
+ import { entityRefSchema, partialDateFieldSchema } from "./shared.js";
4
4
  var AT_URI_RE = /^at:\/\/[^/\s]+\/[^/\s]+\/[^/\s]+$/;
5
- var teachingDate = z.string().refine(isValidPartialDate, "must be a valid YYYY, YYYY-MM or YYYY-MM-DD date").nullable().optional();
6
5
  var CourseWriteSchema = z.object({
7
6
  name: z.string().min(1).max(200),
8
7
  number: z.string().max(50).nullable().optional(),
@@ -14,17 +13,13 @@ var CourseWriteSchema = z.object({
14
13
  * stored and later split into a bogus rkey.
15
14
  */
16
15
  credential: z.string().max(512).regex(AT_URI_RE, "must be an at-uri").nullable().optional(),
17
- /**
18
- * RFC 3339 datetime the course was completed. The editor collects month
19
- * granularity (YYYY-MM) and converts to a datetime before the write; stored
20
- * and passed through as-is, mirroring `certification.issuedAt`.
21
- */
22
- completedAt: z.string().nullable().optional(),
16
+ /** Completion date of a taken course (YYYY, YYYY-MM or YYYY-MM-DD). */
17
+ completedAt: partialDateFieldSchema,
23
18
  /** `id.sifa.defs#courseRole` token. Absent or null means the user took the course. */
24
19
  role: z.string().max(64).nullable().optional(),
25
20
  /** Teaching period of a taught or assisted course (YYYY, YYYY-MM or YYYY-MM-DD). */
26
- startedAt: teachingDate,
27
- endedAt: teachingDate,
21
+ startedAt: partialDateFieldSchema,
22
+ endedAt: partialDateFieldSchema,
28
23
  /** at-uri of the `id.sifa.profile.position` the course was part of (taken or taught). */
29
24
  position: z.string().max(512).regex(AT_URI_RE, "must be an at-uri").nullable().optional(),
30
25
  /** at-uri of the `id.sifa.profile.education` the course was part of. */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/write/course.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema, isValidPartialDate } from './shared.js';\n\nconst AT_URI_RE = /^at:\\/\\/[^/\\s]+\\/[^/\\s]+\\/[^/\\s]+$/;\nconst teachingDate = z\n .string()\n .refine(isValidPartialDate, 'must be a valid YYYY, YYYY-MM or YYYY-MM-DD date')\n .nullable()\n .optional();\n\n/** Schema enforced by the generic-record write endpoint for `id.sifa.profile.course`. */\nexport const CourseWriteSchema = z.object({\n name: z.string().min(1).max(200),\n number: z.string().max(50).nullable().optional(),\n institution: z.string().max(256).nullable().optional(),\n entityRef: entityRefSchema,\n /**\n * at-uri of the linked `id.sifa.profile.certification` record. Structurally\n * validated (`at://authority/collection/rkey`) so a bad value can't be\n * stored and later split into a bogus rkey.\n */\n credential: z.string().max(512).regex(AT_URI_RE, 'must be an at-uri').nullable().optional(),\n /**\n * RFC 3339 datetime the course was completed. The editor collects month\n * granularity (YYYY-MM) and converts to a datetime before the write; stored\n * and passed through as-is, mirroring `certification.issuedAt`.\n */\n completedAt: z.string().nullable().optional(),\n /** `id.sifa.defs#courseRole` token. Absent or null means the user took the course. */\n role: z.string().max(64).nullable().optional(),\n /** Teaching period of a taught or assisted course (YYYY, YYYY-MM or YYYY-MM-DD). */\n startedAt: teachingDate,\n endedAt: teachingDate,\n /** at-uri of the `id.sifa.profile.position` the course was part of (taken or taught). */\n position: z.string().max(512).regex(AT_URI_RE, 'must be an at-uri').nullable().optional(),\n /** at-uri of the `id.sifa.profile.education` the course was part of. */\n education: z.string().max(512).regex(AT_URI_RE, 'must be an at-uri').nullable().optional(),\n});\n\nexport type CourseWriteInput = z.infer<typeof CourseWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,0BAA0B;AAEpD,IAAM,YAAY;AAClB,IAAM,eAAe,EAClB,OAAO,EACP,OAAO,oBAAoB,kDAAkD,EAC7E,SAAS,EACT,SAAS;AAGL,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,MAAM,WAAW,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1F,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAE5C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAE7C,WAAW;AAAA,EACX,SAAS;AAAA;AAAA,EAET,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,MAAM,WAAW,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAExF,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,MAAM,WAAW,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAC3F,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/schemas/write/course.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema, partialDateFieldSchema } from './shared.js';\n\nconst AT_URI_RE = /^at:\\/\\/[^/\\s]+\\/[^/\\s]+\\/[^/\\s]+$/;\n\n/** Schema enforced by the generic-record write endpoint for `id.sifa.profile.course`. */\nexport const CourseWriteSchema = z.object({\n name: z.string().min(1).max(200),\n number: z.string().max(50).nullable().optional(),\n institution: z.string().max(256).nullable().optional(),\n entityRef: entityRefSchema,\n /**\n * at-uri of the linked `id.sifa.profile.certification` record. Structurally\n * validated (`at://authority/collection/rkey`) so a bad value can't be\n * stored and later split into a bogus rkey.\n */\n credential: z.string().max(512).regex(AT_URI_RE, 'must be an at-uri').nullable().optional(),\n /** Completion date of a taken course (YYYY, YYYY-MM or YYYY-MM-DD). */\n completedAt: partialDateFieldSchema,\n /** `id.sifa.defs#courseRole` token. Absent or null means the user took the course. */\n role: z.string().max(64).nullable().optional(),\n /** Teaching period of a taught or assisted course (YYYY, YYYY-MM or YYYY-MM-DD). */\n startedAt: partialDateFieldSchema,\n endedAt: partialDateFieldSchema,\n /** at-uri of the `id.sifa.profile.position` the course was part of (taken or taught). */\n position: z.string().max(512).regex(AT_URI_RE, 'must be an at-uri').nullable().optional(),\n /** at-uri of the `id.sifa.profile.education` the course was part of. */\n education: z.string().max(512).regex(AT_URI_RE, 'must be an at-uri').nullable().optional(),\n});\n\nexport type CourseWriteInput = z.infer<typeof CourseWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,8BAA8B;AAExD,IAAM,YAAY;AAGX,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,MAAM,WAAW,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAE1F,aAAa;AAAA;AAAA,EAEb,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAE7C,WAAW;AAAA,EACX,SAAS;AAAA;AAAA,EAET,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,MAAM,WAAW,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAExF,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,MAAM,WAAW,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAC3F,CAAC;","names":[]}
@@ -1,6 +1,6 @@
1
1
  // src/schemas/write/education.ts
2
2
  import { z } from "zod";
3
- import { entityRefSchema } from "./shared.js";
3
+ import { entityRefSchema, partialDateFieldSchema } from "./shared.js";
4
4
  var EducationWriteSchema = z.object({
5
5
  institution: z.string().min(1).max(256),
6
6
  entityRef: entityRefSchema,
@@ -9,8 +9,8 @@ var EducationWriteSchema = z.object({
9
9
  eqfLevel: z.number().int().min(1).max(8).nullable().optional(),
10
10
  description: z.string().max(5e4).nullable().optional(),
11
11
  activities: z.string().max(1e3).nullable().optional(),
12
- startedAt: z.string().nullable().optional(),
13
- endedAt: z.string().nullable().optional()
12
+ startedAt: partialDateFieldSchema,
13
+ endedAt: partialDateFieldSchema
14
14
  });
15
15
  export {
16
16
  EducationWriteSchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/write/education.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema } from './shared.js';\n\n/** Schema enforced by `POST /profile/education` on sifa-api. */\nexport const EducationWriteSchema = z.object({\n institution: z.string().min(1).max(256),\n entityRef: entityRefSchema,\n degree: z.string().max(256).nullable().optional(),\n fieldOfStudy: z.string().max(256).nullable().optional(),\n eqfLevel: z.number().int().min(1).max(8).nullable().optional(),\n description: z.string().max(50000).nullable().optional(),\n activities: z.string().max(1000).nullable().optional(),\n startedAt: z.string().nullable().optional(),\n endedAt: z.string().nullable().optional(),\n});\n\nexport type EducationWriteInput = z.infer<typeof EducationWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,uBAAuB;AAGzB,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,WAAW;AAAA,EACX,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7D,aAAa,EAAE,OAAO,EAAE,IAAI,GAAK,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,YAAY,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC1C,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/schemas/write/education.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema, partialDateFieldSchema } from './shared.js';\n\n/** Schema enforced by `POST /profile/education` on sifa-api. */\nexport const EducationWriteSchema = z.object({\n institution: z.string().min(1).max(256),\n entityRef: entityRefSchema,\n degree: z.string().max(256).nullable().optional(),\n fieldOfStudy: z.string().max(256).nullable().optional(),\n eqfLevel: z.number().int().min(1).max(8).nullable().optional(),\n description: z.string().max(50000).nullable().optional(),\n activities: z.string().max(1000).nullable().optional(),\n startedAt: partialDateFieldSchema,\n endedAt: partialDateFieldSchema,\n});\n\nexport type EducationWriteInput = z.infer<typeof EducationWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,8BAA8B;AAGjD,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,WAAW;AAAA,EACX,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7D,aAAa,EAAE,OAAO,EAAE,IAAI,GAAK,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,YAAY,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,WAAW;AAAA,EACX,SAAS;AACX,CAAC;","names":[]}
@@ -1,12 +1,12 @@
1
1
  // src/schemas/write/honor.ts
2
2
  import { z } from "zod";
3
- import { entityRefSchema } from "./shared.js";
3
+ import { entityRefSchema, partialDateFieldSchema } from "./shared.js";
4
4
  var HonorWriteSchema = z.object({
5
5
  title: z.string().min(1).max(200),
6
6
  issuer: z.string().max(256).nullable().optional(),
7
7
  entityRef: entityRefSchema,
8
8
  description: z.string().max(5e4).nullable().optional(),
9
- awardedAt: z.string().nullable().optional()
9
+ awardedAt: partialDateFieldSchema
10
10
  });
11
11
  export {
12
12
  HonorWriteSchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/write/honor.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema } from './shared.js';\n\n/** Schema enforced by the generic-record write endpoint for `id.sifa.profile.honor`. */\nexport const HonorWriteSchema = z.object({\n title: z.string().min(1).max(200),\n issuer: z.string().max(256).nullable().optional(),\n entityRef: entityRefSchema,\n description: z.string().max(50000).nullable().optional(),\n awardedAt: z.string().nullable().optional(),\n});\n\nexport type HonorWriteInput = z.infer<typeof HonorWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,uBAAuB;AAGzB,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAChC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,WAAW;AAAA,EACX,aAAa,EAAE,OAAO,EAAE,IAAI,GAAK,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/schemas/write/honor.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { entityRefSchema, partialDateFieldSchema } from './shared.js';\n\n/** Schema enforced by the generic-record write endpoint for `id.sifa.profile.honor`. */\nexport const HonorWriteSchema = z.object({\n title: z.string().min(1).max(200),\n issuer: z.string().max(256).nullable().optional(),\n entityRef: entityRefSchema,\n description: z.string().max(50000).nullable().optional(),\n awardedAt: partialDateFieldSchema,\n});\n\nexport type HonorWriteInput = z.infer<typeof HonorWriteSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,8BAA8B;AAGjD,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAChC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,WAAW;AAAA,EACX,aAAa,EAAE,OAAO,EAAE,IAAI,GAAK,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,WAAW;AACb,CAAC;","names":[]}
@@ -66,6 +66,11 @@ function isValidPartialDate(input) {
66
66
  if (typeof input !== "string") return false;
67
67
  return PARTIAL_DATE_RE.test(input) || isValidDateOnly(input);
68
68
  }
69
+ var DATETIME_DAY_RE = /^(\d{4}-\d{2}-\d{2})T\d{2}:\d{2}/;
70
+ var partialDateFieldSchema = zod.z.string().transform((v) => DATETIME_DAY_RE.exec(v)?.[1] ?? v).refine(
71
+ (v) => v === "" || isValidPartialDate(v),
72
+ "must be a valid YYYY, YYYY-MM or YYYY-MM-DD date"
73
+ ).nullable().optional();
69
74
  var entityRefSchema = zod.z.string().url().refine((s) => /^https?:\/\//i.test(s), { message: "entityRef must be an http(s) URL" }).max(2048).optional();
70
75
  var artifactLinkSchema = zod.z.object({
71
76
  url: zod.z.string().max(2048).refine((v) => httpUrlOrNull(v) !== null, "must be an http(s) URL"),
@@ -88,11 +93,10 @@ var CertificationWriteSchema = zod.z.object({
88
93
  entityRef: entityRefSchema,
89
94
  credentialId: zod.z.string().max(256).nullable().optional(),
90
95
  credentialUrl: optionalUrl(),
91
- issuedAt: zod.z.string().nullable().optional(),
92
- expiresAt: zod.z.string().nullable().optional()
96
+ issuedAt: partialDateFieldSchema,
97
+ expiresAt: partialDateFieldSchema
93
98
  });
94
99
  var AT_URI_RE = /^at:\/\/[^/\s]+\/[^/\s]+\/[^/\s]+$/;
95
- var teachingDate = zod.z.string().refine(isValidPartialDate, "must be a valid YYYY, YYYY-MM or YYYY-MM-DD date").nullable().optional();
96
100
  var CourseWriteSchema = zod.z.object({
97
101
  name: zod.z.string().min(1).max(200),
98
102
  number: zod.z.string().max(50).nullable().optional(),
@@ -104,17 +108,13 @@ var CourseWriteSchema = zod.z.object({
104
108
  * stored and later split into a bogus rkey.
105
109
  */
106
110
  credential: zod.z.string().max(512).regex(AT_URI_RE, "must be an at-uri").nullable().optional(),
107
- /**
108
- * RFC 3339 datetime the course was completed. The editor collects month
109
- * granularity (YYYY-MM) and converts to a datetime before the write; stored
110
- * and passed through as-is, mirroring `certification.issuedAt`.
111
- */
112
- completedAt: zod.z.string().nullable().optional(),
111
+ /** Completion date of a taken course (YYYY, YYYY-MM or YYYY-MM-DD). */
112
+ completedAt: partialDateFieldSchema,
113
113
  /** `id.sifa.defs#courseRole` token. Absent or null means the user took the course. */
114
114
  role: zod.z.string().max(64).nullable().optional(),
115
115
  /** Teaching period of a taught or assisted course (YYYY, YYYY-MM or YYYY-MM-DD). */
116
- startedAt: teachingDate,
117
- endedAt: teachingDate,
116
+ startedAt: partialDateFieldSchema,
117
+ endedAt: partialDateFieldSchema,
118
118
  /** at-uri of the `id.sifa.profile.position` the course was part of (taken or taught). */
119
119
  position: zod.z.string().max(512).regex(AT_URI_RE, "must be an at-uri").nullable().optional(),
120
120
  /** at-uri of the `id.sifa.profile.education` the course was part of. */
@@ -128,8 +128,8 @@ var EducationWriteSchema = zod.z.object({
128
128
  eqfLevel: zod.z.number().int().min(1).max(8).nullable().optional(),
129
129
  description: zod.z.string().max(5e4).nullable().optional(),
130
130
  activities: zod.z.string().max(1e3).nullable().optional(),
131
- startedAt: zod.z.string().nullable().optional(),
132
- endedAt: zod.z.string().nullable().optional()
131
+ startedAt: partialDateFieldSchema,
132
+ endedAt: partialDateFieldSchema
133
133
  });
134
134
  var ExternalAccountWriteSchema = zod.z.object({
135
135
  platform: zod.z.enum(VALID_PLATFORMS),
@@ -143,7 +143,7 @@ var HonorWriteSchema = zod.z.object({
143
143
  issuer: zod.z.string().max(256).nullable().optional(),
144
144
  entityRef: entityRefSchema,
145
145
  description: zod.z.string().max(5e4).nullable().optional(),
146
- awardedAt: zod.z.string().nullable().optional()
146
+ awardedAt: partialDateFieldSchema
147
147
  });
148
148
  var projectMemberWriteSchema = zod.z.object({
149
149
  did: zod.z.string().regex(/^did:[a-z]+:[^\s]+$/, "must be a DID"),
@@ -167,8 +167,8 @@ var ProjectWriteSchema = zod.z.object({
167
167
  sameAs: externalRecordRefSchema.optional(),
168
168
  /** Calendar events this project organized or hosted. An empty list clears them. */
169
169
  events: zod.z.array(projectEventWriteSchema).max(200).optional(),
170
- startedAt: zod.z.string().nullable().optional(),
171
- endedAt: zod.z.string().nullable().optional()
170
+ startedAt: partialDateFieldSchema,
171
+ endedAt: partialDateFieldSchema
172
172
  });
173
173
 
174
174
  // src/schemas/write/involvement.ts
@@ -179,9 +179,8 @@ var InvolvementWriteSchema = zod.z.object({
179
179
  upstreamUrl: optionalUrl(),
180
180
  role: zod.z.string().max(2560).nullable().optional(),
181
181
  description: zod.z.string().max(5e4).nullable().optional(),
182
- // Freeform YYYY / YYYY-MM / YYYY-MM-DD; validated loosely so partial dates pass.
183
- startedAt: zod.z.string().max(32).nullable().optional(),
184
- endedAt: zod.z.string().max(32).nullable().optional(),
182
+ startedAt: partialDateFieldSchema,
183
+ endedAt: partialDateFieldSchema,
185
184
  links: zod.z.array(artifactLinkSchema).max(50).nullable().optional(),
186
185
  /** Other people who worked on this alongside you. Same shape as project members. */
187
186
  collaborators: zod.z.array(projectMemberWriteSchema).max(50).optional(),
@@ -211,8 +210,8 @@ var InvestmentWriteSchema = zod.z.object({
211
210
  value: zod.z.number().int().min(0),
212
211
  currency: zod.z.string().length(3)
213
212
  }).nullable().optional(),
214
- startedAt: zod.z.string().nullable().optional(),
215
- endedAt: zod.z.string().nullable().optional(),
213
+ startedAt: partialDateFieldSchema,
214
+ endedAt: partialDateFieldSchema,
216
215
  description: zod.z.string().max(5e4).nullable().optional(),
217
216
  links: zod.z.array(artifactLinkSchema).max(50).nullable().optional()
218
217
  });
@@ -233,8 +232,8 @@ var OrgEmploymentAttestationWriteSchema = zod.z.object({
233
232
  createdAt: zod.z.string()
234
233
  });
235
234
  function maxGraphemes(max) {
235
+ const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
236
236
  return (value) => {
237
- const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
238
237
  let count = 0;
239
238
  for (const _ of segmenter.segment(value)) {
240
239
  count++;
@@ -243,6 +242,26 @@ function maxGraphemes(max) {
243
242
  return true;
244
243
  };
245
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 profileDisplayNameSchema = lexiconString(64, 640);
261
+ var profileNameSchema = lexiconString(64, 640);
262
+ var profilePronounsSchema = lexiconString(20, 200);
263
+ var profileHeadlineSchema = lexiconString(120, 1200);
264
+ var profileAboutSchema = lexiconString(5e3, 5e4);
246
265
  var didSchema = zod.z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, "Invalid DID");
247
266
  var datetimeSchema = zod.z.string().datetime({ offset: true });
248
267
  zod.z.string().regex(/^\d{4}(-\d{2}(-\d{2}(T.+)?)?)?$/, "Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime");
@@ -519,8 +538,8 @@ var PositionWriteSchema = zod.z.object({
519
538
  onBehalfOfEntityRef: entityRefSchema.nullable(),
520
539
  workplaceType: zod.z.string().nullable().optional(),
521
540
  location: writeLocationSchema,
522
- startedAt: zod.z.string().nullable().optional(),
523
- endedAt: zod.z.string().nullable().optional(),
541
+ startedAt: partialDateFieldSchema,
542
+ endedAt: partialDateFieldSchema,
524
543
  skills: zod.z.array(skillRefSchema).max(50).nullable().optional()
525
544
  });
526
545
  var PresentationDeliveryWriteSchema = zod.z.object({
@@ -589,11 +608,11 @@ var RPG_AVATAR_SOURCE = "actor.rpg.sprite";
589
608
 
590
609
  // src/schemas/write/profile-self.ts
591
610
  var ProfileSelfWriteSchema = zod.z.object({
592
- headline: zod.z.string().max(300).optional(),
593
- about: zod.z.string().max(5e4).optional(),
594
- givenName: zod.z.string().max(640).optional(),
595
- familyName: zod.z.string().max(640).optional(),
596
- namePronunciation: zod.z.string().max(640).optional(),
611
+ headline: profileHeadlineSchema.optional(),
612
+ about: profileAboutSchema.optional(),
613
+ givenName: profileNameSchema.optional(),
614
+ familyName: profileNameSchema.optional(),
615
+ namePronunciation: profileNameSchema.optional(),
597
616
  industries: zod.z.array(
598
617
  zod.z.object({
599
618
  industry: zod.z.string().max(100),
@@ -615,6 +634,12 @@ var ProfileSelfWriteSchema = zod.z.object({
615
634
  */
616
635
  avatarSource: zod.z.enum([RPG_AVATAR_SOURCE]).nullable().optional()
617
636
  }).passthrough();
637
+ var ProfileOverrideWriteSchema = zod.z.object({
638
+ headline: profileHeadlineSchema.nullish(),
639
+ about: profileAboutSchema.nullish(),
640
+ displayName: profileDisplayNameSchema.nullish(),
641
+ pronouns: profilePronounsSchema.nullish()
642
+ });
618
643
 
619
644
  // src/format/doi.ts
620
645
  function normalizeDoi(value) {
@@ -639,7 +664,7 @@ var PublicationWriteSchema = zod.z.object({
639
664
  publisher: zod.z.string().max(256).nullable().optional(),
640
665
  url: optionalUrl(),
641
666
  description: zod.z.string().max(5e4).nullable().optional(),
642
- publishedAt: zod.z.string().nullable().optional(),
667
+ publishedAt: partialDateFieldSchema,
643
668
  // Absent here until now, so the write route stripped every co-author before
644
669
  // it reached the PDS: the lexicon field, the indexer, the claim flattening
645
670
  // and the editor all existed, and nothing joined them. An object schema
@@ -670,8 +695,8 @@ var VolunteeringWriteSchema = zod.z.object({
670
695
  role: zod.z.string().max(256).nullable().optional(),
671
696
  cause: zod.z.string().max(256).nullable().optional(),
672
697
  description: zod.z.string().max(5e4).nullable().optional(),
673
- startedAt: zod.z.string().nullable().optional(),
674
- endedAt: zod.z.string().nullable().optional()
698
+ startedAt: partialDateFieldSchema,
699
+ endedAt: partialDateFieldSchema
675
700
  });
676
701
 
677
702
  exports.CertificationWriteSchema = CertificationWriteSchema;
@@ -693,6 +718,7 @@ exports.PositionWriteSchema = PositionWriteSchema;
693
718
  exports.PresentationDeliveryWriteSchema = PresentationDeliveryWriteSchema;
694
719
  exports.PresentationWriteSchema = PresentationWriteSchema;
695
720
  exports.ProfileLocationWriteSchema = ProfileLocationWriteSchema;
721
+ exports.ProfileOverrideWriteSchema = ProfileOverrideWriteSchema;
696
722
  exports.ProfileSelfWriteSchema = ProfileSelfWriteSchema;
697
723
  exports.ProjectWriteSchema = ProjectWriteSchema;
698
724
  exports.PublicationWriteSchema = PublicationWriteSchema;