@better-giving/endowment 1.0.20 → 1.0.23

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.
@@ -1,14 +1,47 @@
1
1
  import type { ToDoc, ToHitFields, ToUpdate } from "@better-giving/types/cloudsearch";
2
- import type { Endow, Environment } from "./db.mjs";
3
- export type Fields = Pick<Endow.DbRecord, "card_img" | "name" | "tagline" | "hq_country" | "sdgs" | "active_in_countries" | "endow_designation" | "registration_number" | "kyc_donors_only" | "claimed" | "env" | "id" | "published" | "fund_opt_in"> & {
4
- contributions_total: number;
5
- contributions_count: number;
6
- };
2
+ import { type InferInput, type InferOutput } from "valibot";
3
+ import { type Environment } from "./schema.mjs";
4
+ export declare const cloudsearchEndowFields: import("valibot").ObjectSchema<{
5
+ readonly contributions_total: import("valibot").NumberSchema<undefined>;
6
+ readonly contributions_count: import("valibot").NumberSchema<undefined>;
7
+ }, undefined>;
8
+ export declare const cloudsearchEndow: import("valibot").ObjectSchema<{
9
+ readonly contributions_total: import("valibot").NumberSchema<undefined>;
10
+ readonly contributions_count: import("valibot").NumberSchema<undefined>;
11
+ readonly name: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">]>;
12
+ readonly tagline: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 140, undefined>]>, never>;
13
+ readonly card_img: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").UrlAction<string, undefined>]>, never>;
14
+ readonly hq_country: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">]>;
15
+ readonly active_in_countries: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, undefined>, import("valibot").NonEmptyAction<string[], "required">]>;
16
+ readonly sdgs: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>;
17
+ readonly published: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
18
+ readonly fund_opt_in: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
19
+ readonly id: import("valibot").SchemaWithPipe<[import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>]>;
20
+ readonly env: import("valibot").PicklistSchema<readonly ["staging", "production"], undefined>;
21
+ readonly registration_number: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">, import("valibot").RegexAction<string, "must only contain letters and numbers">]>;
22
+ readonly endow_designation: import("valibot").PicklistSchema<readonly ["Charity", "Religious Organization", "University", "Hospital", "Other"], undefined>;
23
+ readonly claimed: import("valibot").BooleanSchema<undefined>;
24
+ readonly kyc_donors_only: import("valibot").BooleanSchema<undefined>;
25
+ }, undefined>;
26
+ export declare const cloudSearchEndowFields: import("valibot").PicklistSchema<["name", "tagline", "card_img", "hq_country", "active_in_countries", "sdgs", "published", "fund_opt_in", "id", "env", "registration_number", "endow_designation", "claimed", "kyc_donors_only", "contributions_total", "contributions_count"], undefined>;
27
+ export declare const endowsQueryParams: import("valibot").ObjectSchema<{
28
+ readonly query: import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>;
29
+ readonly page: import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TransformAction<string, number>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>]>;
30
+ readonly endow_designation: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly ["Charity", "Religious Organization", "University", "Hospital", "Other"], undefined>, undefined>]>, never>;
31
+ readonly sdgs: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").MapItemsAction<string[], number>, import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>]>, never>;
32
+ readonly kyc_only: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").MapItemsAction<string[], boolean>, import("valibot").ArraySchema<import("valibot").BooleanSchema<undefined>, undefined>]>, never>;
33
+ readonly fund_opt_in: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").MapItemsAction<string[], boolean>, import("valibot").ArraySchema<import("valibot").BooleanSchema<undefined>, undefined>]>, never>;
34
+ readonly claimed: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").MapItemsAction<string[], boolean>, import("valibot").ArraySchema<import("valibot").BooleanSchema<undefined>, undefined>]>, never>;
35
+ readonly countries: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").ArraySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, undefined>]>, never>;
36
+ readonly fields: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").ArraySchema<import("valibot").PicklistSchema<["name", "tagline", "card_img", "hq_country", "active_in_countries", "sdgs", "published", "fund_opt_in", "id", "env", "registration_number", "endow_designation", "claimed", "kyc_donors_only", "contributions_total", "contributions_count"], undefined>, undefined>]>, never>;
37
+ }, undefined>;
38
+ export type CloudsearchEndowsQueryParams = InferInput<typeof endowsQueryParams>;
39
+ export type CloudsearchEndow = InferOutput<typeof cloudsearchEndow>;
7
40
  type DocId = `${Environment}-${number}`;
8
41
  type Doc = {
9
42
  documentId: DocId;
10
43
  _score: number;
11
- } & ToDoc<Fields>;
44
+ } & ToDoc<CloudsearchEndow>;
12
45
  export type HitFields = ToHitFields<Omit<Doc, "documentId" | "_score">>;
13
- export type Update = ToUpdate<DocId, Fields>;
46
+ export type Update = ToUpdate<DocId, CloudsearchEndow>;
14
47
  export {};
@@ -1 +1,40 @@
1
- export {};
1
+ import { orgDesignation, unSdgNum } from "@better-giving/schemas";
2
+ import { array, boolean, integer, keyof, mapItems, minValue, number, object, optional, pick, pipe, string, transform, } from "valibot";
3
+ import { csvStrs, endowment, str } from "./schema.mjs";
4
+ const boolCsv = pipe(csvStrs, mapItems((x) => x === "true"), array(boolean()));
5
+ export const cloudsearchEndowFields = object({
6
+ contributions_total: number(),
7
+ contributions_count: number(),
8
+ });
9
+ export const cloudsearchEndow = object({
10
+ ...pick(endowment, [
11
+ "card_img",
12
+ "name",
13
+ "tagline",
14
+ "hq_country",
15
+ "sdgs",
16
+ "active_in_countries",
17
+ "endow_designation",
18
+ "registration_number",
19
+ "kyc_donors_only",
20
+ "claimed",
21
+ //filters
22
+ "env",
23
+ "id",
24
+ "published",
25
+ "fund_opt_in",
26
+ ]).entries,
27
+ ...cloudsearchEndowFields.entries,
28
+ });
29
+ export const cloudSearchEndowFields = keyof(cloudsearchEndow);
30
+ export const endowsQueryParams = object({
31
+ query: str,
32
+ page: pipe(string(), transform((x) => +x), integer(), minValue(1)),
33
+ endow_designation: optional(pipe(csvStrs, array(orgDesignation))),
34
+ sdgs: optional(pipe(csvStrs, mapItems((x) => +x), array(unSdgNum))),
35
+ kyc_only: optional(boolCsv),
36
+ fund_opt_in: optional(boolCsv),
37
+ claimed: optional(boolCsv),
38
+ countries: optional(pipe(csvStrs, array(str))),
39
+ fields: optional(pipe(csvStrs, array(cloudSearchEndowFields))),
40
+ });
package/dist/db.d.mts CHANGED
@@ -19,10 +19,7 @@ export declare namespace Endow {
19
19
  SK: Environment;
20
20
  };
