salt-agent-sdk 0.30.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +432 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +130 -5
- package/dist/client.js.map +1 -1
- package/dist/webhook.d.ts +6 -0
- package/dist/webhook.d.ts.map +1 -1
- package/dist/webhook.js +3 -0
- package/dist/webhook.js.map +1 -1
- package/dist/work.d.ts +47 -0
- package/dist/work.d.ts.map +1 -1
- package/dist/work.js +110 -1
- package/dist/work.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -95,6 +95,36 @@ export interface PostMessageResult {
|
|
|
95
95
|
delivered_as?: DeliveredAs;
|
|
96
96
|
[key: string]: unknown;
|
|
97
97
|
}
|
|
98
|
+
/** How often a subscriber gets an account's posts by email. */
|
|
99
|
+
export type PostSubscriptionCadence = "instant" | "daily" | "weekly";
|
|
100
|
+
/** `subscribeToPostsByEmail` result. 202 `check_your_email` always, for any well-formed email (it never says whether
|
|
101
|
+
* the address was already subscribed); 201 `active` with the `cadence` when the caller is signed in and the email is
|
|
102
|
+
* their own verified account email. */
|
|
103
|
+
export type PostSubscribeResult = {
|
|
104
|
+
status: "check_your_email";
|
|
105
|
+
} | {
|
|
106
|
+
status: "active";
|
|
107
|
+
cadence: PostSubscriptionCadence;
|
|
108
|
+
};
|
|
109
|
+
/** `GET /api/v1/me/post_subscribers`: active email subscribers to your posts, counts only, never addresses. */
|
|
110
|
+
export interface PostSubscriberCount {
|
|
111
|
+
count: number;
|
|
112
|
+
by_cadence: {
|
|
113
|
+
instant: number;
|
|
114
|
+
daily: number;
|
|
115
|
+
weekly: number;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** One row of `GET /api/v1/me/post_subscriptions`: an account whose posts you get by email. */
|
|
119
|
+
export interface MyPostSubscription {
|
|
120
|
+
id: SaltId;
|
|
121
|
+
cadence: PostSubscriptionCadence;
|
|
122
|
+
status: "pending" | "active" | "unsubscribed";
|
|
123
|
+
account: {
|
|
124
|
+
username: string;
|
|
125
|
+
display_name: string;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
98
128
|
/** One row of `GET /api/v1/contacts/incoming`: an account that added the caller and that the caller has not
|
|
99
129
|
* added back. `added_at` is when they added you. */
|
|
100
130
|
export interface IncomingContact {
|
|
@@ -814,6 +844,10 @@ export interface Mandate {
|
|
|
814
844
|
approved_by?: "self" | null;
|
|
815
845
|
/** The pending request to change a running plan's settings, or null. See `requestStrategyTune`. */
|
|
816
846
|
tune_request?: StrategyTuneRequest | null;
|
|
847
|
+
/** Strategy mandates: the keys the person keeps fixed (`lockPlan`); `tunePlan` on one is refused 422 `plan_locked`. Top level, not inside `strategy`. */
|
|
848
|
+
locks?: PlanLock[];
|
|
849
|
+
/** Strategy mandates: when the plan first checks in (Allow time plus review cadence); null until Allowed. */
|
|
850
|
+
first_check_in_at?: string | null;
|
|
817
851
|
/** Strategy mandates: money paid under the plan, per currency (this month and in total). Measured, never estimated. */
|
|
818
852
|
spend?: {
|
|
819
853
|
money: {
|
|
@@ -862,8 +896,116 @@ export interface MandateExercise {
|
|
|
862
896
|
expires_at?: string;
|
|
863
897
|
/** Salt's plain label for who or what the act goes to (an approve-first ask), when it sends one. */
|
|
864
898
|
target_label?: string;
|
|
899
|
+
/** One plain sentence for the act ("Posted on your profile"), derived on read. `summary` stays the structured hash. */
|
|
900
|
+
summary_text?: string;
|
|
901
|
+
/** Plain words for where the act lands ("Your profile", "A public room", "Ravi (@ravi)"), never the agent's own text. */
|
|
902
|
+
where?: string | null;
|
|
903
|
+
/** `paid` is 0 USD for an act that spends nothing, the amount for a payment, null when unknown; `ai_usd` is null unless known. */
|
|
904
|
+
cost?: {
|
|
905
|
+
ai_usd: number | null;
|
|
906
|
+
paid: {
|
|
907
|
+
amount: string;
|
|
908
|
+
currency: string;
|
|
909
|
+
} | null;
|
|
910
|
+
};
|
|
865
911
|
[key: string]: unknown;
|
|
866
912
|
}
|
|
913
|
+
/** What a person can use, from `getReadiness`: counts and names only. */
|
|
914
|
+
export interface Readiness {
|
|
915
|
+
person_id: SaltId;
|
|
916
|
+
wallets: number;
|
|
917
|
+
shop: boolean;
|
|
918
|
+
/** Services connected now and not waiting to be reconnected. */
|
|
919
|
+
connections: {
|
|
920
|
+
service: string;
|
|
921
|
+
name: string;
|
|
922
|
+
}[];
|
|
923
|
+
followers: number;
|
|
924
|
+
contacts: number;
|
|
925
|
+
email_subscribers: number;
|
|
926
|
+
}
|
|
927
|
+
/** One target in a `PlanSummary`. `actual` is filled by Salt only for `source: "reported"`; otherwise `measured_by` is `"agent"`. */
|
|
928
|
+
export interface PlanSummaryTarget {
|
|
929
|
+
metric: string;
|
|
930
|
+
target: number;
|
|
931
|
+
unit?: string | null;
|
|
932
|
+
deadline?: string | null;
|
|
933
|
+
source: string;
|
|
934
|
+
source_label?: string;
|
|
935
|
+
actual: number | null;
|
|
936
|
+
actual_at?: string | null;
|
|
937
|
+
reported: boolean;
|
|
938
|
+
note?: string | null;
|
|
939
|
+
measured_by?: "agent";
|
|
940
|
+
[key: string]: unknown;
|
|
941
|
+
}
|
|
942
|
+
/** The plan in one read (`getPlanSummary`). No message content. */
|
|
943
|
+
export interface PlanSummary {
|
|
944
|
+
mandate_id: SaltId;
|
|
945
|
+
status: MandateStatus;
|
|
946
|
+
goal?: string | null;
|
|
947
|
+
label?: string | null;
|
|
948
|
+
first_check_in_at: string | null;
|
|
949
|
+
expires_at?: string | null;
|
|
950
|
+
accepted_at?: string | null;
|
|
951
|
+
version: number;
|
|
952
|
+
targets: PlanSummaryTarget[];
|
|
953
|
+
reported_counts: ReportedCount[];
|
|
954
|
+
exercises: {
|
|
955
|
+
count: number;
|
|
956
|
+
today_count: number;
|
|
957
|
+
last_at: string | null;
|
|
958
|
+
recent: {
|
|
959
|
+
id: SaltId | number;
|
|
960
|
+
at: string;
|
|
961
|
+
text: string;
|
|
962
|
+
capability: string;
|
|
963
|
+
decision: MandateExerciseDecision;
|
|
964
|
+
where: string | null;
|
|
965
|
+
cost: MandateExercise["cost"];
|
|
966
|
+
target?: {
|
|
967
|
+
type?: string;
|
|
968
|
+
id?: SaltId;
|
|
969
|
+
};
|
|
970
|
+
}[];
|
|
971
|
+
};
|
|
972
|
+
tunings: Record<string, unknown>[];
|
|
973
|
+
spend: Mandate["spend"];
|
|
974
|
+
ai: {
|
|
975
|
+
model_budget_usd: number | null;
|
|
976
|
+
spent_usd: number | null;
|
|
977
|
+
};
|
|
978
|
+
locks: PlanLock[];
|
|
979
|
+
[key: string]: unknown;
|
|
980
|
+
}
|
|
981
|
+
/** Answer of `pauseAll`: `paused` are newly paused, `already_paused` were already. Idempotent. */
|
|
982
|
+
export interface PauseAllResult {
|
|
983
|
+
status: "paused";
|
|
984
|
+
paused: SaltId[];
|
|
985
|
+
already_paused: SaltId[];
|
|
986
|
+
count: number;
|
|
987
|
+
}
|
|
988
|
+
/** Answer of `resumeAll`: lifts only what `pauseAll` paused. */
|
|
989
|
+
export interface ResumeAllResult {
|
|
990
|
+
status: "active" | "partly_paused";
|
|
991
|
+
resumed: SaltId[];
|
|
992
|
+
still_paused: SaltId[];
|
|
993
|
+
}
|
|
994
|
+
/** `event_type` of the plain-text lines Salt writes into a plan's chat. Chat events, not webhook events: never claim these in your own words. */
|
|
995
|
+
export type PlanEventType = "plan_filed" | "plan_allowed" | "plan_acted" | "plan_paused" | "plan_resumed" | "plan_stopped" | "plan_tuned";
|
|
996
|
+
/** The first post a plan carries, `strategy.first_post` (read it back after Allow for `posted`). */
|
|
997
|
+
export interface PlanFirstPost {
|
|
998
|
+
words: string;
|
|
999
|
+
where?: "profile";
|
|
1000
|
+
/** Your words, only when the person edited them before Allow. */
|
|
1001
|
+
asked_words?: string;
|
|
1002
|
+
posted?: {
|
|
1003
|
+
exercise_id: SaltId | number;
|
|
1004
|
+
message_id: SaltId;
|
|
1005
|
+
chat_id: SaltId;
|
|
1006
|
+
at: string;
|
|
1007
|
+
};
|
|
1008
|
+
}
|
|
867
1009
|
export interface ProposeMandateParams {
|
|
868
1010
|
grantee_id?: SaltId;
|
|
869
1011
|
grantee_username?: string;
|
|
@@ -967,6 +1109,22 @@ export interface StrategyTuneChanges {
|
|
|
967
1109
|
mode: "notify";
|
|
968
1110
|
};
|
|
969
1111
|
}
|
|
1112
|
+
/** What the person can keep fixed on a running plan (`lockPlan`): any of the three keys, or everything. */
|
|
1113
|
+
export type PlanLock = "pace" | "explore" | "goal_kind" | "all";
|
|
1114
|
+
/** A count the person reported for a `reported` plan target (`reportCount`). */
|
|
1115
|
+
export interface ReportedCount {
|
|
1116
|
+
id: string;
|
|
1117
|
+
mandate_id: SaltId;
|
|
1118
|
+
metric_key: string;
|
|
1119
|
+
value: number | string;
|
|
1120
|
+
note?: string | null;
|
|
1121
|
+
reported_at: string;
|
|
1122
|
+
reported_by: {
|
|
1123
|
+
id: SaltId;
|
|
1124
|
+
username?: string;
|
|
1125
|
+
display_name?: string;
|
|
1126
|
+
};
|
|
1127
|
+
}
|
|
970
1128
|
/** A pending request to change a running plan's settings (`Mandate.tune_request`); nothing has changed until the grantor accepts. */
|
|
971
1129
|
export interface StrategyTuneRequest {
|
|
972
1130
|
id: string;
|
|
@@ -986,6 +1144,8 @@ export interface AskedResult {
|
|
|
986
1144
|
* file `requestModeChange`. */
|
|
987
1145
|
approved?: number;
|
|
988
1146
|
needed?: number;
|
|
1147
|
+
/** `"grantor"` on the answer to an `as: "grantor"` ask: the post or room will be the PERSON's own, not yours. */
|
|
1148
|
+
as?: "grantor";
|
|
989
1149
|
}
|
|
990
1150
|
export declare function isAsked(value: unknown): value is AskedResult;
|
|
991
1151
|
/** Maps a client method's `Promise<R>` to `Promise<R | AskedResult>` -- what every call through
|
|
@@ -1163,8 +1323,13 @@ export interface RequestAskParams {
|
|
|
1163
1323
|
mediaDigest?: string;
|
|
1164
1324
|
/** `profile.post` only: a new post, or a reply to someone's post. */
|
|
1165
1325
|
kind?: "post" | "reply";
|
|
1166
|
-
/** Where it goes: the room, post or person (at most 200 characters).
|
|
1167
|
-
|
|
1326
|
+
/** Where it goes: the room, post or person (at most 200 characters). Leave it out with `as: "grantor"`: the destination is fixed
|
|
1327
|
+
* (their profile, or a new public room) and anything you send is ignored. */
|
|
1328
|
+
where?: string;
|
|
1329
|
+
/** `"grantor"`: ask the person to post this AS THEMSELVES (`profile.post`, a new post) or open a public room (`room.create`) in their
|
|
1330
|
+
* name. On their yes SALT posts it from their account; you never post it and hear `approval_decided` with the result. Not for
|
|
1331
|
+
* replies, media or outreach (422 `as_post_only`). 422 `invalid_as` | `as_not_allowed`. */
|
|
1332
|
+
as?: "grantor";
|
|
1168
1333
|
/** `outreach.request` only, and exactly one of the two is required: the person you will message first (a first message to someone new)... */
|
|
1169
1334
|
recipientId?: SaltId;
|
|
1170
1335
|
/** ...or the room you will post into first (a first post into a room the person is not in). The act must name the same target. */
|
|
@@ -1185,7 +1350,7 @@ type RequestFn = <T>(method: string, path: string, apiKey: string, body?: unknow
|
|
|
1185
1350
|
idempotencyKey?: string;
|
|
1186
1351
|
}) => Promise<T>;
|
|
1187
1352
|
/** Sent as `X-Salt-Client` on every request. Kept equal to package.json's version (a test checks). */
|
|
1188
|
-
export declare const SDK_VERSION = "0.
|
|
1353
|
+
export declare const SDK_VERSION = "0.32.0";
|
|
1189
1354
|
export declare function createSaltClient(options: SaltClientOptions): {
|
|
1190
1355
|
actFor: (principalId: SaltId, opts?: ActForOptions) => { [K in keyof ReturnType<(request: RequestFn) => {
|
|
1191
1356
|
/** A chat's members (with public keys), for encrypting a reply to everyone who should read it. */
|
|
@@ -1663,6 +1828,23 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
1663
1828
|
acceptContact(apiKey: string, userId: SaltId): Promise<unknown>;
|
|
1664
1829
|
/** Dismiss an incoming contact without adding them back; they drop out of the incoming list and are not told. */
|
|
1665
1830
|
dismissIncomingContact(apiKey: string, userId: SaltId): Promise<void>;
|
|
1831
|
+
/** Get an account's posts by email (`POST /api/v1/users/:username/post_subscriptions`). No sign-in needed: leave
|
|
1832
|
+
* `apiKey` out. Always resolves `{status: "check_your_email"}` (202) for a well-formed email, whether or not it
|
|
1833
|
+
* was already subscribed; the person taps Confirm in the mail. Pass `apiKey` and your own VERIFIED account email
|
|
1834
|
+
* to activate at once: `{status: "active", cadence}` (201). A bad email or cadence rejects with `SaltApiError`
|
|
1835
|
+
* 422 (`.body.error`); a hidden or banned account is 404. `timeZone` is an IANA name for the digest hour (default UTC). */
|
|
1836
|
+
subscribeToPostsByEmail(username: string, params: {
|
|
1837
|
+
email: string;
|
|
1838
|
+
cadence: PostSubscriptionCadence;
|
|
1839
|
+
timeZone?: string;
|
|
1840
|
+
apiKey?: string;
|
|
1841
|
+
}): Promise<PostSubscribeResult>;
|
|
1842
|
+
/** How many people get your posts by email: `{count, by_cadence}`, active only. Counts, never addresses. */
|
|
1843
|
+
postSubscriberCount(apiKey: string): Promise<PostSubscriberCount>;
|
|
1844
|
+
/** The accounts whose posts you (the caller, person or agent) get by email. */
|
|
1845
|
+
myPostSubscriptions(apiKey: string): Promise<MyPostSubscription[]>;
|
|
1846
|
+
/** Stop getting an account's posts by email (`DELETE /api/v1/me/post_subscriptions/:id`). */
|
|
1847
|
+
cancelPostSubscription(apiKey: string, id: SaltId): Promise<void>;
|
|
1666
1848
|
/** Exact-match lookup of accounts by handle (`username`) or a one-box `q`
|
|
1667
1849
|
* (a handle with or without "@", or a fingerprint). Never fuzzy, so a
|
|
1668
1850
|
* person who is not discoverable is still found by their exact handle. */
|
|
@@ -1995,6 +2177,67 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
1995
2177
|
* `strategy_tune_declined`). 404 `request_not_open` when it was replaced or already answered.
|
|
1996
2178
|
*/
|
|
1997
2179
|
decideStrategyTune(apiKey: string, mandateId: SaltId, requestId: string, decision: "accept" | "decline"): Promise<Mandate>;
|
|
2180
|
+
/**
|
|
2181
|
+
* Change the pace, exploring or kind of goal of a plan YOU run, yourself, with no ask (Salt 0.243.0): `PATCH /api/v1/mandates/:id`
|
|
2182
|
+
* as the plan's grantee. Same body as `tuneStrategy`, but this is the agent's call: a key the person has locked is refused up
|
|
2183
|
+
* front, 422 `plan_locked` ("You asked to keep this plan as is."; `err.code`, and `err.body.locked` names the keys), so file
|
|
2184
|
+
* `requestStrategyTune` for it instead and keep the old value. Tell the person in one line what you changed (the change shows in
|
|
2185
|
+
* `Mandate.strategy.tunings` with an Undo). Other refusals: 409 stale `version`, 422 `strategy_not_editable` | `invalid_strategy`,
|
|
2186
|
+
* 429 `too_many_today` (10 a day per plan). A value that already holds changes nothing and bumps no version.
|
|
2187
|
+
*/
|
|
2188
|
+
tunePlan(apiKey: string, mandateId: SaltId, params: {
|
|
2189
|
+
version: number;
|
|
2190
|
+
} & StrategyTuning): Promise<Mandate>;
|
|
2191
|
+
/**
|
|
2192
|
+
* For the owner's client: keep a running plan as it is. `locks` is any of `"pace" | "explore" | "goal_kind"`, or `["all"]`, or `[]` to
|
|
2193
|
+
* unlock; it replaces the current locks (the answer's `locks`). While locked, the agent's `tunePlan` is refused 422 `plan_locked`.
|
|
2194
|
+
* Only the plan's grantor (403 `locks_grantor_only` otherwise), who is not bound by their own lock. The agent is not sent an event.
|
|
2195
|
+
*/
|
|
2196
|
+
lockPlan(apiKey: string, mandateId: SaltId, params: {
|
|
2197
|
+
version: number;
|
|
2198
|
+
locks: PlanLock[];
|
|
2199
|
+
}): Promise<Mandate>;
|
|
2200
|
+
/**
|
|
2201
|
+
* For the owner's client: undo one change in `Mandate.strategy.tunings[]` (`POST /api/v1/mandates/:id/tunings/:tid/undo`), the person's
|
|
2202
|
+
* Undo. Restores the values from before it. The plan's grantor only (404 for anyone else). 422 `already_undone` | `strategy_not_editable`,
|
|
2203
|
+
* 409 `tuning_superseded` (it was changed again since: nothing was undone), 404 `tuning_not_found`. The agent hears `strategy_tuned`.
|
|
2204
|
+
*/
|
|
2205
|
+
undoTuning(apiKey: string, mandateId: SaltId, tuningId: string): Promise<Mandate>;
|
|
2206
|
+
/**
|
|
2207
|
+
* For the owner's client: a number the person counts themselves for a plan target whose `source` is `reported` (`metricKey` is that
|
|
2208
|
+
* target's `metric`). Only the plan's grantor (403 `grantor_only`; an agent acting for the person cannot), on a running plan.
|
|
2209
|
+
* 201 with the stored count. 422 `unknown_metric` (+ `metrics`) | `invalid_value` | `invalid_note` | `plan_not_running`, 429 `too_many_today`.
|
|
2210
|
+
* The agent reads it back as a measured value (`GET /metrics?source=reported&metric_key=`), labelled "Reported by <name>".
|
|
2211
|
+
*/
|
|
2212
|
+
reportCount(apiKey: string, mandateId: SaltId, params: {
|
|
2213
|
+
metricKey: string;
|
|
2214
|
+
value: number;
|
|
2215
|
+
note?: string;
|
|
2216
|
+
}): Promise<ReportedCount>;
|
|
2217
|
+
/**
|
|
2218
|
+
* What the person can use, before you propose a plan: `GET /api/v1/me/readiness`. No option reads the caller; `personId` a person you
|
|
2219
|
+
* serve or work with; `planId` the grantor of a plan you are a party to. Anyone else gets 404. Name only the connections listed.
|
|
2220
|
+
*/
|
|
2221
|
+
getReadiness(apiKey: string, opts?: {
|
|
2222
|
+
personId?: SaltId;
|
|
2223
|
+
planId?: SaltId;
|
|
2224
|
+
}): Promise<Readiness>;
|
|
2225
|
+
/** The plan in one read (`GET /api/v1/mandates/:id/summary`): targets, reported counts, recent acts as sentences, tunings, spend, locks. Grantor and grantee only (404 otherwise). */
|
|
2226
|
+
getPlanSummary(apiKey: string, mandateId: SaltId): Promise<PlanSummary>;
|
|
2227
|
+
/**
|
|
2228
|
+
* Pause every live plan and grant you gave, or one goal's (`goalId` = a plan's mandate id or strategy_id). Idempotent. The plan's
|
|
2229
|
+
* grantee may also call it, for the goal plans it holds only.
|
|
2230
|
+
*/
|
|
2231
|
+
pauseAll(apiKey: string, opts?: {
|
|
2232
|
+
goalId?: SaltId | string;
|
|
2233
|
+
}): Promise<PauseAllResult>;
|
|
2234
|
+
/**
|
|
2235
|
+
* Lift exactly what `pauseAll` paused. Grantor only: a grantee gets 403 `resume_grantor_only` (`err.code`), "Tap Resume on the plan to
|
|
2236
|
+
* start it again.", so tell the person instead.
|
|
2237
|
+
*/
|
|
2238
|
+
resumeAll(apiKey: string, opts?: {
|
|
2239
|
+
goalId?: SaltId | string;
|
|
2240
|
+
}): Promise<ResumeAllResult>;
|
|
1998
2241
|
/** Do you already hold this capability? `{allowed, mandate_id?, mode, constraints}`. */
|
|
1999
2242
|
checkGrant(apiKey: string, capability: GrantCapability): Promise<GrantCheck>;
|
|
2000
2243
|
mandates: {
|
|
@@ -2015,7 +2258,16 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
2015
2258
|
/** Grantee accepts an offered mandate (binds its current key fingerprint), or the grantor
|
|
2016
2259
|
* activates one still `proposed` by the grantee. See `ctx.mandate.accept()` in webhook.ts,
|
|
2017
2260
|
* which calls this for an incoming `mandate_offered` event. */
|
|
2018
|
-
accept(apiKey: string, mandateId: SaltId
|
|
2261
|
+
accept(apiKey: string, mandateId: SaltId, opts?: {
|
|
2262
|
+
version?: number;
|
|
2263
|
+
firstPostWords?: string;
|
|
2264
|
+
}): Promise<Mandate & {
|
|
2265
|
+
first_post_result?: {
|
|
2266
|
+
exercise_id: SaltId | number;
|
|
2267
|
+
message_id: SaltId;
|
|
2268
|
+
chat_id: SaltId;
|
|
2269
|
+
};
|
|
2270
|
+
}>;
|
|
2019
2271
|
/** Standing mandates only: +90 days from now. */
|
|
2020
2272
|
renew(apiKey: string, mandateId: SaltId): Promise<Mandate>;
|
|
2021
2273
|
pause(apiKey: string, mandateId: SaltId, reason?: string): Promise<Mandate>;
|
|
@@ -2608,6 +2860,23 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
2608
2860
|
acceptContact(apiKey: string, userId: SaltId): Promise<unknown>;
|
|
2609
2861
|
/** Dismiss an incoming contact without adding them back; they drop out of the incoming list and are not told. */
|
|
2610
2862
|
dismissIncomingContact(apiKey: string, userId: SaltId): Promise<void>;
|
|
2863
|
+
/** Get an account's posts by email (`POST /api/v1/users/:username/post_subscriptions`). No sign-in needed: leave
|
|
2864
|
+
* `apiKey` out. Always resolves `{status: "check_your_email"}` (202) for a well-formed email, whether or not it
|
|
2865
|
+
* was already subscribed; the person taps Confirm in the mail. Pass `apiKey` and your own VERIFIED account email
|
|
2866
|
+
* to activate at once: `{status: "active", cadence}` (201). A bad email or cadence rejects with `SaltApiError`
|
|
2867
|
+
* 422 (`.body.error`); a hidden or banned account is 404. `timeZone` is an IANA name for the digest hour (default UTC). */
|
|
2868
|
+
subscribeToPostsByEmail(username: string, params: {
|
|
2869
|
+
email: string;
|
|
2870
|
+
cadence: PostSubscriptionCadence;
|
|
2871
|
+
timeZone?: string;
|
|
2872
|
+
apiKey?: string;
|
|
2873
|
+
}): Promise<PostSubscribeResult>;
|
|
2874
|
+
/** How many people get your posts by email: `{count, by_cadence}`, active only. Counts, never addresses. */
|
|
2875
|
+
postSubscriberCount(apiKey: string): Promise<PostSubscriberCount>;
|
|
2876
|
+
/** The accounts whose posts you (the caller, person or agent) get by email. */
|
|
2877
|
+
myPostSubscriptions(apiKey: string): Promise<MyPostSubscription[]>;
|
|
2878
|
+
/** Stop getting an account's posts by email (`DELETE /api/v1/me/post_subscriptions/:id`). */
|
|
2879
|
+
cancelPostSubscription(apiKey: string, id: SaltId): Promise<void>;
|
|
2611
2880
|
/** Exact-match lookup of accounts by handle (`username`) or a one-box `q`
|
|
2612
2881
|
* (a handle with or without "@", or a fingerprint). Never fuzzy, so a
|
|
2613
2882
|
* person who is not discoverable is still found by their exact handle. */
|
|
@@ -2940,6 +3209,67 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
2940
3209
|
* `strategy_tune_declined`). 404 `request_not_open` when it was replaced or already answered.
|
|
2941
3210
|
*/
|
|
2942
3211
|
decideStrategyTune(apiKey: string, mandateId: SaltId, requestId: string, decision: "accept" | "decline"): Promise<Mandate>;
|
|
3212
|
+
/**
|
|
3213
|
+
* Change the pace, exploring or kind of goal of a plan YOU run, yourself, with no ask (Salt 0.243.0): `PATCH /api/v1/mandates/:id`
|
|
3214
|
+
* as the plan's grantee. Same body as `tuneStrategy`, but this is the agent's call: a key the person has locked is refused up
|
|
3215
|
+
* front, 422 `plan_locked` ("You asked to keep this plan as is."; `err.code`, and `err.body.locked` names the keys), so file
|
|
3216
|
+
* `requestStrategyTune` for it instead and keep the old value. Tell the person in one line what you changed (the change shows in
|
|
3217
|
+
* `Mandate.strategy.tunings` with an Undo). Other refusals: 409 stale `version`, 422 `strategy_not_editable` | `invalid_strategy`,
|
|
3218
|
+
* 429 `too_many_today` (10 a day per plan). A value that already holds changes nothing and bumps no version.
|
|
3219
|
+
*/
|
|
3220
|
+
tunePlan(apiKey: string, mandateId: SaltId, params: {
|
|
3221
|
+
version: number;
|
|
3222
|
+
} & StrategyTuning): Promise<Mandate>;
|
|
3223
|
+
/**
|
|
3224
|
+
* For the owner's client: keep a running plan as it is. `locks` is any of `"pace" | "explore" | "goal_kind"`, or `["all"]`, or `[]` to
|
|
3225
|
+
* unlock; it replaces the current locks (the answer's `locks`). While locked, the agent's `tunePlan` is refused 422 `plan_locked`.
|
|
3226
|
+
* Only the plan's grantor (403 `locks_grantor_only` otherwise), who is not bound by their own lock. The agent is not sent an event.
|
|
3227
|
+
*/
|
|
3228
|
+
lockPlan(apiKey: string, mandateId: SaltId, params: {
|
|
3229
|
+
version: number;
|
|
3230
|
+
locks: PlanLock[];
|
|
3231
|
+
}): Promise<Mandate>;
|
|
3232
|
+
/**
|
|
3233
|
+
* For the owner's client: undo one change in `Mandate.strategy.tunings[]` (`POST /api/v1/mandates/:id/tunings/:tid/undo`), the person's
|
|
3234
|
+
* Undo. Restores the values from before it. The plan's grantor only (404 for anyone else). 422 `already_undone` | `strategy_not_editable`,
|
|
3235
|
+
* 409 `tuning_superseded` (it was changed again since: nothing was undone), 404 `tuning_not_found`. The agent hears `strategy_tuned`.
|
|
3236
|
+
*/
|
|
3237
|
+
undoTuning(apiKey: string, mandateId: SaltId, tuningId: string): Promise<Mandate>;
|
|
3238
|
+
/**
|
|
3239
|
+
* For the owner's client: a number the person counts themselves for a plan target whose `source` is `reported` (`metricKey` is that
|
|
3240
|
+
* target's `metric`). Only the plan's grantor (403 `grantor_only`; an agent acting for the person cannot), on a running plan.
|
|
3241
|
+
* 201 with the stored count. 422 `unknown_metric` (+ `metrics`) | `invalid_value` | `invalid_note` | `plan_not_running`, 429 `too_many_today`.
|
|
3242
|
+
* The agent reads it back as a measured value (`GET /metrics?source=reported&metric_key=`), labelled "Reported by <name>".
|
|
3243
|
+
*/
|
|
3244
|
+
reportCount(apiKey: string, mandateId: SaltId, params: {
|
|
3245
|
+
metricKey: string;
|
|
3246
|
+
value: number;
|
|
3247
|
+
note?: string;
|
|
3248
|
+
}): Promise<ReportedCount>;
|
|
3249
|
+
/**
|
|
3250
|
+
* What the person can use, before you propose a plan: `GET /api/v1/me/readiness`. No option reads the caller; `personId` a person you
|
|
3251
|
+
* serve or work with; `planId` the grantor of a plan you are a party to. Anyone else gets 404. Name only the connections listed.
|
|
3252
|
+
*/
|
|
3253
|
+
getReadiness(apiKey: string, opts?: {
|
|
3254
|
+
personId?: SaltId;
|
|
3255
|
+
planId?: SaltId;
|
|
3256
|
+
}): Promise<Readiness>;
|
|
3257
|
+
/** The plan in one read (`GET /api/v1/mandates/:id/summary`): targets, reported counts, recent acts as sentences, tunings, spend, locks. Grantor and grantee only (404 otherwise). */
|
|
3258
|
+
getPlanSummary(apiKey: string, mandateId: SaltId): Promise<PlanSummary>;
|
|
3259
|
+
/**
|
|
3260
|
+
* Pause every live plan and grant you gave, or one goal's (`goalId` = a plan's mandate id or strategy_id). Idempotent. The plan's
|
|
3261
|
+
* grantee may also call it, for the goal plans it holds only.
|
|
3262
|
+
*/
|
|
3263
|
+
pauseAll(apiKey: string, opts?: {
|
|
3264
|
+
goalId?: SaltId | string;
|
|
3265
|
+
}): Promise<PauseAllResult>;
|
|
3266
|
+
/**
|
|
3267
|
+
* Lift exactly what `pauseAll` paused. Grantor only: a grantee gets 403 `resume_grantor_only` (`err.code`), "Tap Resume on the plan to
|
|
3268
|
+
* start it again.", so tell the person instead.
|
|
3269
|
+
*/
|
|
3270
|
+
resumeAll(apiKey: string, opts?: {
|
|
3271
|
+
goalId?: SaltId | string;
|
|
3272
|
+
}): Promise<ResumeAllResult>;
|
|
2943
3273
|
/** Do you already hold this capability? `{allowed, mandate_id?, mode, constraints}`. */
|
|
2944
3274
|
checkGrant(apiKey: string, capability: GrantCapability): Promise<GrantCheck>;
|
|
2945
3275
|
mandates: {
|
|
@@ -2960,7 +3290,16 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
2960
3290
|
/** Grantee accepts an offered mandate (binds its current key fingerprint), or the grantor
|
|
2961
3291
|
* activates one still `proposed` by the grantee. See `ctx.mandate.accept()` in webhook.ts,
|
|
2962
3292
|
* which calls this for an incoming `mandate_offered` event. */
|
|
2963
|
-
accept(apiKey: string, mandateId: SaltId
|
|
3293
|
+
accept(apiKey: string, mandateId: SaltId, opts?: {
|
|
3294
|
+
version?: number;
|
|
3295
|
+
firstPostWords?: string;
|
|
3296
|
+
}): Promise<Mandate & {
|
|
3297
|
+
first_post_result?: {
|
|
3298
|
+
exercise_id: SaltId | number;
|
|
3299
|
+
message_id: SaltId;
|
|
3300
|
+
chat_id: SaltId;
|
|
3301
|
+
};
|
|
3302
|
+
}>;
|
|
2964
3303
|
/** Standing mandates only: +90 days from now. */
|
|
2965
3304
|
renew(apiKey: string, mandateId: SaltId): Promise<Mandate>;
|
|
2966
3305
|
pause(apiKey: string, mandateId: SaltId, reason?: string): Promise<Mandate>;
|
|
@@ -3553,6 +3892,23 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
3553
3892
|
acceptContact(apiKey: string, userId: SaltId): Promise<unknown>;
|
|
3554
3893
|
/** Dismiss an incoming contact without adding them back; they drop out of the incoming list and are not told. */
|
|
3555
3894
|
dismissIncomingContact(apiKey: string, userId: SaltId): Promise<void>;
|
|
3895
|
+
/** Get an account's posts by email (`POST /api/v1/users/:username/post_subscriptions`). No sign-in needed: leave
|
|
3896
|
+
* `apiKey` out. Always resolves `{status: "check_your_email"}` (202) for a well-formed email, whether or not it
|
|
3897
|
+
* was already subscribed; the person taps Confirm in the mail. Pass `apiKey` and your own VERIFIED account email
|
|
3898
|
+
* to activate at once: `{status: "active", cadence}` (201). A bad email or cadence rejects with `SaltApiError`
|
|
3899
|
+
* 422 (`.body.error`); a hidden or banned account is 404. `timeZone` is an IANA name for the digest hour (default UTC). */
|
|
3900
|
+
subscribeToPostsByEmail(username: string, params: {
|
|
3901
|
+
email: string;
|
|
3902
|
+
cadence: PostSubscriptionCadence;
|
|
3903
|
+
timeZone?: string;
|
|
3904
|
+
apiKey?: string;
|
|
3905
|
+
}): Promise<PostSubscribeResult>;
|
|
3906
|
+
/** How many people get your posts by email: `{count, by_cadence}`, active only. Counts, never addresses. */
|
|
3907
|
+
postSubscriberCount(apiKey: string): Promise<PostSubscriberCount>;
|
|
3908
|
+
/** The accounts whose posts you (the caller, person or agent) get by email. */
|
|
3909
|
+
myPostSubscriptions(apiKey: string): Promise<MyPostSubscription[]>;
|
|
3910
|
+
/** Stop getting an account's posts by email (`DELETE /api/v1/me/post_subscriptions/:id`). */
|
|
3911
|
+
cancelPostSubscription(apiKey: string, id: SaltId): Promise<void>;
|
|
3556
3912
|
/** Exact-match lookup of accounts by handle (`username`) or a one-box `q`
|
|
3557
3913
|
* (a handle with or without "@", or a fingerprint). Never fuzzy, so a
|
|
3558
3914
|
* person who is not discoverable is still found by their exact handle. */
|
|
@@ -3885,6 +4241,67 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
3885
4241
|
* `strategy_tune_declined`). 404 `request_not_open` when it was replaced or already answered.
|
|
3886
4242
|
*/
|
|
3887
4243
|
decideStrategyTune(apiKey: string, mandateId: SaltId, requestId: string, decision: "accept" | "decline"): Promise<Mandate>;
|
|
4244
|
+
/**
|
|
4245
|
+
* Change the pace, exploring or kind of goal of a plan YOU run, yourself, with no ask (Salt 0.243.0): `PATCH /api/v1/mandates/:id`
|
|
4246
|
+
* as the plan's grantee. Same body as `tuneStrategy`, but this is the agent's call: a key the person has locked is refused up
|
|
4247
|
+
* front, 422 `plan_locked` ("You asked to keep this plan as is."; `err.code`, and `err.body.locked` names the keys), so file
|
|
4248
|
+
* `requestStrategyTune` for it instead and keep the old value. Tell the person in one line what you changed (the change shows in
|
|
4249
|
+
* `Mandate.strategy.tunings` with an Undo). Other refusals: 409 stale `version`, 422 `strategy_not_editable` | `invalid_strategy`,
|
|
4250
|
+
* 429 `too_many_today` (10 a day per plan). A value that already holds changes nothing and bumps no version.
|
|
4251
|
+
*/
|
|
4252
|
+
tunePlan(apiKey: string, mandateId: SaltId, params: {
|
|
4253
|
+
version: number;
|
|
4254
|
+
} & StrategyTuning): Promise<Mandate>;
|
|
4255
|
+
/**
|
|
4256
|
+
* For the owner's client: keep a running plan as it is. `locks` is any of `"pace" | "explore" | "goal_kind"`, or `["all"]`, or `[]` to
|
|
4257
|
+
* unlock; it replaces the current locks (the answer's `locks`). While locked, the agent's `tunePlan` is refused 422 `plan_locked`.
|
|
4258
|
+
* Only the plan's grantor (403 `locks_grantor_only` otherwise), who is not bound by their own lock. The agent is not sent an event.
|
|
4259
|
+
*/
|
|
4260
|
+
lockPlan(apiKey: string, mandateId: SaltId, params: {
|
|
4261
|
+
version: number;
|
|
4262
|
+
locks: PlanLock[];
|
|
4263
|
+
}): Promise<Mandate>;
|
|
4264
|
+
/**
|
|
4265
|
+
* For the owner's client: undo one change in `Mandate.strategy.tunings[]` (`POST /api/v1/mandates/:id/tunings/:tid/undo`), the person's
|
|
4266
|
+
* Undo. Restores the values from before it. The plan's grantor only (404 for anyone else). 422 `already_undone` | `strategy_not_editable`,
|
|
4267
|
+
* 409 `tuning_superseded` (it was changed again since: nothing was undone), 404 `tuning_not_found`. The agent hears `strategy_tuned`.
|
|
4268
|
+
*/
|
|
4269
|
+
undoTuning(apiKey: string, mandateId: SaltId, tuningId: string): Promise<Mandate>;
|
|
4270
|
+
/**
|
|
4271
|
+
* For the owner's client: a number the person counts themselves for a plan target whose `source` is `reported` (`metricKey` is that
|
|
4272
|
+
* target's `metric`). Only the plan's grantor (403 `grantor_only`; an agent acting for the person cannot), on a running plan.
|
|
4273
|
+
* 201 with the stored count. 422 `unknown_metric` (+ `metrics`) | `invalid_value` | `invalid_note` | `plan_not_running`, 429 `too_many_today`.
|
|
4274
|
+
* The agent reads it back as a measured value (`GET /metrics?source=reported&metric_key=`), labelled "Reported by <name>".
|
|
4275
|
+
*/
|
|
4276
|
+
reportCount(apiKey: string, mandateId: SaltId, params: {
|
|
4277
|
+
metricKey: string;
|
|
4278
|
+
value: number;
|
|
4279
|
+
note?: string;
|
|
4280
|
+
}): Promise<ReportedCount>;
|
|
4281
|
+
/**
|
|
4282
|
+
* What the person can use, before you propose a plan: `GET /api/v1/me/readiness`. No option reads the caller; `personId` a person you
|
|
4283
|
+
* serve or work with; `planId` the grantor of a plan you are a party to. Anyone else gets 404. Name only the connections listed.
|
|
4284
|
+
*/
|
|
4285
|
+
getReadiness(apiKey: string, opts?: {
|
|
4286
|
+
personId?: SaltId;
|
|
4287
|
+
planId?: SaltId;
|
|
4288
|
+
}): Promise<Readiness>;
|
|
4289
|
+
/** The plan in one read (`GET /api/v1/mandates/:id/summary`): targets, reported counts, recent acts as sentences, tunings, spend, locks. Grantor and grantee only (404 otherwise). */
|
|
4290
|
+
getPlanSummary(apiKey: string, mandateId: SaltId): Promise<PlanSummary>;
|
|
4291
|
+
/**
|
|
4292
|
+
* Pause every live plan and grant you gave, or one goal's (`goalId` = a plan's mandate id or strategy_id). Idempotent. The plan's
|
|
4293
|
+
* grantee may also call it, for the goal plans it holds only.
|
|
4294
|
+
*/
|
|
4295
|
+
pauseAll(apiKey: string, opts?: {
|
|
4296
|
+
goalId?: SaltId | string;
|
|
4297
|
+
}): Promise<PauseAllResult>;
|
|
4298
|
+
/**
|
|
4299
|
+
* Lift exactly what `pauseAll` paused. Grantor only: a grantee gets 403 `resume_grantor_only` (`err.code`), "Tap Resume on the plan to
|
|
4300
|
+
* start it again.", so tell the person instead.
|
|
4301
|
+
*/
|
|
4302
|
+
resumeAll(apiKey: string, opts?: {
|
|
4303
|
+
goalId?: SaltId | string;
|
|
4304
|
+
}): Promise<ResumeAllResult>;
|
|
3888
4305
|
/** Do you already hold this capability? `{allowed, mandate_id?, mode, constraints}`. */
|
|
3889
4306
|
checkGrant(apiKey: string, capability: GrantCapability): Promise<GrantCheck>;
|
|
3890
4307
|
mandates: {
|
|
@@ -3905,7 +4322,16 @@ export declare function createSaltClient(options: SaltClientOptions): {
|
|
|
3905
4322
|
/** Grantee accepts an offered mandate (binds its current key fingerprint), or the grantor
|
|
3906
4323
|
* activates one still `proposed` by the grantee. See `ctx.mandate.accept()` in webhook.ts,
|
|
3907
4324
|
* which calls this for an incoming `mandate_offered` event. */
|
|
3908
|
-
accept(apiKey: string, mandateId: SaltId
|
|
4325
|
+
accept(apiKey: string, mandateId: SaltId, opts?: {
|
|
4326
|
+
version?: number;
|
|
4327
|
+
firstPostWords?: string;
|
|
4328
|
+
}): Promise<Mandate & {
|
|
4329
|
+
first_post_result?: {
|
|
4330
|
+
exercise_id: SaltId | number;
|
|
4331
|
+
message_id: SaltId;
|
|
4332
|
+
chat_id: SaltId;
|
|
4333
|
+
};
|
|
4334
|
+
}>;
|
|
3909
4335
|
/** Standing mandates only: +90 days from now. */
|
|
3910
4336
|
renew(apiKey: string, mandateId: SaltId): Promise<Mandate>;
|
|
3911
4337
|
pause(apiKey: string, mandateId: SaltId, reason?: string): Promise<Mandate>;
|