@singi-labs/sifa-sdk 0.19.85 → 0.19.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -3621,6 +3621,7 @@ var ROLE_TOKENS = {
3621
3621
  workshop: "id.sifa.defs#workshop",
3622
3622
  host: "id.sifa.defs#host"
3623
3623
  };
3624
+ var PRESENTATION_ROLE_VALUES = Object.keys(ROLE_TOKENS);
3624
3625
  function normalizePresentationRole(value) {
3625
3626
  const v = clean2(value).toLowerCase();
3626
3627
  if (!v) return void 0;
@@ -3646,6 +3647,7 @@ var MODE_FRAGMENTS = {
3646
3647
  remote: "#virtual",
3647
3648
  hybrid: "#hybrid"
3648
3649
  };
3650
+ var PRESENTATION_MODE_VALUES = Object.keys(MODE_FRAGMENTS);
3649
3651
  function normalizePresentationMode(value) {
3650
3652
  const v = clean2(value).toLowerCase();
3651
3653
  if (!v) return void 0;
@@ -3694,6 +3696,297 @@ function presentationDeliveryCsvRowToRecord(row) {
3694
3696
  if (links.length) record.links = links;
3695
3697
  return { presentationKey: clean2(row.presentation_key) || void 0, record };
3696
3698
  }
3699
+ var writeLocationSchema = zod.z.union([
3700
+ zod.z.object({
3701
+ country: zod.z.string().nullish(),
3702
+ countryCode: zod.z.string().length(2).nullish(),
3703
+ region: zod.z.string().nullish(),
3704
+ city: zod.z.string().nullish(),
3705
+ locality: zod.z.string().nullish(),
3706
+ street: zod.z.string().nullish(),
3707
+ postalCode: zod.z.string().nullish(),
3708
+ name: zod.z.string().nullish()
3709
+ }),
3710
+ zod.z.string()
3711
+ ]).nullable().optional();
3712
+ zod.z.object({
3713
+ uri: zod.z.string()
3714
+ });
3715
+ function httpUrlOrNull(input) {
3716
+ if (typeof input !== "string") return null;
3717
+ try {
3718
+ const url = new URL(input);
3719
+ return url.protocol === "http:" || url.protocol === "https:" ? input : null;
3720
+ } catch {
3721
+ return null;
3722
+ }
3723
+ }
3724
+ var DATE_ONLY_RE = /^\d{4}-\d{2}-\d{2}$/;
3725
+ function isValidDateOnly(input) {
3726
+ if (typeof input !== "string" || !DATE_ONLY_RE.test(input)) return false;
3727
+ const parsed3 = /* @__PURE__ */ new Date(`${input}T00:00:00Z`);
3728
+ return !Number.isNaN(parsed3.getTime()) && parsed3.toISOString().startsWith(input);
3729
+ }
3730
+ var PARTIAL_DATE_RE = /^\d{4}(-(0[1-9]|1[0-2]))?$/;
3731
+ function isValidPartialDate(input) {
3732
+ if (typeof input !== "string") return false;
3733
+ return PARTIAL_DATE_RE.test(input) || isValidDateOnly(input);
3734
+ }
3735
+ zod.z.string().url().refine((s) => /^https?:\/\//i.test(s), { message: "entityRef must be an http(s) URL" }).max(2048).optional();
3736
+ zod.z.object({
3737
+ url: zod.z.string().max(2048).refine((v) => httpUrlOrNull(v) !== null, "must be an http(s) URL"),
3738
+ kind: zod.z.string().max(64).nullable().optional(),
3739
+ label: zod.z.string().max(2e3).nullable().optional()
3740
+ });
3741
+ var externalRecordRefSchema = zod.z.object({
3742
+ uri: zod.z.string().regex(/^at:\/\/[^/\s]+\/[^/\s]+\/[^/\s]+$/, "must be an at-uri"),
3743
+ // CIDv0 (`Qm…`) or CIDv1 (base32, `b…`). Loose but rejects arbitrary strings.
3744
+ cid: zod.z.string().max(256).regex(/^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[A-Za-z2-7]+)$/, "must be a CID").optional()
3745
+ });
3746
+ var presentationLinkSchema = zod.z.object({
3747
+ uri: zod.z.string().max(2048).refine((v) => httpUrlOrNull(v) !== null, "must be an http(s) URL"),
3748
+ label: zod.z.string().max(640).nullable().optional(),
3749
+ type: zod.z.string().max(256).nullable().optional()
3750
+ });
3751
+ var PresentationDeliveryWriteSchema = zod.z.object({
3752
+ presentationRef: externalRecordRefSchema.optional(),
3753
+ /**
3754
+ * The same session as recorded on another person's profile. Distinct from
3755
+ * presentationRef above, which points at the talk this session delivered.
3756
+ */
3757
+ sameAs: externalRecordRefSchema.optional(),
3758
+ title: zod.z.string().max(3e3).nullable().optional(),
3759
+ role: zod.z.string().max(640).nullable().optional(),
3760
+ eventName: zod.z.string().max(3e3).nullable().optional(),
3761
+ // YYYY-MM-DD, or YYYY-MM / YYYY when the exact day is unknown.
3762
+ date: zod.z.string().refine(isValidPartialDate, "must be a valid YYYY, YYYY-MM or YYYY-MM-DD date").nullable().optional(),
3763
+ location: zod.z.string().max(2560).nullable().optional(),
3764
+ // Structured community.lexicon.location.address; `location` above stays as
3765
+ // the legacy free-text fallback. writeLocationSchema is already nullable+optional.
3766
+ address: writeLocationSchema,
3767
+ mode: zod.z.string().max(256).nullable().optional(),
3768
+ status: zod.z.string().max(256).nullable().optional(),
3769
+ links: zod.z.array(presentationLinkSchema).max(20).optional(),
3770
+ eventRef: externalRecordRefSchema.optional(),
3771
+ coSpeakers: zod.z.array(zod.z.string().regex(/^did:[a-z]+:[^\s]+$/, "must be a DID")).max(20).optional()
3772
+ });
3773
+ var BlobRefSchema = zod.z.object({
3774
+ $type: zod.z.literal("blob"),
3775
+ ref: zod.z.object({ $link: zod.z.string().min(1) }),
3776
+ mimeType: zod.z.string().min(1).max(255),
3777
+ size: zod.z.number().int().nonnegative()
3778
+ });
3779
+
3780
+ // src/schemas/write/presentation.ts
3781
+ var PresentationWriteSchema = zod.z.object({
3782
+ title: zod.z.string().min(1).max(3e3),
3783
+ description: zod.z.string().max(5e4).nullable().optional(),
3784
+ duration: zod.z.object({
3785
+ minMinutes: zod.z.number().int().min(1),
3786
+ maxMinutes: zod.z.number().int().min(1).optional()
3787
+ }).refine((d) => d.maxMinutes === void 0 || d.maxMinutes >= d.minMinutes, {
3788
+ message: "maxMinutes must be greater than or equal to minMinutes",
3789
+ path: ["maxMinutes"]
3790
+ }).optional(),
3791
+ intendedAudiences: zod.z.array(zod.z.string().max(1e3)).max(20).optional(),
3792
+ links: zod.z.array(presentationLinkSchema).max(20).optional(),
3793
+ writeupRef: externalRecordRefSchema.optional(),
3794
+ coverImage: BlobRefSchema.nullable().optional()
3795
+ });
3796
+ function maxGraphemes(max) {
3797
+ return (value) => {
3798
+ const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
3799
+ let count = 0;
3800
+ for (const _ of segmenter.segment(value)) {
3801
+ count++;
3802
+ if (count > max) return false;
3803
+ }
3804
+ return true;
3805
+ };
3806
+ }
3807
+ var didSchema = zod.z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, "Invalid DID");
3808
+ var datetimeSchema = zod.z.string().datetime({ offset: true });
3809
+ var partialDateSchema = zod.z.string().regex(/^\d{4}(-\d{2}(-\d{2}(T.+)?)?)?$/, "Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime");
3810
+ var atUriSchema = zod.z.string().regex(/^at:\/\/[^\s]+$/, "Invalid AT-URI");
3811
+ var cidSchema = zod.z.string().regex(/^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[A-Za-z0-9+/=]+)$/, "Invalid CID");
3812
+ var languageTagSchema = zod.z.string().regex(/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/, "Invalid BCP 47 language tag");
3813
+ var uriSchema = zod.z.string().url();
3814
+ var strongRefSchema = zod.z.object({
3815
+ uri: atUriSchema,
3816
+ cid: cidSchema
3817
+ });
3818
+ var skillRefSchema2 = zod.z.object({
3819
+ uri: atUriSchema
3820
+ });
3821
+ var externalRecordRefSchema2 = zod.z.object({
3822
+ uri: atUriSchema,
3823
+ cid: cidSchema.optional()
3824
+ });
3825
+ var agentRefSchema = zod.z.object({
3826
+ name: zod.z.string().min(1).refine(maxGraphemes(256)).max(2560),
3827
+ did: didSchema.optional(),
3828
+ entityRef: uriSchema.optional()
3829
+ }).passthrough();
3830
+ var selfLabelsSchema = zod.z.object({
3831
+ $type: zod.z.literal("com.atproto.label.defs#selfLabels").optional(),
3832
+ values: zod.z.array(zod.z.object({ val: zod.z.string() }))
3833
+ });
3834
+
3835
+ // src/import/talks-import-validation.ts
3836
+ var PRESENTATION_URL_COLUMNS = ["slides_url", "recording_url", "writeup_url"];
3837
+ var DELIVERY_URL_COLUMNS = ["event_url", "recording_url"];
3838
+ var RECORD_FIELD_COLUMNS = {
3839
+ title: "title",
3840
+ description: "description",
3841
+ intendedAudiences: "intended_audiences",
3842
+ eventName: "event_name",
3843
+ location: "location"
3844
+ };
3845
+ function schemaErrorColumn(error) {
3846
+ const field = error.issues[0]?.path[0];
3847
+ return typeof field === "string" ? RECORD_FIELD_COLUMNS[field] : void 0;
3848
+ }
3849
+ function cell(row, column) {
3850
+ return (row[column] ?? "").trim();
3851
+ }
3852
+ function urlIssues(row, rowNumber, file, columns) {
3853
+ return columns.flatMap((column) => {
3854
+ const value = cell(row, column);
3855
+ return value && httpUrlOrNull(value) === null ? [{ file, row: rowNumber, column, value, code: "invalidUrl", severity: "error" }] : [];
3856
+ });
3857
+ }
3858
+ function validateTalksImport(input, now = /* @__PURE__ */ new Date()) {
3859
+ const issues = [];
3860
+ const presentations = [];
3861
+ const deliveries = [];
3862
+ const validKeys = /* @__PURE__ */ new Set();
3863
+ const skippedKeys = /* @__PURE__ */ new Set();
3864
+ input.presentationRows.forEach((row, index) => {
3865
+ const rowNumber = index + 2;
3866
+ const rowIssues = [];
3867
+ const parsed3 = presentationCsvRowToRecord(row);
3868
+ if (!parsed3.record.title) {
3869
+ rowIssues.push({
3870
+ file: "presentations",
3871
+ row: rowNumber,
3872
+ column: "title",
3873
+ code: "missingTitle",
3874
+ severity: "error"
3875
+ });
3876
+ }
3877
+ rowIssues.push(...urlIssues(row, rowNumber, "presentations", PRESENTATION_URL_COLUMNS));
3878
+ const schema = rowIssues.length === 0 ? PresentationWriteSchema.safeParse(parsed3.record) : null;
3879
+ if (schema && !schema.success) {
3880
+ const column = schemaErrorColumn(schema.error);
3881
+ rowIssues.push({
3882
+ file: "presentations",
3883
+ row: rowNumber,
3884
+ ...column ? { column } : {},
3885
+ code: "invalidRecord",
3886
+ severity: "error"
3887
+ });
3888
+ }
3889
+ issues.push(...rowIssues);
3890
+ if (rowIssues.length > 0) {
3891
+ if (parsed3.key) skippedKeys.add(parsed3.key);
3892
+ return;
3893
+ }
3894
+ presentations.push(parsed3);
3895
+ if (parsed3.key) validKeys.add(parsed3.key);
3896
+ });
3897
+ input.deliveryRows.forEach((row, index) => {
3898
+ const rowNumber = index + 2;
3899
+ const rowIssues = [];
3900
+ const parsed3 = presentationDeliveryCsvRowToRecord(row);
3901
+ const { record, presentationKey } = parsed3;
3902
+ const linked = presentationKey !== void 0 && validKeys.has(presentationKey);
3903
+ if (presentationKey !== void 0 && skippedKeys.has(presentationKey) && !linked) {
3904
+ rowIssues.push({
3905
+ file: "deliveries",
3906
+ row: rowNumber,
3907
+ column: "presentation_key",
3908
+ value: presentationKey,
3909
+ code: "linkedTalkSkipped",
3910
+ severity: "error"
3911
+ });
3912
+ } else if (presentationKey !== void 0 && !linked) {
3913
+ rowIssues.push({
3914
+ file: "deliveries",
3915
+ row: rowNumber,
3916
+ column: "presentation_key",
3917
+ value: presentationKey,
3918
+ code: "unknownPresentationKey",
3919
+ severity: "warning"
3920
+ });
3921
+ }
3922
+ if (!record.title && !record.eventName && !linked && !skippedKeys.has(presentationKey ?? "")) {
3923
+ rowIssues.push({
3924
+ file: "deliveries",
3925
+ row: rowNumber,
3926
+ code: "missingTitleOrEvent",
3927
+ severity: "error"
3928
+ });
3929
+ }
3930
+ if (record.date && !isValidPartialDate(record.date)) {
3931
+ rowIssues.push({
3932
+ file: "deliveries",
3933
+ row: rowNumber,
3934
+ column: "date",
3935
+ value: record.date,
3936
+ code: "invalidDate",
3937
+ severity: "error"
3938
+ });
3939
+ } else if (record.date && isBeyondLookahead(record.date, DATE_LOOKAHEAD_MONTHS.talk, now)) {
3940
+ rowIssues.push({
3941
+ file: "deliveries",
3942
+ row: rowNumber,
3943
+ column: "date",
3944
+ value: record.date,
3945
+ code: "dateTooFarAhead",
3946
+ severity: "error"
3947
+ });
3948
+ }
3949
+ rowIssues.push(...urlIssues(row, rowNumber, "deliveries", DELIVERY_URL_COLUMNS));
3950
+ const role = cell(row, "role");
3951
+ if (role && !record.role) {
3952
+ rowIssues.push({
3953
+ file: "deliveries",
3954
+ row: rowNumber,
3955
+ column: "role",
3956
+ value: role,
3957
+ code: "unknownRole",
3958
+ severity: "warning"
3959
+ });
3960
+ }
3961
+ const mode = cell(row, "mode");
3962
+ if (mode && !record.mode) {
3963
+ rowIssues.push({
3964
+ file: "deliveries",
3965
+ row: rowNumber,
3966
+ column: "mode",
3967
+ value: mode,
3968
+ code: "unknownMode",
3969
+ severity: "warning"
3970
+ });
3971
+ }
3972
+ let hasError = rowIssues.some((i) => i.severity === "error");
3973
+ const schema = hasError ? null : PresentationDeliveryWriteSchema.safeParse(record);
3974
+ if (schema && !schema.success) {
3975
+ const column = schemaErrorColumn(schema.error);
3976
+ rowIssues.push({
3977
+ file: "deliveries",
3978
+ row: rowNumber,
3979
+ ...column ? { column } : {},
3980
+ code: "invalidRecord",
3981
+ severity: "error"
3982
+ });
3983
+ hasError = true;
3984
+ }
3985
+ issues.push(...rowIssues);
3986
+ if (!hasError) deliveries.push(parsed3);
3987
+ });
3988
+ return { presentations, deliveries, issues };
3989
+ }
3697
3990
 