21
21
  type NonKeyAttributes = EndowmentShape & {
22
- env: Environment;
23
- kyc_donors_only: boolean;
24
22
  fiscal_sponsored: boolean;
25
- claimed: boolean;
26
23
  /** in USD @deprecated */
27
24
  payout_minimum?: number;
28
25
  /** @deprecated */
package/dist/index.d.mts CHANGED
@@ -1,8 +1,7 @@
1
- import type { Fields as FundItem } from "./cloudsearch.mjs";
2
1
  import type { Endow as NEndow, Media, Program as NProgram } from "./db.mjs";
3
2
  import type { Milestone } from "./schema.mjs";
4
- export type { Allocation, DonateMethodId, EndowByEinParams, EndowDesignation, EndowQueryParam, EndowsQueryParams, EndowUpdate, Environment, Increment, Milestone, MilestoneUpdate, NewMilestone, NewProgram, ProgramUpdate, SocialMediaURLs, UnSdgNum, MediaQueryParams, MediaQueryParamsObj, MediaType, MediaUpdate, } from "./schema.mjs";
5
- export type { FundItem };
3
+ export type { Allocation, DonateMethodId, EndowDesignation, EndowQueryParam, EndowUpdate, Environment, Increment, Milestone, MilestoneUpdate, NewMilestone, NewProgram, ProgramUpdate, SocialMediaURLs, UnSdgNum, MediaQueryParams, MediaQueryParamsObj, MediaType, MediaUpdate, } from "./schema.mjs";
4
+ export type { CloudsearchEndow as EndowItem, CloudsearchEndowsQueryParams as EndowsQueryParams, } from "./cloudsearch.mjs";
6
5
  export type Endow = Pick<NEndow.DbRecord, "id" | "slug" | "active_in_countries" | "endow_designation" | "fiscal_sponsored" | "hide_bg_tip" | "hq_country" | "image" | "card_img" | "kyc_donors_only" | "logo" | "name" | "overview" | "published" | "registration_number" | "sdgs" | "social_media_urls" | "street_address" | "tagline" | "url" | "claimed" | "progDonationsAllowed" | "donateMethods" | "allocation" | "increments" | "receiptMsg">;
7
6
  export type Program = Omit<NProgram.DbRecord, "PK" | "SK"> & {
8
7
  milestones: Milestone[];
package/dist/schema.d.mts CHANGED
@@ -3,6 +3,8 @@ export type { OrgDesignation as EndowDesignation, Environment, UnSdgNum, } from
3
3
  export { orgDesignation as endowDesignation, env, unSdgNum };
4
4
  import { type InferInput, type InferOutput } from "valibot";
5
5
  export declare const str: import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>;
6
+ export declare const csv: import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>;
7
+ export declare const csvStrs: import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>;
6
8
  export declare const allocation: import("valibot").SchemaWithPipe<[import("valibot").ObjectSchema<{
7
9
  readonly cash: import("valibot").SchemaWithPipe<[import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 0, undefined>, import("valibot").MaxValueAction<number, 100, undefined>]>;
8
10
  readonly liq: import("valibot").SchemaWithPipe<[import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 0, undefined>, import("valibot").MaxValueAction<number, 100, undefined>]>;
@@ -17,7 +19,8 @@ export declare const endowId: import("valibot").SchemaWithPipe<[import("valibot"
17
19
  export type EndowId = InferOutput<typeof endowId>;
18
20
  export declare const endowIdParam: import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TransformAction<string, number>, import("valibot").SchemaWithPipe<[import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>]>]>;
19
21
  export declare const segmentMaxChars = 30;
20
- export declare const segment: import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 30, ({ requirement: r }: import("valibot").MaxLengthIssue<string, 30>) => string>, import("valibot").RegexAction<string, "should not be an id">, import("valibot").RegexAction<string, "allowed: numbers | letters | - | . | _ | ~">, import("valibot").ExcludesAction<string, "..", "should not contain double periods">, import("valibot").CustomSchema<string, "should not start with dot">, import("valibot").CustomSchema<string, "should not end with dot">]>>;
22
+ export declare const segment: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 30, ({ requirement: r }: import("valibot").MaxLengthIssue<string, 30>) => string>, import("valibot").RegexAction<string, "should not be an id">, import("valibot").RegexAction<string, "allowed: numbers | letters | - | . | _ | ~">, import("valibot").ExcludesAction<string, "..", "should not contain double periods">, import("valibot").CustomSchema<string, "should not start with dot">, import("valibot").CustomSchema<string, "should not end with dot">]>;
23
+ export declare const slug: import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 30, ({ requirement: r }: import("valibot").MaxLengthIssue<string, 30>) => string>, import("valibot").RegexAction<string, "should not be an id">, import("valibot").RegexAction<string, "allowed: numbers | letters | - | . | _ | ~">, import("valibot").ExcludesAction<string, "..", "should not contain double periods">, import("valibot").CustomSchema<string, "should not start with dot">, import("valibot").CustomSchema<string, "should not end with dot">]>>;
21
24
  export declare const reg_number: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">, import("valibot").RegexAction<string, "must only contain letters and numbers">]>;
22
25
  export declare const donateMethodIds: readonly ["stripe", "crypto", "daf", "stocks"];
23
26
  export declare const donateMethodId: import("valibot").PicklistSchema<readonly ["stripe", "crypto", "daf", "stocks"], undefined>;
@@ -48,6 +51,7 @@ export declare const increment: import("valibot").ObjectSchema<{
48
51
  export type Increment = InferOutput<typeof increment>;
49
52
  export declare const endowment: import("valibot").ObjectSchema<{
50
53
  readonly id: import("valibot").SchemaWithPipe<[import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>]>;
54
+ readonly env: import("valibot").PicklistSchema<readonly ["staging", "production"], undefined>;
51
55
  readonly slug: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 30, ({ requirement: r }: import("valibot").MaxLengthIssue<string, 30>) => string>, import("valibot").RegexAction<string, "should not be an id">, import("valibot").RegexAction<string, "allowed: numbers | letters | - | . | _ | ~">, import("valibot").ExcludesAction<string, "..", "should not contain double periods">, import("valibot").CustomSchema<string, "should not start with dot">, import("valibot").CustomSchema<string, "should not end with dot">]>>, never>;
52
56
  readonly registration_number: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">, import("valibot").RegexAction<string, "must only contain letters and numbers">]>;
53
57
  readonly name: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">]>;
@@ -71,7 +75,7 @@ export declare const endowment: import("valibot").ObjectSchema<{
71
75
  }, undefined>;
72
76
  /** website */
73
77
  readonly url: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").StartsWithAction<string, "https://", "should start with https://">, import("valibot").CustomSchema<string, "incomplete url">, import("valibot").UrlAction<string, "invalid url">]>>, never>;
74
- readonly sdgs: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>;
78
+ readonly sdgs: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>;
75
79
  readonly receiptMsg: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 500, undefined>]>, never>;
76
80
  readonly hide_bg_tip: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
77
81
  readonly published: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
@@ -95,9 +99,13 @@ export declare const endowment: import("valibot").ObjectSchema<{
95
99
  label: string;
96
100
  }[], 4, undefined>]>, never>;
97
101
  readonly fund_opt_in: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
102
+ /** endowment is not claimed if `false` only */
103
+ readonly claimed: import("valibot").BooleanSchema<undefined>;
104
+ readonly kyc_donors_only: import("valibot").BooleanSchema<undefined>;
98
105
  }, undefined>;
