@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/import/index.js +10 -2
- package/dist/import/index.js.map +1 -1
- package/dist/import/presentation-csv.js +4 -0
- package/dist/import/presentation-csv.js.map +1 -1
- package/dist/import/talks-import-validation.js +170 -0
- package/dist/import/talks-import-validation.js.map +1 -0
- package/dist/index.cjs +307 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -1
- package/dist/index.d.ts +64 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas/write/index.d.cts +7 -7
- package/dist/schemas/write/index.d.ts +7 -7
- package/package.json +1 -1
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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 =
|
|
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 =
|
|
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;
|