3698
3991
  // src/cards/app-url-patterns.ts
3699
3992
  var APP_URL_PATTERNS = Object.freeze({
@@ -4787,44 +5080,6 @@ var streamCardVMSchema = zod.z.lazy(
4787
5080
  certifiedDetails: certifiedDetailsSchema.optional()
4788
5081
  })
4789
5082
  );
4790
- function maxGraphemes(max) {
4791
- return (value) => {
4792
- const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
4793
- let count = 0;
4794
- for (const _ of segmenter.segment(value)) {
4795
- count++;
4796
- if (count > max) return false;
4797
- }
4798
- return true;
4799
- };
4800
- }
4801
- var didSchema = zod.z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, "Invalid DID");
4802
- var datetimeSchema = zod.z.string().datetime({ offset: true });
4803
- var partialDateSchema = zod.z.string().regex(/^\d{4}(-\d{2}(-\d{2}(T.+)?)?)?$/, "Expected YYYY, YYYY-MM, YYYY-MM-DD, or a datetime");
4804
- var atUriSchema = zod.z.string().regex(/^at:\/\/[^\s]+$/, "Invalid AT-URI");
4805
- var cidSchema = zod.z.string().regex(/^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[A-Za-z0-9+/=]+)$/, "Invalid CID");
4806
- var languageTagSchema = zod.z.string().regex(/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/, "Invalid BCP 47 language tag");
4807
- var uriSchema = zod.z.string().url();
4808
- var strongRefSchema = zod.z.object({
4809
- uri: atUriSchema,
4810
- cid: cidSchema
4811
- });
4812
- var skillRefSchema = zod.z.object({
4813
- uri: atUriSchema
4814
- });
4815
- var externalRecordRefSchema = zod.z.object({
4816
- uri: atUriSchema,
4817
- cid: cidSchema.optional()
4818
- });
4819
- var agentRefSchema = zod.z.object({
4820
- name: zod.z.string().min(1).refine(maxGraphemes(256)).max(2560),
4821
- did: didSchema.optional(),
4822
- entityRef: uriSchema.optional()
4823
- }).passthrough();
4824
- var selfLabelsSchema = zod.z.object({
4825
- $type: zod.z.literal("com.atproto.label.defs#selfLabels").optional(),
4826
- values: zod.z.array(zod.z.object({ val: zod.z.string() }))
4827
- });
4828
5083
 