99
106
  export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
100
107
  readonly id: import("valibot").SchemaWithPipe<[import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>]>;
108
+ readonly env: import("valibot").PicklistSchema<readonly ["staging", "production"], undefined>;
101
109
  readonly slug: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 30, ({ requirement: r }: import("valibot").MaxLengthIssue<string, 30>) => string>, import("valibot").RegexAction<string, "should not be an id">, import("valibot").RegexAction<string, "allowed: numbers | letters | - | . | _ | ~">, import("valibot").ExcludesAction<string, "..", "should not contain double periods">, import("valibot").CustomSchema<string, "should not start with dot">, import("valibot").CustomSchema<string, "should not end with dot">]>>, never>;
102
110
  readonly registration_number: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">, import("valibot").RegexAction<string, "must only contain letters and numbers">]>;
103
111
  readonly name: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">]>;
@@ -121,7 +129,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
121
129
  }, undefined>;
122
130
  /** website */
123
131
  readonly url: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").StartsWithAction<string, "https://", "should start with https://">, import("valibot").CustomSchema<string, "incomplete url">, import("valibot").UrlAction<string, "invalid url">]>>, never>;
124
- readonly sdgs: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>;
132
+ readonly sdgs: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>;
125
133
  readonly receiptMsg: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 500, undefined>]>, never>;
126
134
  readonly hide_bg_tip: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
127
135
  readonly published: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
@@ -145,9 +153,13 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
145
153
  label: string;
146
154
  }[], 4, undefined>]>, never>;
147
155
  readonly fund_opt_in: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
156
+ /** endowment is not claimed if `false` only */
157
+ readonly claimed: import("valibot").BooleanSchema<undefined>;
158
+ readonly kyc_donors_only: import("valibot").BooleanSchema<undefined>;
148
159
  }, undefined>, "_types" | "_run" | "entries"> & {
149
160
  readonly entries: Omit<{
150
161
  readonly id: import("valibot").SchemaWithPipe<[import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>]>;
162
+ readonly env: import("valibot").PicklistSchema<readonly ["staging", "production"], undefined>;
151
163
  readonly slug: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 30, ({ requirement: r }: import("valibot").MaxLengthIssue<string, 30>) => string>, import("valibot").RegexAction<string, "should not be an id">, import("valibot").RegexAction<string, "allowed: numbers | letters | - | . | _ | ~">, import("valibot").ExcludesAction<string, "..", "should not contain double periods">, import("valibot").CustomSchema<string, "should not start with dot">, import("valibot").CustomSchema<string, "should not end with dot">]>>, never>;
152
164
  readonly registration_number: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">, import("valibot").RegexAction<string, "must only contain letters and numbers">]>;
153
165
  readonly name: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">]>;
@@ -171,7 +183,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
171
183
  }, undefined>;
172
184
  /** website */
173
185
  readonly url: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").StartsWithAction<string, "https://", "should start with https://">, import("valibot").CustomSchema<string, "incomplete url">, import("valibot").UrlAction<string, "invalid url">]>>, never>;
174
- readonly sdgs: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>;
186
+ readonly sdgs: import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>;
175
187
  readonly receiptMsg: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 500, undefined>]>, never>;
176
188
  readonly hide_bg_tip: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
177
189
  readonly published: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
@@ -195,19 +207,22 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
195
207
  label: string;
196
208
  }[], 4, undefined>]>, never>;
197
209
  readonly fund_opt_in: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>;
198
- }, "id">;
199
- _run(dataset: import("valibot").Dataset<unknown, never>, config: import("valibot").Config<import("valibot").StringIssue | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
210
+ /** endowment is not claimed if `false` only */
211
+ readonly claimed: import("valibot").BooleanSchema<undefined>;
212
+ readonly kyc_donors_only: import("valibot").BooleanSchema<undefined>;
213
+ }, "id" | "env" | "claimed" | "kyc_donors_only">;
214
+ _run(dataset: import("valibot").Dataset<unknown, never>, config: import("valibot").Config<import("valibot").StringIssue | import("valibot").RegexIssue<string> | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
200
215
  cash: number;
201
216
  liq: number;
202
217
  lock: number;
203
- }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").RegexIssue<string> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
218
+ }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
204
219
  value: string;
205
220
  label: string;
