@cavuno/board 4.41.1 → 4.44.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/CHANGELOG.md +55 -0
- package/dist/{_spec-DRUEt9M3.d.mts → _spec-CLxrfYJb.d.mts} +33 -0
- package/dist/{_spec-DRUEt9M3.d.ts → _spec-CLxrfYJb.d.ts} +33 -0
- package/dist/bin.mjs +401 -6
- package/dist/{blog-DZejMyq-.d.ts → blog-CQ40QX7l.d.mts} +6 -1
- package/dist/{blog-B0oLDN4M.d.mts → blog-mlhJ6UcD.d.ts} +6 -1
- package/dist/{board-C-Hz8MMP.d.ts → board-DWFDeICw.d.ts} +2 -2
- package/dist/{board-Eusn8R9i.d.mts → board-TOzb2D8c.d.mts} +2 -2
- package/dist/{breadcrumbs-nX2svS5_.d.ts → breadcrumbs-DJHyzBji.d.ts} +2 -2
- package/dist/{breadcrumbs-BTqDFpGD.d.mts → breadcrumbs-DauM7O7_.d.mts} +2 -2
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/{chunk-WSO6JN5C.mjs → chunk-DZD3DAEY.mjs} +2 -0
- package/dist/doctor.js +401 -6
- package/dist/doctor.mjs +401 -6
- package/dist/filters.d.mts +2 -2
- package/dist/filters.d.ts +2 -2
- package/dist/format.d.mts +4 -4
- package/dist/format.d.ts +4 -4
- package/dist/index.d.mts +99 -15
- package/dist/index.d.ts +99 -15
- package/dist/index.js +105 -8
- package/dist/index.mjs +104 -9
- package/dist/{jobs-B-imggAc.d.mts → jobs-CjQM8EPT.d.mts} +1 -1
- package/dist/{jobs-jQwzYyvr.d.ts → jobs-DZVMzBOQ.d.ts} +1 -1
- package/dist/{search-C8uy6k8-.d.mts → search-BtBE6iJO.d.mts} +1 -1
- package/dist/{search-vXX_s6f5.d.ts → search-CF_wa20h.d.ts} +1 -1
- package/dist/{seo-D3AF4q7d.d.mts → seo-0bfk63qi.d.mts} +1 -1
- package/dist/{seo-BdNi6Eif.d.ts → seo-CU9LpWH7.d.ts} +1 -1
- package/dist/seo-files.d.mts +2 -2
- package/dist/seo-files.d.ts +2 -2
- package/dist/seo.d.mts +6 -6
- package/dist/seo.d.ts +6 -6
- package/dist/server.d.mts +6 -6
- package/dist/server.d.ts +6 -6
- package/dist/server.mjs +1 -1
- package/dist/sitemap.d.mts +6 -6
- package/dist/sitemap.d.ts +6 -6
- package/dist/sitemap.mjs +1 -1
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/package.json +1 -1
- package/skills/cavuno-board-blog/SKILL.md +7 -3
- package/skills/cavuno-board-post-a-job/SKILL.md +2 -1
- package/skills/manifest.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
isSsoRequired,
|
|
26
26
|
isUnauthorized,
|
|
27
27
|
isValidationError
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-DZD3DAEY.mjs";
|
|
29
29
|
|
|
30
30
|
// src/query.ts
|
|
31
31
|
function toSearchParams(query) {
|
|
@@ -46,7 +46,7 @@ function toSearchParams(query) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// src/version.ts
|
|
49
|
-
var SDK_VERSION = "4.
|
|
49
|
+
var SDK_VERSION = "4.44.0";
|
|
50
50
|
|
|
51
51
|
// src/client.ts
|
|
52
52
|
function isRawBody(body) {
|
|
@@ -989,7 +989,11 @@ function jobPostingNamespace(client) {
|
|
|
989
989
|
{ ...options, method: "POST", body: input }
|
|
990
990
|
);
|
|
991
991
|
},
|
|
992
|
-
/**
|
|
992
|
+
/**
|
|
993
|
+
* List the credit options for a verified email. To spend one, pass the
|
|
994
|
+
* option as `selectedBilling` and the same `verificationToken` as
|
|
995
|
+
* `billingVerificationToken` to `create`.
|
|
996
|
+
*/
|
|
993
997
|
getBillingOptions(input, options) {
|
|
994
998
|
return client.fetch(
|
|
995
999
|
"/job-postings/billing-options",
|
|
@@ -2129,9 +2133,12 @@ function meNamespace(client) {
|
|
|
2129
2133
|
}
|
|
2130
2134
|
},
|
|
2131
2135
|
/**
|
|
2132
|
-
* Company-owned saved
|
|
2133
|
-
*
|
|
2134
|
-
*
|
|
2136
|
+
* Company-owned saved searches over the talent directory. Each holds
|
|
2137
|
+
* named filters and, optionally, saved people (`members`). Approved
|
|
2138
|
+
* members share the same lists. Optional `job` links a list to one
|
|
2139
|
+
* company job; pass `job: null` on update to unlink. Linking a list
|
|
2140
|
+
* shortlists everyone saved to it onto that job; unlinking changes no
|
|
2141
|
+
* pipeline.
|
|
2135
2142
|
*/
|
|
2136
2143
|
talentLists: {
|
|
2137
2144
|
/**
|
|
@@ -2173,7 +2180,10 @@ function meNamespace(client) {
|
|
|
2173
2180
|
{ ...options, method: "PATCH", body }
|
|
2174
2181
|
);
|
|
2175
2182
|
},
|
|
2176
|
-
/**
|
|
2183
|
+
/**
|
|
2184
|
+
* Delete a talent list and the people saved to it. Job pipelines and
|
|
2185
|
+
* sourced membership are unaffected.
|
|
2186
|
+
*/
|
|
2177
2187
|
remove(slug, listId, options) {
|
|
2178
2188
|
return client.fetch(
|
|
2179
2189
|
`/me/companies/${encodeURIComponent(
|
|
@@ -2181,6 +2191,90 @@ function meNamespace(client) {
|
|
|
2181
2191
|
)}/talent-lists/${encodeURIComponent(listId)}`,
|
|
2182
2192
|
{ ...options, method: "DELETE" }
|
|
2183
2193
|
);
|
|
2194
|
+
},
|
|
2195
|
+
/**
|
|
2196
|
+
* The talent lists of a company one candidate is saved to — for
|
|
2197
|
+
* showing which lists a Save control has ticked.
|
|
2198
|
+
*
|
|
2199
|
+
* @example
|
|
2200
|
+
* const { data } = await board.me.companies.talentLists.memberships(
|
|
2201
|
+
* 'acme',
|
|
2202
|
+
* { candidate: candidateId },
|
|
2203
|
+
* );
|
|
2204
|
+
* const saved = new Set(data.map((m) => m.listId));
|
|
2205
|
+
*/
|
|
2206
|
+
memberships(slug, query, options) {
|
|
2207
|
+
return client.fetch(
|
|
2208
|
+
`/me/companies/${encodeURIComponent(slug)}/talent-list-memberships`,
|
|
2209
|
+
{ ...options, query }
|
|
2210
|
+
);
|
|
2211
|
+
},
|
|
2212
|
+
/**
|
|
2213
|
+
* People saved to a talent list (at most 500 per list).
|
|
2214
|
+
*/
|
|
2215
|
+
members: {
|
|
2216
|
+
/**
|
|
2217
|
+
* List the people saved to a list as directory cards, most
|
|
2218
|
+
* recently saved first unless `sort` or a keyword (`q`) is set;
|
|
2219
|
+
* with a keyword, best match first. Cards are redacted as in the
|
|
2220
|
+
* public directory when the board sells profile unlocks, except
|
|
2221
|
+
* for candidates the company has unlocked. Runs the public
|
|
2222
|
+
* talent directory search, with the same filters, restricted to
|
|
2223
|
+
* the saved people, so a "Saved" view can combine with the
|
|
2224
|
+
* list's filters. Blocked, hidden and deactivated
|
|
2225
|
+
* candidates are omitted. `total` counts every visible saved
|
|
2226
|
+
* person; `count` counts the ones the filters keep.
|
|
2227
|
+
*
|
|
2228
|
+
* @example
|
|
2229
|
+
* const { data, total } =
|
|
2230
|
+
* await board.me.companies.talentLists.members.list(
|
|
2231
|
+
* 'acme',
|
|
2232
|
+
* listId,
|
|
2233
|
+
* { skill: 'react' },
|
|
2234
|
+
* );
|
|
2235
|
+
*/
|
|
2236
|
+
list(slug, listId, query, options) {
|
|
2237
|
+
return client.fetch(
|
|
2238
|
+
`/me/companies/${encodeURIComponent(
|
|
2239
|
+
slug
|
|
2240
|
+
)}/talent-lists/${encodeURIComponent(listId)}/members`,
|
|
2241
|
+
{ ...options, query }
|
|
2242
|
+
);
|
|
2243
|
+
},
|
|
2244
|
+
/**
|
|
2245
|
+
* Save a candidate to a list. Idempotent: saving someone already
|
|
2246
|
+
* on it returns `created: false`. When the list is linked to a
|
|
2247
|
+
* job, the candidate is also shortlisted onto that job unless they
|
|
2248
|
+
* already have a pipeline row there. A full list raises
|
|
2249
|
+
* `talent_list_full` (409).
|
|
2250
|
+
*
|
|
2251
|
+
* @example
|
|
2252
|
+
* await board.me.companies.talentLists.members.add('acme', listId, {
|
|
2253
|
+
* candidateBoardUserId: candidateId,
|
|
2254
|
+
* });
|
|
2255
|
+
*/
|
|
2256
|
+
add(slug, listId, body, options) {
|
|
2257
|
+
return client.fetch(
|
|
2258
|
+
`/me/companies/${encodeURIComponent(
|
|
2259
|
+
slug
|
|
2260
|
+
)}/talent-lists/${encodeURIComponent(listId)}/members`,
|
|
2261
|
+
{ ...options, method: "POST", body }
|
|
2262
|
+
);
|
|
2263
|
+
},
|
|
2264
|
+
/**
|
|
2265
|
+
* Remove a candidate from a list. Idempotent. Never changes a job
|
|
2266
|
+
* pipeline, including the linked job's.
|
|
2267
|
+
*/
|
|
2268
|
+
remove(slug, listId, candidateBoardUserId, options) {
|
|
2269
|
+
return client.fetch(
|
|
2270
|
+
`/me/companies/${encodeURIComponent(
|
|
2271
|
+
slug
|
|
2272
|
+
)}/talent-lists/${encodeURIComponent(
|
|
2273
|
+
listId
|
|
2274
|
+
)}/members/${encodeURIComponent(candidateBoardUserId)}`,
|
|
2275
|
+
{ ...options, method: "DELETE" }
|
|
2276
|
+
);
|
|
2277
|
+
}
|
|
2184
2278
|
}
|
|
2185
2279
|
},
|
|
2186
2280
|
/**
|
|
@@ -3396,9 +3490,10 @@ function sitemapNamespace(client) {
|
|
|
3396
3490
|
function talentNamespace(client) {
|
|
3397
3491
|
return {
|
|
3398
3492
|
/**
|
|
3399
|
-
* List the board's
|
|
3493
|
+
* List the board's talent directory — candidate cards ranked by
|
|
3400
3494
|
* job-search status then most-recently-updated, the same ordering the
|
|
3401
|
-
* hosted `/talent` page renders.
|
|
3495
|
+
* hosted `/talent` page renders. Anonymous callers see `public` profiles;
|
|
3496
|
+
* a signed-in board user also sees `logged_in_only` ones.
|
|
3402
3497
|
*
|
|
3403
3498
|
* Throws `talent_directory_restricted` (403) when the board restricts the
|
|
3404
3499
|
* directory to employers (render an employer upsell), or
|
package/dist/seo-files.d.mts
CHANGED
package/dist/seo-files.d.ts
CHANGED
package/dist/seo.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
3
|
-
export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-CQ40QX7l.mjs';
|
|
2
|
+
import { e as JsonLdObject } from './breadcrumbs-DauM7O7_.mjs';
|
|
3
|
+
export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-DauM7O7_.mjs';
|
|
4
|
+
import './_spec-CLxrfYJb.mjs';
|
|
5
|
+
import './board-TOzb2D8c.mjs';
|
|
6
|
+
import './jobs-CjQM8EPT.mjs';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Blog structured data on the `@cavuno/board` wire types, transcribed from
|
package/dist/seo.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
3
|
-
export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-mlhJ6UcD.js';
|
|
2
|
+
import { e as JsonLdObject } from './breadcrumbs-DJHyzBji.js';
|
|
3
|
+
export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-DJHyzBji.js';
|
|
4
|
+
import './_spec-CLxrfYJb.js';
|
|
5
|
+
import './board-DWFDeICw.js';
|
|
6
|
+
import './jobs-DZVMzBOQ.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Blog structured data on the `@cavuno/board` wire types, transcribed from
|
package/dist/server.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.mjs';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './
|
|
5
|
-
import './
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-CLxrfYJb.mjs';
|
|
3
|
+
import './search-BtBE6iJO.mjs';
|
|
4
|
+
import './jobs-CjQM8EPT.mjs';
|
|
5
|
+
import './board-TOzb2D8c.mjs';
|
|
6
|
+
import './seo-0bfk63qi.mjs';
|
|
7
|
+
import './blog-CQ40QX7l.mjs';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Session cookie codec — pure (no framework imports, no node imports) so it
|
package/dist/server.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.js';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './
|
|
5
|
-
import './
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-CLxrfYJb.js';
|
|
3
|
+
import './search-CF_wa20h.js';
|
|
4
|
+
import './jobs-DZVMzBOQ.js';
|
|
5
|
+
import './board-DWFDeICw.js';
|
|
6
|
+
import './seo-CU9LpWH7.js';
|
|
7
|
+
import './blog-mlhJ6UcD.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Session cookie codec — pure (no framework imports, no node imports) so it
|
package/dist/server.mjs
CHANGED
package/dist/sitemap.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.mjs';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './
|
|
5
|
-
import './
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-CLxrfYJb.mjs';
|
|
3
|
+
import './search-BtBE6iJO.mjs';
|
|
4
|
+
import './jobs-CjQM8EPT.mjs';
|
|
5
|
+
import './board-TOzb2D8c.mjs';
|
|
6
|
+
import './seo-0bfk63qi.mjs';
|
|
7
|
+
import './blog-CQ40QX7l.mjs';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Sitemap primitives — the pure XML + bucket-filename logic behind a board
|
package/dist/sitemap.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.js';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './
|
|
5
|
-
import './
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-CLxrfYJb.js';
|
|
3
|
+
import './search-CF_wa20h.js';
|
|
4
|
+
import './jobs-DZVMzBOQ.js';
|
|
5
|
+
import './board-DWFDeICw.js';
|
|
6
|
+
import './seo-CU9LpWH7.js';
|
|
7
|
+
import './blog-mlhJ6UcD.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Sitemap primitives — the pure XML + bucket-filename logic behind a board
|
package/dist/sitemap.mjs
CHANGED
package/dist/suggest.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-BtBE6iJO.mjs';
|
|
2
|
+
import './_spec-CLxrfYJb.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/suggest` — framework-agnostic headless search-suggest
|
package/dist/suggest.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-CF_wa20h.js';
|
|
2
|
+
import './_spec-CLxrfYJb.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/suggest` — framework-agnostic headless search-suggest
|
package/package.json
CHANGED
|
@@ -13,9 +13,11 @@ The host app owns authoring, feeds, sitemaps, and OG-image routes.
|
|
|
13
13
|
## Build archives
|
|
14
14
|
|
|
15
15
|
`blog.posts.list` returns `ListEnvelope<PublicBlogPostSummary>`. Its query
|
|
16
|
-
accepts `limit` (1–100), `cursor`, `tagSlug`, `authorSlug`,
|
|
17
|
-
`featured: 'true'
|
|
18
|
-
|
|
16
|
+
accepts `limit` (1–100), `cursor`, `tagSlug`, `authorSlug`,
|
|
17
|
+
`featured: 'true'`, and `sort` (`'newest'` default, or `'featured'` for
|
|
18
|
+
featured posts first, then the rest, as one list). `featured` is the string
|
|
19
|
+
literal. Blog lists use cursor pagination and expose neither `offset` nor total
|
|
20
|
+
`count`; a cursor only continues the list it came from.
|
|
19
21
|
|
|
20
22
|
```ts snippet
|
|
21
23
|
const page = await board.blog.posts.list({ tagSlug: 'news', limit: 12 });
|
|
@@ -109,6 +111,8 @@ Finish only after every applicable check passes:
|
|
|
109
111
|
`html`.
|
|
110
112
|
- A retrieved old slug redirects to `newSlug` before rendering.
|
|
111
113
|
- Featured archives send the exact string `featured: 'true'`.
|
|
114
|
+
- Archives that put featured posts on top use `sort: 'featured'`, not a
|
|
115
|
+
separate featured call merged in front of page one.
|
|
112
116
|
- Cursor paging reaches `nextCursor: null` without relying on count or offset.
|
|
113
117
|
- Newest and oldest posts handle the null side of `adjacent`.
|
|
114
118
|
|
|
@@ -168,7 +168,7 @@ The checkout value is a URL for a host-owned full-page redirect. Payment publica
|
|
|
168
168
|
|
|
169
169
|
## Verified existing credit
|
|
170
170
|
|
|
171
|
-
Email verification protects billing ownership. Send verification first, then exchange the token for options; a selected option becomes `selectedBilling`.
|
|
171
|
+
Email verification protects billing ownership. Send verification first, then exchange the token for options; a selected option becomes `selectedBilling`, and the same token goes with it as `billingVerificationToken`. The token expires after an hour; verify again if it has.
|
|
172
172
|
|
|
173
173
|
```ts snippet
|
|
174
174
|
await board.jobPosting.sendBillingVerification({ email });
|
|
@@ -190,6 +190,7 @@ if (option) {
|
|
|
190
190
|
id: option.id,
|
|
191
191
|
planId: option.planId,
|
|
192
192
|
},
|
|
193
|
+
billingVerificationToken: verificationToken,
|
|
193
194
|
});
|
|
194
195
|
}
|
|
195
196
|
```
|
package/skills/manifest.json
CHANGED