4829
5084
  // src/publishing/registry.ts
4830
5085
  var STANDARD_SITE_PUBLISHERS = Object.freeze([
@@ -6448,12 +6703,6 @@ function buildProfileHighlights(profile, { today }) {
6448
6703
  function shouldRenderHighlights(rows) {
6449
6704
  return rows.row1.length + rows.row2.length >= 2;
6450
6705
  }
6451
- var BlobRefSchema = zod.z.object({
6452
- $type: zod.z.literal("blob"),
6453
- ref: zod.z.object({ $link: zod.z.string().min(1) }),
6454
- mimeType: zod.z.string().min(1).max(255),
6455
- size: zod.z.number().int().nonnegative()
6456
- });
6457
6706
  var EndorsementConfirmationRecordSchema = zod.z.object({
6458
6707
  endorsement: strongRefSchema,
6459
6708
  /**
@@ -6631,7 +6880,7 @@ var VERIFICATION_METHOD_TOKENS = [
6631
6880
  var EmploymentVerificationRecordSchema = zod.z.object({
6632
6881
  $type: zod.z.literal("id.sifa.verification.employment").optional(),
6633
6882
  subject: didSchema,
6634
- position: externalRecordRefSchema,
6883
+ position: externalRecordRefSchema2,
6635
6884
  status: zod.z.enum(EMPLOYMENT_STATUS_TOKENS),
6636
6885
  // Open on purpose, like the lexicon's knownValues: a method Sifa adds
6637
6886
  // later must not make an older client reject the whole record. Compare
@@ -6642,7 +6891,7 @@ var EmploymentVerificationRecordSchema = zod.z.object({
6642
6891
  endedAt: partialDateSchema.optional(),
6643
6892
  entityRef: uriSchema.optional(),
6644
6893
  organization: didSchema.optional(),
6645
- evidence: zod.z.array(externalRecordRefSchema).max(20).optional(),
6894
+ evidence: zod.z.array(externalRecordRefSchema2).max(20).optional(),
6646
6895
  verifiedAt: datetimeSchema,
6647
6896
  expiresAt: datetimeSchema.optional(),
6648
6897
  createdAt: datetimeSchema
@@ -6865,7 +7114,7 @@ var ProfileProjectRecordSchema = zod.z.object({
6865
7114
  * its own record; this only says the two describe one thing. Resolves by
6866
7115
  * AT-URI, since they will keep editing their copy.
6867
7116
  */
6868
- sameAs: externalRecordRefSchema.optional(),
7117
+ sameAs: externalRecordRefSchema2.optional(),
6869
7118
  position: strongRefSchema.optional(),
6870
7119
  startedAt: partialDateSchema.optional(),
6871
7120
  endedAt: partialDateSchema.optional(),
@@ -6900,7 +7149,7 @@ var ProfileInvolvementRecordSchema = zod.z.object({
6900
7149
  skills: zod.z.array(zod.z.object({ uri: zod.z.string() })).max(50).optional(),
6901
7150
  labels: selfLabelsSchema.optional(),
6902
7151
  collaborators: zod.z.array(projectMemberRefSchema).max(50).optional(),
6903
- sameAs: externalRecordRefSchema.optional(),
7152
+ sameAs: externalRecordRefSchema2.optional(),
6904
7153
  isPrimary: zod.z.boolean().optional(),
6905
7154
  createdAt: datetimeSchema
6906
7155
  }).passthrough();
@@ -6932,7 +7181,7 @@ var ProfilePositionRecordSchema = zod.z.object({
6932
7181
  endedAt: partialDateSchema.optional(),
6933
7182
  // id.sifa.defs#skillRef -- at-uri only, no cid. Skills are mutable records
6934
7183
  // in the same repo, so the ref resolves live rather than pinning a version.
6935
- skills: zod.z.array(skillRefSchema).max(50).optional(),
7184
+ skills: zod.z.array(skillRefSchema2).max(50).optional(),
6936
7185
  isPrimary: zod.z.boolean().optional(),
6937
7186
  labels: selfLabelsSchema.optional(),
6938
7187
  createdAt: datetimeSchema
@@ -6957,7 +7206,7 @@ var ProfilePresentationRecordSchema = zod.z.object({
6957
7206
  links: zod.z.array(PresentationLinkSchema).max(20).optional(),
6958
7207
  // Optional reference to a long-form write-up (pub.leaflet.document or
6959
7208
  // site.standard.document). Plain at-uri + optional cid so it tracks edits.
6960
- writeupRef: externalRecordRefSchema.optional(),
7209
+ writeupRef: externalRecordRefSchema2.optional(),
6961
7210
  // Optional uploaded cover image for the talk page.
6962
7211
  coverImage: BlobRefSchema.optional(),
6963
7212
  isPrimary: zod.z.boolean().optional(),
@@ -6973,7 +7222,7 @@ var communityAddressSchema = zod.z.object({
6973
7222
  });
6974
7223
  var ProfilePresentationDeliveryRecordSchema = zod.z.object({
6975
7224
  // Optional reference to the id.sifa.profile.presentation delivered here.
6976
- presentationRef: externalRecordRefSchema.optional(),
7225
+ presentationRef: externalRecordRefSchema2.optional(),
6977
7226
  // Fallback title used when there is no presentationRef.
6978
7227
  title: zod.z.string().refine(maxGraphemes(300)).max(3e3).optional(),
6979
7228
  role: zod.z.string().refine(maxGraphemes(64)).max(640).optional(),
@@ -6988,7 +7237,7 @@ var ProfilePresentationDeliveryRecordSchema = zod.z.object({
6988
7237
  status: zod.z.string().optional(),
6989
7238
  links: zod.z.array(PresentationLinkSchema).max(20).optional(),
6990
7239
  // Optional reference to a community.lexicon.calendar.event for this occasion.
6991
- eventRef: externalRecordRefSchema.optional(),
7240
+ eventRef: externalRecordRefSchema2.optional(),
6992
7241
  // DIDs of co-speakers who presented alongside the author at this occasion.
6993
7242
  coSpeakers: zod.z.array(zod.z.string().regex(/^did:[a-z]+:[^\s]+$/, "must be a DID")).max(20).optional(),
6994
7243
  createdAt: datetimeSchema
@@ -7379,7 +7628,7 @@ function describeSifaRecord(collection, value) {
7379
7628
  }
7380
7629
 
7381
7630
  // src/index.ts
7382
- var SIFA_SDK_VERSION = "0.19.85";
7631
+ var SIFA_SDK_VERSION = "0.19.86";
7383
7632
 
7384
7633
  exports.ACTIVITY_TIERS = ACTIVITY_TIERS;
7385
7634
  exports.ACTIVITY_VERBS = ACTIVITY_VERBS;
@@ -7467,8 +7716,10 @@ exports.PLATFORM_LABELS = PLATFORM_LABELS;
7467
7716
  exports.PLATFORM_OPTIONS = PLATFORM_OPTIONS;
7468
7717
  exports.PRESENTATION_LINK_TYPE_LABELS = PRESENTATION_LINK_TYPE_LABELS;
7469
7718
  exports.PRESENTATION_LINK_TYPE_OPTIONS = PRESENTATION_LINK_TYPE_OPTIONS;
7719
+ exports.PRESENTATION_MODE_VALUES = PRESENTATION_MODE_VALUES;
7470
7720
  exports.PRESENTATION_ROLE_LABELS = PRESENTATION_ROLE_LABELS;
7471
7721
  exports.PRESENTATION_ROLE_OPTIONS = PRESENTATION_ROLE_OPTIONS;
7722
+ exports.PRESENTATION_ROLE_VALUES = PRESENTATION_ROLE_VALUES;
7472
7723
  exports.PROFILE_INVESTMENT_NSID = PROFILE_INVESTMENT_NSID;
7473
7724
  exports.PROFILE_INVOLVEMENT_NSID = PROFILE_INVOLVEMENT_NSID;
7474
7725
  exports.PROJECT_ROLES = PROJECT_ROLES;
@@ -7545,7 +7796,7 @@ exports.encodeFeedCursor = encodeFeedCursor;
7545
7796
  exports.entityDisambiguationLabel = entityDisambiguationLabel;
7546
7797
  exports.entityResultKey = entityResultKey;
7547
7798
  exports.excludeSelfApp = excludeSelfApp;
7548
- exports.externalRecordRefSchema = externalRecordRefSchema;
7799
+ exports.externalRecordRefSchema = externalRecordRefSchema2;
7549
7800
  exports.filterHidden = filterHidden;
7550
7801
  exports.findIndustry = findIndustry;
7551
7802
  exports.followingFeedFallbackApp = followingFeedFallbackApp;
@@ -7692,7 +7943,7 @@ exports.shouldRenderHighlights = shouldRenderHighlights;
7692
7943
  exports.singleDateExtractor = singleDateExtractor;
7693
7944
  exports.siteActivityPresetSchema = siteActivityPresetSchema;
7694
7945
  exports.siteActivityPresetUpdateSchema = siteActivityPresetUpdateSchema;
7695
- exports.skillRefSchema = skillRefSchema;
7946
+ exports.skillRefSchema = skillRefSchema2;
7696
7947
  exports.slugifyTitle = slugifyTitle;
7697
7948
  exports.sortByActiveDateRange = sortByActiveDateRange;
7698
7949
  exports.sortByDateDesc = sortByDateDesc;
@@ -7729,6 +7980,7 @@ exports.toStreamCardVM = toStreamCardVM;
7729
7980
  exports.toStreamCardVMs = toStreamCardVMs;
7730
7981
  exports.truncateGraphemes = truncateGraphemes;
7731
7982
  exports.uriSchema = uriSchema;
7983
+ exports.validateTalksImport = validateTalksImport;
7732
7984
  exports.verbForCollection = verbForCollection;
7733
7985
  exports.visibleItems = visibleItems;
7734
7986
  exports.youtubeThumbnailUrl = youtubeThumbnailUrl;