206
221
  }[], 4>>): import("valibot").Dataset<{
207
222
  name: string;
208
223
  hq_country: string;
209
224
  active_in_countries: string[];
210
- sdgs: (2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[];
225
+ sdgs: (2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[];
211
226
  registration_number: string;
212
227
  endow_designation: "Charity" | "Religious Organization" | "University" | "Hospital" | "Other";
213
228
  social_media_urls: {
@@ -242,11 +257,11 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
242
257
  label: string;
243
258
  }[] | undefined;
244
259
  fund_opt_in?: boolean | undefined;
245
- }, import("valibot").StringIssue | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
260
+ }, import("valibot").StringIssue | import("valibot").RegexIssue<string> | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
246
261
  cash: number;
247
262
  liq: number;
248
263
  lock: number;
249
- }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").RegexIssue<string> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
264
+ }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
250
265
  value: string;
251
266
  label: string;
252
267
  }[], 4>>;
@@ -255,7 +270,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
255
270
  name: string;
256
271
  hq_country: string;
257
272
  active_in_countries: string[];
258
- sdgs: (2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[];
273
+ sdgs: (2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[];
259
274
  registration_number: string;
260
275
  endow_designation: "Charity" | "Religious Organization" | "University" | "Hospital" | "Other";
261
276
  social_media_urls: {
@@ -295,7 +310,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
295
310
  name: string;
296
311
  hq_country: string;
297
312
  active_in_countries: string[];
298
- sdgs: (2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[];
313
+ sdgs: (2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[];
299
314
  registration_number: string;
300
315
  endow_designation: "Charity" | "Religious Organization" | "University" | "Hospital" | "Other";
301
316
  social_media_urls: {
@@ -331,11 +346,11 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
331
346
  }[] | undefined;
332
347
  fund_opt_in?: boolean | undefined;
333
348
  };
334
- readonly issue: import("valibot").StringIssue | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
349
+ readonly issue: import("valibot").StringIssue | import("valibot").RegexIssue<string> | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
335
350
  cash: number;
336
351
  liq: number;
337
352
  lock: number;
338
- }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").RegexIssue<string> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
353
+ }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
339
354
  value: string;
340
355
  label: string;
341
356
  }[], 4>;
@@ -353,7 +368,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
353
368
  readonly hq_country: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">]>, never>;
354
369
  readonly active_in_countries: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, undefined>, import("valibot").NonEmptyAction<string[], "required">]>, never>;
355
370
  readonly street_address: import("valibot").OptionalSchema<import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, never>, never>;
356
- readonly sdgs: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>, never>;
371
+ readonly sdgs: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>, import("valibot").MinLengthAction<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1, undefined>]>, never>;
357
372
  readonly receiptMsg: import("valibot").OptionalSchema<import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 500, undefined>]>, never>, never>;
358
373
  readonly hide_bg_tip: import("valibot").OptionalSchema<import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>, never>;
359
374
  readonly published: import("valibot").OptionalSchema<import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, never>, never>;
@@ -388,11 +403,11 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
388
403
  readonly tiktok: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").StartsWithAction<string, "https://", "should start with https://">, import("valibot").CustomSchema<string, "incomplete url">, import("valibot").UrlAction<string, "invalid url">]>>, never>;
389
404
  }, undefined>, never>;
390
405
  };
391
- _run(dataset: import("valibot").Dataset<unknown, never>, config: import("valibot").Config<import("valibot").StringIssue | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
406
+ _run(dataset: import("valibot").Dataset<unknown, never>, config: import("valibot").Config<import("valibot").StringIssue | import("valibot").RegexIssue<string> | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
392
407
  cash: number;
393
408
  liq: number;
394
409
  lock: number;
395
- }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").RegexIssue<string> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
410
+ }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
396
411
  value: string;
397
412
  label: string;
398
413
  }[], 4>>): import("valibot").Dataset<{
@@ -407,7 +422,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
407
422
  hq_country?: string | undefined;
408
423
  active_in_countries?: string[] | undefined;
409
424
  street_address?: string | undefined;
410
- sdgs?: (2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[] | undefined;
425
+ sdgs?: (2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[] | undefined;
411
426
  receiptMsg?: string | undefined;
412
427
  hide_bg_tip?: boolean | undefined;
413
428
  published?: boolean | undefined;
@@ -434,11 +449,11 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
434
449
  youtube?: string | undefined;
435
450
  tiktok?: string | undefined;
436
451
  } | undefined;
437
- }, import("valibot").StringIssue | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
452
+ }, import("valibot").StringIssue | import("valibot").RegexIssue<string> | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
438
453
  cash: number;
439
454
  liq: number;
440
455
  lock: number;
441
- }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").RegexIssue<string> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
456
+ }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
442
457
  value: string;
443
458
  label: string;
444
459
  }[], 4>>;
@@ -455,7 +470,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
455
470
  hq_country?: string | undefined;
456
471
  active_in_countries?: string[] | undefined;
457
472
  street_address?: string | undefined;
458
- sdgs?: (2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[] | undefined;
473
+ sdgs?: (2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[] | undefined;
459
474
  receiptMsg?: string | undefined;
460
475
  hide_bg_tip?: boolean | undefined;
461
476
  published?: boolean | undefined;
@@ -495,7 +510,7 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
495
510
  hq_country?: string | undefined;
496
511
  active_in_countries?: string[] | undefined;
497
512
  street_address?: string | undefined;
498
- sdgs?: (2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[] | undefined;
513
+ sdgs?: (2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[] | undefined;
499
514
  receiptMsg?: string | undefined;
500
515
  hide_bg_tip?: boolean | undefined;
501
516
  published?: boolean | undefined;
@@ -523,43 +538,25 @@ export declare const endowUpdate: Omit<Omit<import("valibot").ObjectSchema<{
523
538
  tiktok?: string | undefined;
524
539
  } | undefined;
525
540
  };
526
- readonly issue: import("valibot").StringIssue | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
541
+ readonly issue: import("valibot").StringIssue | import("valibot").RegexIssue<string> | import("valibot").NumberIssue | import("valibot").IntegerIssue<number> | import("valibot").MinValueIssue<number, 0> | import("valibot").MaxValueIssue<number, 100> | import("valibot").ObjectIssue | import("valibot").CheckIssue<{
527
542
  cash: number;
528
543
  liq: number;
529
544
  lock: number;
530
- }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").RegexIssue<string> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
545
+ }> | import("valibot").MaxLengthIssue<string, 30> | import("valibot").ExcludesIssue<string, ".."> | import("valibot").CustomIssue | import("valibot").NonEmptyIssue<string> | import("valibot").PicklistIssue | import("valibot").UrlIssue<string> | import("valibot").StartsWithIssue<string, "https://"> | import("valibot").MaxLengthIssue<string, 140> | import("valibot").ArrayIssue | import("valibot").NonEmptyIssue<string[]> | import("valibot").MinLengthIssue<(2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17)[], 1> | import("valibot").MaxLengthIssue<string, 500> | import("valibot").BooleanIssue | import("valibot").MaxLengthIssue<{
531
546
  value: string;
532
547
  label: string;
533
548
  }[], 4>;
534
549
  } | undefined;
535
550
  };
536
- export declare const endowFields: import("valibot").PicklistSchema<["url", "slug", "name", "overview", "tagline", "image", "logo", "card_img", "hq_country", "active_in_countries", "street_address", "sdgs", "receiptMsg", "hide_bg_tip", "published", "progDonationsAllowed", "allocation", "donateMethods", "increments", "fund_opt_in", "id", "registration_number", "endow_designation", "social_media_urls"], undefined>;
551
+ export declare const endowFields: import("valibot").PicklistSchema<["url", "slug", "name", "overview", "tagline", "image", "logo", "card_img", "hq_country", "active_in_countries", "street_address", "sdgs", "receiptMsg", "hide_bg_tip", "published", "progDonationsAllowed", "allocation", "donateMethods", "increments", "fund_opt_in", "id", "env", "registration_number", "endow_designation", "social_media_urls", "claimed", "kyc_donors_only"], undefined>;
537
552
  export type Endowment = InferOutput<typeof endowment>;
538
553
  export type EndowUpdate = InferOutput<typeof endowUpdate>;
539
554
  export type EndowmentFields = InferOutput<typeof endowFields>;
540
- export declare const endowsQueryParams: import("valibot").ObjectSchema<{
541
- readonly query: import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>;
542
- readonly page: import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TransformAction<string, number>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>]>;
543
- readonly endow_designation: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly ["Charity", "Religious Organization", "University", "Hospital", "Other"], undefined>, undefined>]>, never>;
544
- readonly sdgs: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, number[]>, import("valibot").ArraySchema<import("valibot").PicklistSchema<readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], undefined>, undefined>]>, never>;
545
- readonly kyc_only: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, boolean[]>, import("valibot").ArraySchema<import("valibot").BooleanSchema<undefined>, undefined>]>, never>;
546
- readonly fund_opt_in: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, boolean[]>, import("valibot").ArraySchema<import("valibot").BooleanSchema<undefined>, undefined>]>, never>;
547
- readonly claimed: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, boolean[]>, import("valibot").ArraySchema<import("valibot").BooleanSchema<undefined>, undefined>]>, never>;
548
- readonly countries: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, never>;
549
- readonly fields: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").ArraySchema<import("valibot").PicklistSchema<["url", "slug", "name", "overview", "tagline", "image", "logo", "card_img", "hq_country", "active_in_countries", "street_address", "sdgs", "receiptMsg", "hide_bg_tip", "published", "progDonationsAllowed", "allocation", "donateMethods", "increments", "fund_opt_in", "id", "registration_number", "endow_designation", "social_media_urls"], undefined>, undefined>]>, never>;
550
- }, undefined>;
551
- export type EndowsQueryParams = InferInput<typeof endowsQueryParams>;
552
- export declare const endowQueryParam: import("valibot").ObjectSchema<{
553
- readonly fields: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").ArraySchema<import("valibot").PicklistSchema<["url", "slug", "name", "overview", "tagline", "image", "logo", "card_img", "hq_country", "active_in_countries", "street_address", "sdgs", "receiptMsg", "hide_bg_tip", "published", "progDonationsAllowed", "allocation", "donateMethods", "increments", "fund_opt_in", "id", "registration_number", "endow_designation", "social_media_urls"], undefined>, undefined>]>, never>;
554
- readonly slug: import("valibot").OptionalSchema<import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").MaxLengthAction<string, 30, ({ requirement: r }: import("valibot").MaxLengthIssue<string, 30>) => string>, import("valibot").RegexAction<string, "should not be an id">, import("valibot").RegexAction<string, "allowed: numbers | letters | - | . | _ | ~">, import("valibot").ExcludesAction<string, "..", "should not contain double periods">, import("valibot").CustomSchema<string, "should not start with dot">, import("valibot").CustomSchema<string, "should not end with dot">]>>, never>;
555
- readonly env: import("valibot").PicklistSchema<readonly ["staging", "production"], undefined>;
556
- }, undefined>;
557
- export type EndowQueryParam = InferInput<typeof endowQueryParam>;
558
- export declare const endowByEinParams: import("valibot").ObjectSchema<{
559
- readonly env: import("valibot").PicklistSchema<readonly ["staging", "production"], undefined>;
560
- readonly ein: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").NonEmptyAction<string, "required">, import("valibot").RegexAction<string, "must only contain letters and numbers">]>;
555
+ /** for ein path, only fields in reg-num/env gsi is available */
556
+ export declare const endowQueryParams: import("valibot").ObjectSchema<{
557
+ readonly fields: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").LazySchema<import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]> | import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").RegexAction<string, "invalid csv">]>>, import("valibot").TransformAction<string, string[]>, import("valibot").FilterItemsAction<string[]>]>, import("valibot").ArraySchema<import("valibot").PicklistSchema<["url", "slug", "name", "overview", "tagline", "image", "logo", "card_img", "hq_country", "active_in_countries", "street_address", "sdgs", "receiptMsg", "hide_bg_tip", "published", "progDonationsAllowed", "allocation", "donateMethods", "increments", "fund_opt_in", "id", "env", "registration_number", "endow_designation", "social_media_urls", "claimed", "kyc_donors_only"], undefined>, undefined>]>, never>;
561
558
  }, undefined>;
562
- export type EndowByEinParams = InferInput<typeof endowByEinParams>;
559
+ export type EndowQueryParam = InferInput<typeof endowQueryParams>;
563
560
  export declare const programId: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").UuidAction<string, undefined>]>;
564
561
  export type ProgramId = InferOutput<typeof programId>;
565
562
  export declare const milestoneId: import("valibot").SchemaWithPipe<[import("valibot").SchemaWithPipe<[import("valibot").StringSchema<undefined>, import("valibot").TrimAction]>, import("valibot").UuidAction<string, undefined>]>;
package/dist/schema.mjs CHANGED
@@ -1,7 +1,13 @@
1
1
  import { env, orgDesignation, unSdgNum } from "@better-giving/schemas";
2
2
  export { orgDesignation as endowDesignation, env, unSdgNum };
3
- import { url, array, base64, boolean, check, custom, excludes, integer, keyof, lazy, maxLength, maxValue, minLength, minValue, nonEmpty, nullish, number, object, omit, optional, partial, picklist, pipe, regex, startsWith, string, transform, trim, uuid, isoTimestamp, } from "valibot";
3
+ import { url, array, base64, boolean, check, custom, excludes, filterItems, integer, isoTimestamp, keyof, lazy, maxLength, maxValue, minLength, minValue, nonEmpty, nullish, number, object, omit, optional, partial, picklist, pipe, regex, startsWith, string, transform, trim, uuid, } from "valibot";
4
4
  export const str = pipe(string(), trim());
5
+ export const csv = lazy((x) => {
6
+ if (!x)
7
+ return str;
8
+ return pipe(str, regex(/^[^,]+(?:,[^,]+)*$/, "invalid csv"));
9
+ });
10
+ export const csvStrs = pipe(csv, transform((x) => x.split(",")), filterItems((x) => x.length > 0));
5
11
  const pct = pipe(number(), integer(), minValue(0), maxValue(100));
6
12
  export const allocation = pipe(object({
7
13
  cash: pct,
@@ -11,15 +17,12 @@ export const allocation = pipe(object({
11
17
  export const endowId = pipe(number(), integer(), minValue(1));
12
18
  export const endowIdParam = pipe(string(), transform((x) => +x), endowId);
13
19
  export const segmentMaxChars = 30;
14
- export const segment = lazy((x) => {
15
- if (!x)
16
- return str;
17
- return pipe(str, maxLength(segmentMaxChars, ({ requirement: r }) => `cannot exceed ${r} chars`),
18
- //must not be id-like
19
- regex(/^(?!^\d+$)/, "should not be an id"),
20
- //valid characters
21
- regex(/^[a-zA-Z0-9-._~]+$/, "allowed: numbers | letters | - | . | _ | ~"), excludes("..", "should not contain double periods"), custom((x) => !x.startsWith("."), "should not start with dot"), custom((x) => !x.endsWith("."), "should not end with dot"));
22
- });
20
+ export const segment = pipe(str, maxLength(segmentMaxChars, ({ requirement: r }) => `cannot exceed ${r} chars`),
21
+ //must not be id-like
22
+ regex(/^(?!^\d+$)/, "should not be an id"),
23
+ //valid characters
24
+ regex(/^[a-zA-Z0-9-._~]+$/, "allowed: numbers | letters | - | . | _ | ~"), excludes("..", "should not contain double periods"), custom((x) => !x.startsWith("."), "should not start with dot"), custom((x) => !x.endsWith("."), "should not end with dot"));
25
+ export const slug = lazy((x) => (x ? segment : str));
23
26
  export const reg_number = pipe(str, nonEmpty("required"), regex(/^[a-zA-Z0-9]+$/, "must only contain letters and numbers"));
24
27
  export const donateMethodIds = ["stripe", "crypto", "daf", "stocks"];
25
28
  export const donateMethodId = picklist(donateMethodIds);
@@ -53,7 +56,8 @@ export const increment = object({
53
56
  });
54
57
  export const endowment = object({
55
58
  id: endowId,
56
- slug: optional(segment),
59
+ env,
60
+ slug: optional(slug),
57
61
  registration_number: reg_number,
58
62
  name: pipe(str, nonEmpty("required")),
59
63
  endow_designation: orgDesignation,
@@ -79,34 +83,15 @@ export const endowment = object({
79
83
  donateMethods: optional(array(donateMethodId)),
80
84
  increments: optional(pipe(array(increment), maxLength(MAX_NUM_INCREMENTS))),
81
85
  fund_opt_in: optional(boolean()),
86
+ /** endowment is not claimed if `false` only */
87
+ claimed: boolean(),
88
+ kyc_donors_only: boolean(),
82
89
  });
83
- export const endowUpdate = partial(omit(endowment, ["id"]));
90
+ export const endowUpdate = partial(omit(endowment, ["id", "claimed", "kyc_donors_only", "env"]));
84
91
  export const endowFields = keyof(endowment);
85
- const csv = lazy((x) => {
86
- if (!x)
87
- return str;
88
- return pipe(str, regex(/^[^,]+(?:,[^,]+)*$/, "invalid csv"));
89
- });
90
- const boolCsv = pipe(csv, transform((x) => x.split(",").map(Boolean)), array(boolean()));
91
- export const endowsQueryParams = object({
92
- query: str,
93
- page: pipe(string(), transform((x) => +x), integer(), minValue(1)),
94
- endow_designation: optional(pipe(csv, transform((x) => x.split(",")), array(orgDesignation))),
95
- sdgs: optional(pipe(csv, transform((x) => x.split(",").map((s) => +s)), array(unSdgNum))),
96
- kyc_only: optional(boolCsv),
97
- fund_opt_in: optional(boolCsv),
98
- claimed: optional(boolCsv),
99
- countries: optional(csv),
100
- fields: optional(pipe(csv, transform((x) => x.split(",")), array(endowFields))),
101
- });
102
- export const endowQueryParam = object({
103
- fields: optional(pipe(csv, transform((x) => x.split(",")), array(endowFields))),
104
- slug: optional(segment),
105
- env,
106
- });
107
- export const endowByEinParams = object({
108
- env,
109
- ein: reg_number,
92
+ /** for ein path, only fields in reg-num/env gsi is available */
93
+ export const endowQueryParams = object({
94
+ fields: optional(pipe(csvStrs, array(endowFields))),
110
95
  });
111
96
  const amnt = pipe(number(), minValue(0));
112
97
  export const programId = pipe(str, uuid());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-giving/endowment",
3
- "version": "1.0.20",
3
+ "version": "1.0.23",
4
4
  "peerDependencies": {
5
5
  "@better-giving/schemas": "1.0.1",
6
6
  "@better-giving/types": "1.0.1"
@@ -1,39 +1,96 @@
1
+ import { orgDesignation, unSdgNum } from "@better-giving/schemas";
1
2
  import type {
2
3
  ToDoc,
3
4
  ToHitFields,
4
5
  ToUpdate,
5
6
  } from "@better-giving/types/cloudsearch";
6
- import type { Endow, Environment } from "./db.mjs";
7
-
8
- export type Fields = Pick<
9
- Endow.DbRecord,
10
- //card UI attribures
11
- | "card_img"
12
- | "name"
13
- | "tagline"
14
- | "hq_country"
15
- | "sdgs"
16
- | "active_in_countries"
17
- | "endow_designation"
18
- | "registration_number"
19
- //icons
20
- | "kyc_donors_only"
21
- | "claimed"
22
- //filters
23
- | "env"
24
- | "id"
25
- | "published"
26
- | "fund_opt_in"
27
- // balance data
28
- > & { contributions_total: number; contributions_count: number };
7
+ import {
8
+ type InferInput,
9
+ type InferOutput,
10
+ array,
11
+ boolean,
12
+ integer,
13
+ keyof,
14
+ mapItems,
15
+ minValue,
16
+ number,
17
+ object,
18
+ optional,
19
+ pick,
20
+ pipe,
21
+ string,
22
+ transform,
23
+ } from "valibot";
24
+ import { type Environment, csvStrs, endowment, str } from "./schema.mjs";
25
+
26
+ const boolCsv = pipe(
27
+ csvStrs,
28
+ mapItems((x) => x === "true"),
29
+ array(boolean())
30
+ );
31
+
32
+ export const cloudsearchEndowFields = object({
33
+ contributions_total: number(),
34
+ contributions_count: number(),
35
+ });
36
+
37
+ export const cloudsearchEndow = object({
38
+ ...pick(endowment, [
39
+ "card_img",
40
+ "name",
41
+ "tagline",
42
+ "hq_country",
43
+ "sdgs",
44
+ "active_in_countries",
45
+ "endow_designation",
46
+ "registration_number",
47
+ "kyc_donors_only",
48
+ "claimed",
49
+ //filters
50
+ "env",
51
+ "id",
52
+ "published",
53
+ "fund_opt_in",
54
+ ]).entries,
55
+ ...cloudsearchEndowFields.entries,
56
+ });
57
+
58
+ export const cloudSearchEndowFields = keyof(cloudsearchEndow);
59
+
60
+ export const endowsQueryParams = object({
61
+ query: str,
62
+ page: pipe(
63
+ string(),
64
+ transform((x) => +x),
65
+ integer(),
66
+ minValue(1)
67
+ ),
68
+ endow_designation: optional(pipe(csvStrs, array(orgDesignation))),
69
+ sdgs: optional(
70
+ pipe(
71
+ csvStrs,
72
+ mapItems((x) => +x),
73
+ array(unSdgNum)
74
+ )
75
+ ),
76
+ kyc_only: optional(boolCsv),
77
+ fund_opt_in: optional(boolCsv),
78
+ claimed: optional(boolCsv),
79
+ countries: optional(pipe(csvStrs, array(str))),
80
+ fields: optional(pipe(csvStrs, array(cloudSearchEndowFields))),
81
+ });
82
+
83
+ export type CloudsearchEndowsQueryParams = InferInput<typeof endowsQueryParams>;
84
+
85
+ export type CloudsearchEndow = InferOutput<typeof cloudsearchEndow>;
29
86
 
30
87
  type DocId = `${Environment}-${number}`;
31
88
 
32
89
  type Doc = {
33
90
  documentId: DocId;
34
91
  _score: number;
35
- } & ToDoc<Fields>;
92
+ } & ToDoc<CloudsearchEndow>;
36
93
 
37
94
  export type HitFields = ToHitFields<Omit<Doc, "documentId" | "_score">>;
38
95
 
39
- export type Update = ToUpdate<DocId, Fields>;
96
+ export type Update = ToUpdate<DocId, CloudsearchEndow>;
package/src/db.mts CHANGED
@@ -41,10 +41,7 @@ export namespace Endow {
41
41
  };
42
42
 
43
43
  export type NonKeyAttributes = EndowmentShape & {
44
- env: Environment;
45
- kyc_donors_only: boolean;
46
44
  fiscal_sponsored: boolean;
47
- claimed: boolean;
48
45
 
49
46
  /** in USD @deprecated */
50
47
  payout_minimum?: number;
package/src/index.mts CHANGED
@@ -1,13 +1,10 @@
1
- import type { Fields as FundItem } from "./cloudsearch.mjs";
2
1
  import type { Endow as NEndow, Media, Program as NProgram } from "./db.mjs";
3
2
  import type { Milestone } from "./schema.mjs";
4
3
  export type {
5
4
  Allocation,
6
5
  DonateMethodId,
7
- EndowByEinParams,
8
6
  EndowDesignation,
9
7
  EndowQueryParam,
10
- EndowsQueryParams,
11
8
  EndowUpdate,
12
9
  Environment,
13
10
  Increment,
@@ -23,7 +20,10 @@ export type {
23
20
  MediaType,
24
21
  MediaUpdate,
25
22
  } from "./schema.mjs";
26
- export type { FundItem };
23
+ export type {
24
+ CloudsearchEndow as EndowItem,
25
+ CloudsearchEndowsQueryParams as EndowsQueryParams,
26
+ } from "./cloudsearch.mjs";
27
27
 
28
28
  export type Endow = Pick<
29
29
  NEndow.DbRecord,
package/src/schema.mts CHANGED
@@ -15,7 +15,9 @@ import {
15
15
  check,
16
16
  custom,
17
17
  excludes,
18
+ filterItems,
18
19
  integer,
20
+ isoTimestamp,
19
21
  keyof,
20
22
  lazy,
21
23
  maxLength,
@@ -37,10 +39,18 @@ import {
37
39
  transform,
38
40
  trim,
39
41
  uuid,
40
- isoTimestamp,
41
42
  } from "valibot";
42
43
 
43
44
  export const str = pipe(string(), trim());
45
+ export const csv = lazy((x) => {
46
+ if (!x) return str;
47
+ return pipe(str, regex(/^[^,]+(?:,[^,]+)*$/, "invalid csv"));
48
+ });
49
+ export const csvStrs = pipe(
50
+ csv,
51
+ transform((x) => x.split(",")),
52
+ filterItems((x) => x.length > 0)
53
+ );
44
54
 
45
55
  const pct = pipe(number(), integer(), minValue(0), maxValue(100));
46
56
  export const allocation = pipe(
@@ -63,23 +73,22 @@ export const endowIdParam = pipe(
63
73
  );
64
74
 
65
75
  export const segmentMaxChars = 30;
66
- export const segment = lazy((x) => {
67
- if (!x) return str;
68
- return pipe(
69
- str,
70
- maxLength(
71
- segmentMaxChars,
72
- ({ requirement: r }) => `cannot exceed ${r} chars`
73
- ),
74
- //must not be id-like
75
- regex(/^(?!^\d+$)/, "should not be an id"),
76
- //valid characters
77
- regex(/^[a-zA-Z0-9-._~]+$/, "allowed: numbers | letters | - | . | _ | ~"),
78
- excludes("..", "should not contain double periods"),
79
- custom((x) => !(x as string).startsWith("."), "should not start with dot"),
80
- custom((x) => !(x as string).endsWith("."), "should not end with dot")
81
- );
82
- });
76
+ export const segment = pipe(
77
+ str,
78
+ maxLength(
79
+ segmentMaxChars,
80
+ ({ requirement: r }) => `cannot exceed ${r} chars`
81
+ ),
82
+ //must not be id-like
83
+ regex(/^(?!^\d+$)/, "should not be an id"),
84
+ //valid characters
85
+ regex(/^[a-zA-Z0-9-._~]+$/, "allowed: numbers | letters | - | . | _ | ~"),
86
+ excludes("..", "should not contain double periods"),
87
+ custom((x) => !(x as string).startsWith("."), "should not start with dot"),
88
+ custom((x) => !(x as string).endsWith("."), "should not end with dot")
89
+ );
90
+
91
+ export const slug = lazy((x) => (x ? segment : str));
83
92
 
84
93
  export const reg_number = pipe(
85
94
  str,
@@ -150,7 +159,8 @@ export type Increment = InferOutput<typeof increment>;
150
159
 
151
160
  export const endowment = object({
152
161
  id: endowId,
153
- slug: optional(segment),
162
+ env,
163
+ slug: optional(slug),
154
164
  registration_number: reg_number,
155
165
  name: pipe(str, nonEmpty("required")),
156
166
  endow_designation: orgDesignation,
@@ -177,83 +187,27 @@ export const endowment = object({
177
187
  donateMethods: optional(array(donateMethodId)),
178
188
  increments: optional(pipe(array(increment), maxLength(MAX_NUM_INCREMENTS))),
179
189
  fund_opt_in: optional(boolean()),
190
+
191
+ /** endowment is not claimed if `false` only */
192
+ claimed: boolean(),
193
+ kyc_donors_only: boolean(),
180
194
  });
181
195
 
182
- export const endowUpdate = partial(omit(endowment, ["id"]));
183
- export const endowFields = keyof(endowment);
196
+ export const endowUpdate = partial(
197
+ omit(endowment, ["id", "claimed", "kyc_donors_only", "env"])
198
+ );
184
199
 
200
+ export const endowFields = keyof(endowment);
185
201
  export type Endowment = InferOutput<typeof endowment>;
186
202
  export type EndowUpdate = InferOutput<typeof endowUpdate>;
187
203
  export type EndowmentFields = InferOutput<typeof endowFields>;
188
204
 
189
- const csv = lazy((x) => {
190
- if (!x) return str;
191
- return pipe(str, regex(/^[^,]+(?:,[^,]+)*$/, "invalid csv"));
192
- });
193
-
194
- const boolCsv = pipe(
195
- csv,
196
- transform((x) => x.split(",").map(Boolean)),
197
- array(boolean())
198
- );
199
-
200
- export const endowsQueryParams = object({
201
- query: str,
202
- page: pipe(
203
- string(),
204
- transform((x) => +x),
205
- integer(),
206
- minValue(1)
207
- ),
208
- endow_designation: optional(
209
- pipe(
210
- csv,
211
- transform((x) => x.split(",")),
212
- array(orgDesignation)
213
- )
214
- ),
215
- sdgs: optional(
216
- pipe(
217
- csv,
218
- transform((x) => x.split(",").map((s) => +s)),
219
- array(unSdgNum)
220
- )
221
- ),
222
- kyc_only: optional(boolCsv),
223
- fund_opt_in: optional(boolCsv),
224
- claimed: optional(boolCsv),
225
- countries: optional(csv),
226
- fields: optional(
227
- pipe(
228
- csv,
229
- transform((x) => x.split(",")),
230
- array(endowFields)
231
- )
232
- ),
233
- });
234
-
235
- export type EndowsQueryParams = InferInput<typeof endowsQueryParams>;
236
-
237
- export const endowQueryParam = object({
238
- fields: optional(
239
- pipe(
240
- csv,
241
- transform((x) => x.split(",")),
242
- array(endowFields)
243
- )
244
- ),
245
- slug: optional(segment),
246
- env,
247
- });
248
-
249
- export type EndowQueryParam = InferInput<typeof endowQueryParam>;
250
-
251
- export const endowByEinParams = object({
252
- env,
253
- ein: reg_number,
205
+ /** for ein path, only fields in reg-num/env gsi is available */
206
+ export const endowQueryParams = object({
207
+ fields: optional(pipe(csvStrs, array(endowFields))),
254
208
  });
255
209
 
256
- export type EndowByEinParams = InferInput<typeof endowByEinParams>;
210
+ export type EndowQueryParam = InferInput<typeof endowQueryParams>;
257
211
 
258
212
  const amnt = pipe(number(), minValue(0));
259
213
  export const programId = pipe(str, uuid());