@joymerrevent/porters-connect 0.16.0 → 0.18.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 +232 -1
- package/README.md +1 -1
- package/dist/index.d.ts +200 -37
- package/dist/index.js +173 -133
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,226 @@
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.18.0] - 2026-09-17
|
|
9
|
+
|
|
10
|
+
**「どのリソースか」の受け取り方を 1 つの規則に揃えた版**です。**破壊的変更を 4 つ**含みます
|
|
11
|
+
(アクセスポイントの `host` 廃止/束ねた項目は書き込み入力から外れる/Field マスタの Read が
|
|
12
|
+
`of()` 経由に/添付の Read が PORTERS の語彙に)。
|
|
13
|
+
|
|
14
|
+
PORTERS が `resource=` を **URL パラメータで必須**に要求するエンドポイントは 3 つ(Field / Phase /
|
|
15
|
+
Attachment)あるのに、受け口の形が 3 つとも違っていました。**パラメータのリソースは `of(name)` で
|
|
16
|
+
束ね、項目の値は宣言した Data Type どおり(数値)**という線を引き、3 本とも `of()` に揃えています。
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- **`resourceValueOf` / `resourceNameOf`** — リソース名と数値を相互変換します([ADR-0079][adr79])。
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import {
|
|
24
|
+
resourceNameOf,
|
|
25
|
+
resourceValueOf,
|
|
26
|
+
} from "@joymerrevent/porters-connect";
|
|
27
|
+
|
|
28
|
+
await t.activity.create({
|
|
29
|
+
P_Owner: 5,
|
|
30
|
+
P_Title: "一次面談",
|
|
31
|
+
P_Resource: resourceValueOf("candidate"), // 1
|
|
32
|
+
P_ResourceId: 10001,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
resourceNameOf(17); // "resume"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
PORTERS のリソース番号は**非連続**です(Candidate `1` / Job `3` / Client `5` / Recruiter `9` /
|
|
39
|
+
Sales `11` / …)。欠番も取り違えも数値リテラルでは気づけないので、名前から引いてください。
|
|
40
|
+
`resourceNameOf` は**知らない数値をそのまま返します**(`ResourceName | number`)— Resource List は
|
|
41
|
+
PORTERS のもので増えるため(Contact `27` は後から増えました)、知らない値はエラーにせず
|
|
42
|
+
データとして通します。
|
|
43
|
+
|
|
44
|
+
- 公開した型: `AttachmentAccessor` / `FieldAccessor`(`ResourceName` は 0.17.0 から公開済みで、
|
|
45
|
+
`of()` に渡す名前の型です)。
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
- **(破壊的)アクセスポイントが `hostname` と `port` に分かれました**([ADR-0078][adr78])。
|
|
50
|
+
**`host` は無くなります。**
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
// これまで
|
|
54
|
+
new PortersClient({ host: "xxxxx.example.com", appId, appSecret });
|
|
55
|
+
new PortersClient({ host: "127.0.0.1:4010", scheme: "http" });
|
|
56
|
+
|
|
57
|
+
// これから
|
|
58
|
+
new PortersClient({ hostname: "xxxxx.example.com", appId, appSecret });
|
|
59
|
+
new PortersClient({ hostname: "127.0.0.1", port: 4010, scheme: "http" });
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**契約で渡される値にポートは無い**からです。PORTERS の記事は `{Request Host}` を「該当の
|
|
63
|
+
**サーバー名**を入れてください」と説明し、ポート表記はどの記事にも出てきません。一方 URL 仕様では
|
|
64
|
+
`host` は**ポートを含む**名前で、含まないのが `hostname` です。名前と中身を揃えました。
|
|
65
|
+
|
|
66
|
+
- **`hostname` にポートを書くと構築時に落ちます**(`PortersConfigError`)。素通しすると
|
|
67
|
+
「指定したつもりで既定ポートに送られる」ので、黙って落とさずに弾きます
|
|
68
|
+
- **`port` は 1〜65535 の整数**。省略すれば scheme の既定ポートです。使うのはローカルの
|
|
69
|
+
フェイクサーバーやプロキシに向けるときだけで、PORTERS には要りません
|
|
70
|
+
- **IPv6 は角括弧付き**で渡します(`hostname: "[::1]"`)
|
|
71
|
+
- `PortersClient` のゲッターも `host` → **`hostname` / `port`** の 2 本になります
|
|
72
|
+
- スロットルのバケット([ADR-0073][adr73])は**宛先ごと**になりました。同じ名前でもポートが
|
|
73
|
+
違えば別のバケットです
|
|
74
|
+
|
|
75
|
+
- **(破壊的)添付ファイルの Read が PORTERS の語彙に揃いました**([ADR-0081][adr81])。
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
// これまで
|
|
79
|
+
await t.attachment.search({ condition: { "ResourceId:eq": "10001" } });
|
|
80
|
+
await t.attachment.create({ resource: 17, resourceId: 10001, ...file });
|
|
81
|
+
|
|
82
|
+
// これから
|
|
83
|
+
const files = t.attachment.of("resume"); // resource を 1 回束ねる
|
|
84
|
+
await files.search({ resourceId: 10001 });
|
|
85
|
+
await files.get(900);
|
|
86
|
+
await files.create({ resourceId: 10001, ...file }); // resource は束ねた値
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
PORTERS の `Attachment - Read` が取るのは `requestType` / `resource` / `resourceId` / `id` で、
|
|
90
|
+
**`field` と `condition` は挙げられていません**。ライブラリは逆で、**必須の 2 つを送らず、
|
|
91
|
+
記載の無い 2 つを送っていました**。出典どおりなら添付の読み取りは実環境で常に失敗するので、
|
|
92
|
+
出典に一致する側へ倒しました。
|
|
93
|
+
|
|
94
|
+
- `create` の入力から **`resource` が消えました**。付け先を取り違えても添付は消せないので、
|
|
95
|
+
書ける場所を減らしています
|
|
96
|
+
- 本体(`content`)を運ぶかは引き続き**メソッドが決めます**(`get` だけが運びます。
|
|
97
|
+
PORTERS 側では `requestType` です)
|
|
98
|
+
- **絞れるのは `resourceId`(1 レコードの添付)と `id`(1 件)だけ**で、ファイル名などでの
|
|
99
|
+
検索はできません(PORTERS が提供していません)。名前で探すときは `searchAll` で歩きながら
|
|
100
|
+
絞ってください
|
|
101
|
+
- **出典どおりの形が実機で通るかは未確認**です(契約環境でのみ確かめられます)
|
|
102
|
+
|
|
103
|
+
- **(破壊的)Field マスタの Read が `of()` でリソースを束ねる形になりました**([ADR-0080][adr80])。
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
// これまで
|
|
107
|
+
await t.field.search({ resource: "candidate", active: 1 });
|
|
108
|
+
|
|
109
|
+
// これから
|
|
110
|
+
await t.field.of("candidate").search({ active: 1 });
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
同じ形の Phase は以前から `t.phase.of("client")` で束ねていたので、**URL パラメータのリソースは
|
|
114
|
+
`of()` で束ねる**という 1 つの規則に揃えました。`readCustomCatalog` / `verifyFields` /
|
|
115
|
+
`generateFieldDecls` の**引数は変わりません**。`porters.partition` / `t.user` / `t.option` も
|
|
116
|
+
変わりません — この 3 つは `resource=` を取らないためです。
|
|
117
|
+
|
|
118
|
+
- **(破壊的)アクセサが束ねた項目は、書き込み入力から外れます**。
|
|
119
|
+
|
|
120
|
+
`t.phase.of("client")` は「このアクセサは企業の Phase を扱う」という宣言です。これまでは
|
|
121
|
+
`Resource` を書き込み入力に渡せてしまい、**束ねた値を上書きできました** — `of("client")` から
|
|
122
|
+
JOB(`3`)の Phase が書ける状態でした。
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
const phase = (await t.phase.of("client").get(10014))!;
|
|
126
|
+
await t.phase.of("client").create({ ...phase, Date: "2026-09-17T00:00:00Z" });
|
|
127
|
+
// 読みのレコードは `Resource` を持つため、これまでは束ねた値が黙って上書きされていました
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
型で外したうえ、キャストで渡した場合も**送信前に** `PortersConfigError` で止めます(黙って
|
|
131
|
+
捨てません)。Phase に削除 API は無いので、間違ったリソースに付いた履歴は消せません。
|
|
132
|
+
|
|
133
|
+
- **エンドポイント × 機能のマトリクスのずれが無くなりました**。0.17.0 で起こした表は
|
|
134
|
+
**4 セルが食い違った状態**で出しましたが(Phase の 2 つ・Attachment の 2 つ)、本版で
|
|
135
|
+
**すべて解消**しています。パッケージの中身は変わりません。
|
|
136
|
+
|
|
137
|
+
### Removed
|
|
138
|
+
|
|
139
|
+
- **`AttachmentMetaField`** — 0.17.0 で公開した型ですが、添付の Read から `field` が無くなった
|
|
140
|
+
ため役目を終えました([ADR-0081][adr81])。
|
|
141
|
+
|
|
142
|
+
## [0.17.0] - 2026-09-16
|
|
143
|
+
|
|
144
|
+
**添付ファイルの運び方を決め、出典に無いパラメータを型から外した版**です。**破壊的変更を 2 つ**
|
|
145
|
+
含みます(添付の本体は `get` でだけ取れる/Phase の Read から `keywords` / `itemstate` が消える)。
|
|
146
|
+
|
|
147
|
+
### Added
|
|
148
|
+
|
|
149
|
+
- **`t.attachment.searchAll()`** — 200 件を超える添付を、`start` を自分で回さずに順に見られます
|
|
150
|
+
([ADR-0075][adr75])。ほかの 15 エンドポイントと同じ語彙になりました。
|
|
151
|
+
|
|
152
|
+
```ts
|
|
153
|
+
for await (const a of t.attachment.searchAll({
|
|
154
|
+
condition: { "Resource:eq": "17" },
|
|
155
|
+
})) {
|
|
156
|
+
console.log(a.fileName, a.contentType);
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
流れるのは**メタデータだけ**なので、全部を歩いてもファイル本体はダウンロードされません。
|
|
161
|
+
|
|
162
|
+
- **`createFetchTransport`** — 既定の transport を公開しました([ADR-0077][adr77])。
|
|
163
|
+
1 リクエストのタイムアウト(既定 **30 秒**)を変えられます。
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
import {
|
|
167
|
+
PortersClient,
|
|
168
|
+
createFetchTransport,
|
|
169
|
+
} from "@joymerrevent/porters-connect";
|
|
170
|
+
|
|
171
|
+
const porters = new PortersClient({
|
|
172
|
+
host,
|
|
173
|
+
appId,
|
|
174
|
+
appSecret,
|
|
175
|
+
transport: createFetchTransport({ timeoutMs: 120_000 }), // 2 分
|
|
176
|
+
});
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
この 30 秒は**接続から本文の受信完了まで**で、**1 リクエストごと**に数えます(自動リトライを
|
|
180
|
+
含めると最悪 `maxRetries + 1` 倍)。レートの待ち時間は含みません。`timeoutMs` は**正の整数**だけを
|
|
181
|
+
受け、`0`(=即中断で「無制限」ではない)は構築時に `PortersConfigError` で弾きます。
|
|
182
|
+
これまで変えるには `Transport` の自前実装が必要で、`PortersNetworkError` への分類まで
|
|
183
|
+
書き直すことになっていました。
|
|
184
|
+
|
|
185
|
+
- 公開した型: `AttachmentMetaField` / `AttachmentWalkQuery` / `FetchTransportOptions`。
|
|
186
|
+
|
|
187
|
+
### Changed
|
|
188
|
+
|
|
189
|
+
- **(破壊的)添付の本体(`content`)は `get` でだけ取れます**([ADR-0075][adr75])。
|
|
190
|
+
`search` / `searchAll` の `field` に `"Content"` は書けません。
|
|
191
|
+
|
|
192
|
+
```ts
|
|
193
|
+
await t.attachment.search({ field: ["Id", "Content"] });
|
|
194
|
+
// ^^^^^^^^^ 型エラーになります
|
|
195
|
+
const file = await t.attachment.get(900); // 本体はこちら
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
1 ページは最大 200 件で、PORTERS は 1 ファイル 10MB まで許します。本体を混ぜた一覧は
|
|
199
|
+
**読める大きさを越えることがあります** — 1 ファイル 2MB 超 × 200 件で V8 の文字列上限
|
|
200
|
+
(536,870,888 文字)に当たり、`RangeError` になって再送しても直りません。しかも Attachment は
|
|
201
|
+
**ファイルサイズを返さない**ので、「何件までなら安全か」を呼び出し側が判断することもできません。
|
|
202
|
+
そこで件数ではなく**メソッド**で分けました。型を外して渡した場合も、送信前に
|
|
203
|
+
`PortersConfigError` で止まります。
|
|
204
|
+
|
|
205
|
+
- **(破壊的)Phase の Read クエリから `keywords` / `itemstate` が消えました**([ADR-0076][adr76])。
|
|
206
|
+
PORTERS の `Phase - Read` はこの 2 つを Input Variables に挙げていません。Read 記事 17 本を
|
|
207
|
+
数えると、共通語彙のデータ系 11 本は両方を載せ、**Phase / Attachment / マスタ 4 種は 1 本も
|
|
208
|
+
載せていません**(11/11 対 0/6)ので、記事側の省略ではなく**エンドポイントごとに取るものが
|
|
209
|
+
違う**と読めます。出典に無いパラメータは、無視されるのではなく **Read 全体を失敗させうる**
|
|
210
|
+
(Result Code 100 / 102)ため、型の側で閉じました。
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
await t.phase.of("client").search({ keywords: ["山田"] });
|
|
214
|
+
// ^^^^^^^^ 型エラーになります
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**実行時は変えていません**。cast すれば今までどおり送られます(契約環境で「実は受け付ける」と
|
|
218
|
+
分かったときに確かめられるように残しました)。
|
|
219
|
+
|
|
220
|
+
- **エンドポイント × 機能のマトリクスを起こしました**。PORTERS が取るものとライブラリが送るものを
|
|
221
|
+
表に並べ、**reference ↔ 表 ↔ 実装を両方向で突き合わせる検査**(94 件)を足しています。
|
|
222
|
+
ずれているセルには必ず根拠(ADR / ライブ検証)が要る形で、今回の 2 つの破壊的変更も
|
|
223
|
+
この表から出てきました。パッケージの中身は変わりません。
|
|
224
|
+
|
|
225
|
+
- **既定 30 秒のタイムアウトをドキュメントに明文化しました**([上限][limits]・[失敗の扱い][failures])。
|
|
226
|
+
これまでどこにも書かれていませんでした。パッケージの中身は変わりません。
|
|
227
|
+
|
|
8
228
|
## [0.16.0] - 2026-09-15
|
|
9
229
|
|
|
10
230
|
**カスタム項目を「宣言してから使う」に揃えた版**です。**破壊的変更**(`field` が未宣言の
|
|
@@ -798,11 +1018,22 @@
|
|
|
798
1018
|
[adr69]: docs/adr/0069-tenant-field-catalog-tooling.md
|
|
799
1019
|
[adr73]: docs/adr/0073-throttle-sharing.md
|
|
800
1020
|
[adr74]: docs/adr/0074-custom-field-declaration-required.md
|
|
1021
|
+
[adr75]: docs/adr/0075-attachment-search-all.md
|
|
1022
|
+
[adr76]: docs/adr/0076-phase-read-query-surface.md
|
|
1023
|
+
[adr77]: docs/adr/0077-fetch-transport-timeout.md
|
|
1024
|
+
[adr78]: docs/adr/0078-hostname-port-split.md
|
|
1025
|
+
[adr79]: docs/adr/0079-resource-by-name.md
|
|
1026
|
+
[adr80]: docs/adr/0080-resource-parameter-binding.md
|
|
1027
|
+
[adr81]: docs/adr/0081-attachment-read-parameters.md
|
|
1028
|
+
[limits]: docs/usage/concepts/limits.md
|
|
1029
|
+
[failures]: docs/usage/howto/handle-failures.md
|
|
801
1030
|
[lv]: docs/live-verification.md
|
|
802
1031
|
[ref]: docs/usage/reference/README.md
|
|
803
1032
|
[kac]: https://keepachangelog.com/en/1.1.0/
|
|
804
1033
|
[semver]: https://semver.org/
|
|
805
|
-
[unreleased]: https://github.com/Joymerrevent/porters-connect/compare/v0.
|
|
1034
|
+
[unreleased]: https://github.com/Joymerrevent/porters-connect/compare/v0.18.0...HEAD
|
|
1035
|
+
[0.18.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.17.0...v0.18.0
|
|
1036
|
+
[0.17.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.16.0...v0.17.0
|
|
806
1037
|
[0.16.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.15.1...v0.16.0
|
|
807
1038
|
[0.15.1]: https://github.com/Joymerrevent/porters-connect/compare/v0.15.0...v0.15.1
|
|
808
1039
|
[0.15.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.14.0...v0.15.0
|
package/README.md
CHANGED
|
@@ -54,7 +54,7 @@ npm i @joymerrevent/porters-connect
|
|
|
54
54
|
import { PortersClient } from "@joymerrevent/porters-connect";
|
|
55
55
|
|
|
56
56
|
const porters = new PortersClient({
|
|
57
|
-
|
|
57
|
+
hostname: process.env.PORTERS_HOST ?? "", // 契約時に通知される値。ハードコード禁止
|
|
58
58
|
appId: process.env.PORTERS_APP_ID ?? "",
|
|
59
59
|
appSecret: process.env.PORTERS_APP_SECRET ?? "",
|
|
60
60
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -52,6 +52,26 @@ type PartitionId = number;
|
|
|
52
52
|
*/
|
|
53
53
|
type Scheme = "https" | "http";
|
|
54
54
|
|
|
55
|
+
type FetchTransportOptions = {
|
|
56
|
+
/**
|
|
57
|
+
* How long one request may take, in milliseconds. Default 30,000.
|
|
58
|
+
*
|
|
59
|
+
* **It covers the whole exchange** — connect, send, and reading the response body to the end —
|
|
60
|
+
* because the abort signal is handed to `fetch` itself. A large download therefore hits it even
|
|
61
|
+
* when the headers came back instantly. It is **per request**, so a retried call can take
|
|
62
|
+
* `maxRetries + 1` times this (plus backoff), and it does not include waiting for a throttle
|
|
63
|
+
* slot (throttling sits above the transport).
|
|
64
|
+
*
|
|
65
|
+
* Raise it to read large attachments over a slow link; lower it to fail fast in an interactive
|
|
66
|
+
* tool. Must be a positive integer — `0` would abort every request immediately, which reads
|
|
67
|
+
* like "no timeout" and is not (ADR-0077).
|
|
68
|
+
*/
|
|
69
|
+
timeoutMs?: number;
|
|
70
|
+
/** Injectable fetch (tests / custom dispatcher). Default global fetch. */
|
|
71
|
+
fetchImpl?: typeof fetch;
|
|
72
|
+
};
|
|
73
|
+
declare const createFetchTransport: (opts?: FetchTransportOptions) => Transport;
|
|
74
|
+
|
|
55
75
|
/** A mock reply: an XML body string (HTTP 200), or an explicit status + body. */
|
|
56
76
|
type MockReply = string | {
|
|
57
77
|
status?: number;
|
|
@@ -638,13 +658,47 @@ type UpdateInput<F extends FieldCatalog> = {
|
|
|
638
658
|
* {@link EmptyReferences}. With no keys, `ImageReadRecord` collapses back to the record it wrapped.
|
|
639
659
|
*/
|
|
640
660
|
type EmptyImages = Record<never, never>;
|
|
641
|
-
|
|
642
|
-
|
|
661
|
+
/**
|
|
662
|
+
* An object with `K` taken out — and **kept out**. `Omit` alone only stops a fresh object literal
|
|
663
|
+
* (excess-property checking); a variable that happens to carry the key still assigns. Re-declaring
|
|
664
|
+
* each removed key as `?: never` closes that hole, so the call fails whichever way the object was
|
|
665
|
+
* built — including `create({ ...recordFromRead })`, which is how the binding actually gets
|
|
666
|
+
* contradicted in practice (RV-47).
|
|
667
|
+
*
|
|
668
|
+
* Used for two different exclusions: query keys the endpoint does not take (`Unsupported` —
|
|
669
|
+
* ADR-0076) and write aliases the accessor itself fills (`Bound` — ADR-0061 / ADR-0080).
|
|
670
|
+
* `searchAll` keeps a plain `Omit` for `count` / `start`: those are not "PORTERS does not take
|
|
671
|
+
* this", they are "the walk decides them", and tightening that is a different decision.
|
|
672
|
+
*/
|
|
673
|
+
type Without<T, K extends keyof T> = Omit<T, K> & {
|
|
674
|
+
[P in K]?: never;
|
|
675
|
+
};
|
|
676
|
+
type Resource<F extends FieldCatalog, Req extends keyof F, R extends ReferenceMap = EmptyReferences,
|
|
677
|
+
/**
|
|
678
|
+
* Query keys **this endpoint does not take** (ADR-0076). The common Read vocabulary is not
|
|
679
|
+
* universal: PORTERS lists `keywords` / `itemstate` for the 11 common data resources and for
|
|
680
|
+
* none of the others, so a resource on this factory can say which of them its own endpoint
|
|
681
|
+
* leaves out. `never` — the default — means "takes the whole vocabulary".
|
|
682
|
+
*
|
|
683
|
+
* Sending a parameter the endpoint does not list can fail the *whole* Read (Result Code 100 /
|
|
684
|
+
* 102), so the safe side is not to offer it. The runtime stays permissive (ADR-0074): a key
|
|
685
|
+
* forced in through a cast is still sent, which is how a live contract can test whether
|
|
686
|
+
* PORTERS accepts it at all.
|
|
687
|
+
*/
|
|
688
|
+
Unsupported extends keyof SearchQuery<F, R> = never,
|
|
689
|
+
/**
|
|
690
|
+
* Write aliases **the accessor itself fills**, so a caller cannot supply them (ADR-0061 / RV-47).
|
|
691
|
+
* `t.phase.of("client")` binds `Resource`; passing it again could only mean contradicting the
|
|
692
|
+
* binding, and a phase written to the wrong resource cannot be deleted (there is no delete API).
|
|
693
|
+
* `never` — the default — means the caller supplies every writable field.
|
|
694
|
+
*/
|
|
695
|
+
Bound extends WritableKeys<F> = never> = {
|
|
696
|
+
search<const E extends Expand<R> = EmptyReferences, const I extends ImageOption<F> = EmptyImages>(query?: Without<SearchQuery<F, R>, Unsupported> & {
|
|
643
697
|
expand?: E;
|
|
644
698
|
image?: I;
|
|
645
699
|
}): Promise<ResourcePageOf<ImageReadRecord<ExpandedReadRecord<F, R, E>, I>>>;
|
|
646
700
|
/** Auto-paginating search: yields every matching record (200 per page). */
|
|
647
|
-
searchAll<const E extends Expand<R> = EmptyReferences, const I extends ImageOption<F> = EmptyImages>(query?: Omit<SearchQuery<F, R>, "count" | "start"> & {
|
|
701
|
+
searchAll<const E extends Expand<R> = EmptyReferences, const I extends ImageOption<F> = EmptyImages>(query?: Omit<Without<SearchQuery<F, R>, Unsupported>, "count" | "start"> & {
|
|
648
702
|
expand?: E;
|
|
649
703
|
image?: I;
|
|
650
704
|
}): AsyncIterable<ImageReadRecord<ExpandedReadRecord<F, R, E>, I>>;
|
|
@@ -658,9 +712,9 @@ type Resource<F extends FieldCatalog, Req extends keyof F, R extends ReferenceMa
|
|
|
658
712
|
image?: I;
|
|
659
713
|
}): Promise<ImageReadRecord<ExpandedReadRecord<F, R, E>, I> | undefined>;
|
|
660
714
|
/** Create one record; resolves to the newly assigned id. */
|
|
661
|
-
create(input: CreateInput<F, Req
|
|
715
|
+
create(input: Without<CreateInput<F, Req>, Extract<Bound, keyof CreateInput<F, Req>>>): Promise<number>;
|
|
662
716
|
/** Update one record by id; resolves to that id. */
|
|
663
|
-
update(id: number, input: UpdateInput<F
|
|
717
|
+
update(id: number, input: Without<UpdateInput<F>, Extract<Bound, keyof UpdateInput<F>>>): Promise<number>;
|
|
664
718
|
/**
|
|
665
719
|
* Create many records in one call (ADR-0041 / F-4). Auto-batched to ≤200 records and under the
|
|
666
720
|
* request size cap. **Not atomic** — inspect the {@link BulkWriteResult}: per-record failures are
|
|
@@ -668,14 +722,14 @@ type Resource<F extends FieldCatalog, Req extends keyof F, R extends ReferenceMa
|
|
|
668
722
|
* already-written count). Batching is non-idempotent: a full retry after a mid-run failure may
|
|
669
723
|
* duplicate creates. Empty input sends no request.
|
|
670
724
|
*/
|
|
671
|
-
createMany(inputs: CreateInput<F, Req
|
|
725
|
+
createMany(inputs: Without<CreateInput<F, Req>, Extract<Bound, keyof CreateInput<F, Req>>>[]): Promise<BulkWriteResult>;
|
|
672
726
|
/**
|
|
673
727
|
* Update many records by id in one call (ADR-0041 / F-4). Auto-batched like {@link createMany};
|
|
674
728
|
* per-record failures are returned in the {@link BulkWriteResult}, not thrown.
|
|
675
729
|
*/
|
|
676
730
|
updateMany(items: {
|
|
677
731
|
id: number;
|
|
678
|
-
fields: UpdateInput<F
|
|
732
|
+
fields: Without<UpdateInput<F>, Extract<Bound, keyof UpdateInput<F>>>;
|
|
679
733
|
}[]): Promise<BulkWriteResult>;
|
|
680
734
|
};
|
|
681
735
|
|
|
@@ -1710,6 +1764,37 @@ declare const RESOURCE_VALUES: {
|
|
|
1710
1764
|
* the accessor (`t.client` -> `"client"`), so a typo is a compile error rather than an HTTP 400.
|
|
1711
1765
|
*/
|
|
1712
1766
|
type ResourceName = keyof typeof RESOURCE_VALUES;
|
|
1767
|
+
/**
|
|
1768
|
+
* The number PORTERS knows a resource by (ADR-0079). The library takes **names** where PORTERS
|
|
1769
|
+
* takes a `resource=` parameter, but a *field value* stays the number its Data Type declares —
|
|
1770
|
+
* `Activity.P_Resource`, `Attachment.Resource`, and a `condition` on either.
|
|
1771
|
+
*
|
|
1772
|
+
* Write the name and let this do the lookup; the numbers are non-contiguous
|
|
1773
|
+
* (1/3/5/7/9/11/13/17/19/25/27), so a literal is easy to get wrong and impossible to spot.
|
|
1774
|
+
*
|
|
1775
|
+
* @example
|
|
1776
|
+
* await t.activity.create({
|
|
1777
|
+
* P_Owner: 5,
|
|
1778
|
+
* P_Title: "面談",
|
|
1779
|
+
* P_Resource: resourceValueOf("candidate"), // 1
|
|
1780
|
+
* P_ResourceId: 10001,
|
|
1781
|
+
* });
|
|
1782
|
+
*/
|
|
1783
|
+
declare const resourceValueOf: (name: ResourceName) => number;
|
|
1784
|
+
/**
|
|
1785
|
+
* The name for a resource number (ADR-0079) — the other direction of {@link resourceValueOf}.
|
|
1786
|
+
* Use it to read a value PORTERS returned: `Activity.P_Resource`, `Field.P_ResourceType`, or a
|
|
1787
|
+
* raw value from {@link rawValue}.
|
|
1788
|
+
*
|
|
1789
|
+
* **A number PORTERS added since this version comes back as the number**, not `undefined` and not
|
|
1790
|
+
* an error. The Resource List belongs to PORTERS and grows (Contact `27` arrived that way), so a
|
|
1791
|
+
* value this library does not know is data, not a fault.
|
|
1792
|
+
*
|
|
1793
|
+
* @example
|
|
1794
|
+
* const a = await t.activity.get(1);
|
|
1795
|
+
* resourceNameOf(a?.P_Resource ?? 0); // "candidate" | … | number
|
|
1796
|
+
*/
|
|
1797
|
+
declare const resourceNameOf: (value: number) => ResourceName | number;
|
|
1713
1798
|
|
|
1714
1799
|
declare const FIELDS$6: {
|
|
1715
1800
|
readonly Id: "System[Id]";
|
|
@@ -1734,13 +1819,25 @@ declare const REQUIRED_ON_CREATE$2: readonly ["ResourceId"];
|
|
|
1734
1819
|
/** A decoded Phase entry: known aliases, each requested field `value | null`. */
|
|
1735
1820
|
type Phase = ReadRecord<typeof FIELDS$6>;
|
|
1736
1821
|
type PhasePage = ResourcePage<typeof FIELDS$6>;
|
|
1737
|
-
type
|
|
1822
|
+
type PhaseUnsupportedQuery = "keywords" | "itemstate";
|
|
1823
|
+
/**
|
|
1824
|
+
* Phase's Read query: the common vocabulary **minus `keywords` / `itemstate`**, which
|
|
1825
|
+
* `Phase - Read` does not list (ADR-0076).
|
|
1826
|
+
*/
|
|
1827
|
+
type PhaseSearchQuery = Omit<SearchQuery<typeof FIELDS$6>, PhaseUnsupportedQuery> & {
|
|
1828
|
+
[K in PhaseUnsupportedQuery]?: never;
|
|
1829
|
+
};
|
|
1738
1830
|
/** Fields for `create`: `ResourceId` required (`Id` and `Resource` are supplied for you). */
|
|
1739
1831
|
type PhaseCreateInput = CreateInput<typeof FIELDS$6, (typeof REQUIRED_ON_CREATE$2)[number]>;
|
|
1740
1832
|
/** Fields for `update`: all optional (`null` omits, `""` clears a text field). */
|
|
1741
1833
|
type PhaseUpdateInput = UpdateInput<typeof FIELDS$6>;
|
|
1742
|
-
/**
|
|
1743
|
-
|
|
1834
|
+
/**
|
|
1835
|
+
* The Phase accessor for one bound resource — the same shape as every other resource, except that
|
|
1836
|
+
* `search` / `searchAll` do not take `keywords` / `itemstate` (ADR-0076) and the write inputs do
|
|
1837
|
+
* not take `Resource`: `of()` binds it, and supplying it again could only contradict the binding
|
|
1838
|
+
* (RV-47).
|
|
1839
|
+
*/
|
|
1840
|
+
type PhaseResource = Resource<typeof FIELDS$6, (typeof REQUIRED_ON_CREATE$2)[number], EmptyReferences, PhaseUnsupportedQuery, "Resource">;
|
|
1744
1841
|
/**
|
|
1745
1842
|
* Phase is reached through the resource whose history you want (ADR-0061 案2a):
|
|
1746
1843
|
*
|
|
@@ -2208,19 +2305,22 @@ type AttachmentPage = {
|
|
|
2208
2305
|
};
|
|
2209
2306
|
type AttachmentSearchQuery = {
|
|
2210
2307
|
/**
|
|
2211
|
-
*
|
|
2212
|
-
*
|
|
2213
|
-
*
|
|
2214
|
-
* for the API-native primary-key-only response. A non-empty list is sent verbatim.
|
|
2308
|
+
* Narrow to one record's attachments — the id **within the bound resource**
|
|
2309
|
+
* (`t.attachment.of("resume")` -> a `Resume.P_Id`). Omit to read the whole resource's
|
|
2310
|
+
* attachments.
|
|
2215
2311
|
*/
|
|
2216
|
-
|
|
2217
|
-
condition?: Record<string, string>;
|
|
2312
|
+
resourceId?: number;
|
|
2218
2313
|
count?: number;
|
|
2219
2314
|
start?: number;
|
|
2220
2315
|
};
|
|
2221
|
-
/**
|
|
2316
|
+
/** A walking Read: `count` / `start` are the walk's to decide. */
|
|
2317
|
+
type AttachmentWalkQuery = Omit<AttachmentSearchQuery, "count" | "start">;
|
|
2318
|
+
/**
|
|
2319
|
+
* Fields for creating an Attachment. `content` is the Base64 file body; the resource it attaches
|
|
2320
|
+
* to comes from `of(name)` and cannot be given here (ADR-0080 / ADR-0081).
|
|
2321
|
+
*/
|
|
2222
2322
|
type AttachmentCreate = {
|
|
2223
|
-
resource
|
|
2323
|
+
/** The record's id within the bound resource. */
|
|
2224
2324
|
resourceId: number;
|
|
2225
2325
|
contentType: string;
|
|
2226
2326
|
fileName: string;
|
|
@@ -2232,8 +2332,33 @@ type AttachmentUpdate = {
|
|
|
2232
2332
|
fileName?: string;
|
|
2233
2333
|
content?: string;
|
|
2234
2334
|
};
|
|
2335
|
+
/**
|
|
2336
|
+
* Attachments are reached through the resource they belong to (ADR-0080 / ADR-0081):
|
|
2337
|
+
*
|
|
2338
|
+
* ```ts
|
|
2339
|
+
* const files = t.attachment.of("resume");
|
|
2340
|
+
* await files.search({ resourceId: 10006 }); // メタデータだけ
|
|
2341
|
+
* await files.get(900); // 本体つき
|
|
2342
|
+
* ```
|
|
2343
|
+
*
|
|
2344
|
+
* PORTERS requires `resource=` on every Attachment Read, and the same value goes into the
|
|
2345
|
+
* `<Resource>` field on write — one binding, both places, exactly like `t.phase.of(...)`.
|
|
2346
|
+
*/
|
|
2347
|
+
type AttachmentAccessor = {
|
|
2348
|
+
of(resource: ResourceName): AttachmentResource;
|
|
2349
|
+
};
|
|
2235
2350
|
type AttachmentResource = {
|
|
2236
2351
|
search(query?: AttachmentSearchQuery): Promise<AttachmentPage>;
|
|
2352
|
+
/**
|
|
2353
|
+
* Auto-paginating search: yields every matching attachment (200 per page). Metadata only —
|
|
2354
|
+
* the body stays behind {@link AttachmentResource.get} (ADR-0075), so walking every attachment
|
|
2355
|
+
* in a partition never drags the files along with it.
|
|
2356
|
+
*/
|
|
2357
|
+
searchAll(query?: AttachmentWalkQuery): AsyncIterable<Attachment>;
|
|
2358
|
+
/**
|
|
2359
|
+
* Read one attachment **with its body** (`content`). This is the only method that carries it:
|
|
2360
|
+
* one record at a time is a size PORTERS' own 10MB-per-file limit keeps readable (ADR-0075).
|
|
2361
|
+
*/
|
|
2237
2362
|
get(id: number): Promise<Attachment | undefined>;
|
|
2238
2363
|
/** Create an Attachment; resolves to the newly assigned id. */
|
|
2239
2364
|
create(input: AttachmentCreate): Promise<number>;
|
|
@@ -2336,18 +2461,33 @@ declare const FIELDS$1: {
|
|
|
2336
2461
|
/** A decoded Field definition. `P_Required`: 0 = normal, 1 = required. */
|
|
2337
2462
|
type Field = ReadRecord<typeof FIELDS$1>;
|
|
2338
2463
|
type FieldPage = ResourcePage<typeof FIELDS$1>;
|
|
2339
|
-
/** Field Read query.
|
|
2464
|
+
/** Field Read query. The resource itself is bound by `of(name)` (ADR-0080). */
|
|
2340
2465
|
type FieldSearchQuery = {
|
|
2341
|
-
resource: ResourceType;
|
|
2342
2466
|
/** -1 = all (default), 0 = unused only, 1 = in-use only. */
|
|
2343
2467
|
active?: -1 | 0 | 1;
|
|
2344
2468
|
count?: number;
|
|
2345
2469
|
start?: number;
|
|
2346
2470
|
};
|
|
2471
|
+
/** The Field accessor for one bound resource. */
|
|
2347
2472
|
type FieldResource = {
|
|
2348
|
-
search(query
|
|
2473
|
+
search(query?: FieldSearchQuery): Promise<FieldPage>;
|
|
2349
2474
|
/** Auto-paginating search: yields every field of the resource. */
|
|
2350
|
-
searchAll(query
|
|
2475
|
+
searchAll(query?: Omit<FieldSearchQuery, "count" | "start">): AsyncIterable<Field>;
|
|
2476
|
+
};
|
|
2477
|
+
/**
|
|
2478
|
+
* Field Read is reached through the resource whose catalog you want (ADR-0080):
|
|
2479
|
+
*
|
|
2480
|
+
* ```ts
|
|
2481
|
+
* const fields = t.field.of("candidate");
|
|
2482
|
+
* for await (const f of fields.searchAll({ active: 1 })) console.log(f.P_Alias);
|
|
2483
|
+
* ```
|
|
2484
|
+
*
|
|
2485
|
+
* The name is the accessor's own spelling ({@link ResourceName}) — `of(1)` and `of("candidat")`
|
|
2486
|
+
* are compile errors. PORTERS requires the `resource=` parameter on every Field Read, so binding
|
|
2487
|
+
* it once means it cannot be forgotten or contradicted.
|
|
2488
|
+
*/
|
|
2489
|
+
type FieldAccessor = {
|
|
2490
|
+
of(resource: ResourceType): FieldResource;
|
|
2351
2491
|
};
|
|
2352
2492
|
|
|
2353
2493
|
declare const FIELDS: {
|
|
@@ -2453,7 +2593,9 @@ declare const defineFields: <D extends FieldDecls>(decls: D) => DefinedFields<De
|
|
|
2453
2593
|
*/
|
|
2454
2594
|
type FieldCatalogSource = {
|
|
2455
2595
|
readonly field: {
|
|
2456
|
-
|
|
2596
|
+
of(resource: CustomFieldResource): {
|
|
2597
|
+
searchAll(query?: Omit<FieldSearchQuery, "count" | "start">): AsyncIterable<Field>;
|
|
2598
|
+
};
|
|
2457
2599
|
};
|
|
2458
2600
|
};
|
|
2459
2601
|
/** Why a tenant custom field cannot be expressed as a declaration (ADR-0069 論点4). */
|
|
@@ -2653,15 +2795,24 @@ declare const assertFieldsMatch: (report: FieldVerification) => void;
|
|
|
2653
2795
|
/** Options for constructing a {@link PortersClient}. `C` is inferred from `fields` (ADR-0023). */
|
|
2654
2796
|
type PortersClientOptions<C extends DeclaredCatalogs = EmptyCatalog> = {
|
|
2655
2797
|
/**
|
|
2656
|
-
* API
|
|
2657
|
-
* (A representative value lives in docs/usage/reference.)
|
|
2798
|
+
* API server name. Required and supplied via `PORTERS_HOST` — never hard-code it.
|
|
2799
|
+
* (A representative value lives in docs/usage/reference.)
|
|
2658
2800
|
*
|
|
2659
|
-
* The **
|
|
2660
|
-
*
|
|
2661
|
-
*
|
|
2662
|
-
*
|
|
2801
|
+
* The **name and nothing else**: no port, no scheme, no path, no userinfo, no whitespace
|
|
2802
|
+
* (ADR-0078). PORTERS issues a server name and speaks https, so a port never arrives with it;
|
|
2803
|
+
* when you need one (a local fake, a proxy) pass {@link PortersClientOptions.port}. A value
|
|
2804
|
+
* like `https://xxxxx.example.com` or `a.test:4010` is rejected at construction with a
|
|
2805
|
+
* {@link PortersConfigError} rather than silently addressing something else (ADR-0048).
|
|
2806
|
+
* Write a non-ASCII name in punycode; bracket an IPv6 address (`[::1]`).
|
|
2807
|
+
*/
|
|
2808
|
+
hostname: string;
|
|
2809
|
+
/**
|
|
2810
|
+
* Port of the access point (ADR-0078). **Omit it for PORTERS** — the contract gives you a name
|
|
2811
|
+
* and the scheme decides the port. Set it only for a local fake server or a proxy:
|
|
2812
|
+
* `{ hostname: "127.0.0.1", port: 4010, scheme: "http" }`. An integer 1–65535; anything else
|
|
2813
|
+
* is rejected at construction.
|
|
2663
2814
|
*/
|
|
2664
|
-
|
|
2815
|
+
port?: number;
|
|
2665
2816
|
/**
|
|
2666
2817
|
* URL scheme of the access point (ADR-0047). Defaults to `"https"`. Set `"http"` only for a
|
|
2667
2818
|
* local fake server or a trusted tunnel: it sends every request — the OAuth token header
|
|
@@ -2680,7 +2831,7 @@ type PortersClientOptions<C extends DeclaredCatalogs = EmptyCatalog> = {
|
|
|
2680
2831
|
/** Injectable HTTP transport; defaults to a fetch-based transport. */
|
|
2681
2832
|
transport?: Transport;
|
|
2682
2833
|
/**
|
|
2683
|
-
* Rate-limit self-restraint (ADR-0073). Defaults to the **process-wide bucket for this
|
|
2834
|
+
* Rate-limit self-restraint (ADR-0073). Defaults to the **process-wide bucket for this destination**,
|
|
2684
2835
|
* so several clients aimed at the same PORTERS add up to one limit instead of one each.
|
|
2685
2836
|
*
|
|
2686
2837
|
* Pass your own to opt out of that sharing, to run different limits, or to coordinate across
|
|
@@ -2719,9 +2870,19 @@ type TenantScope<C extends DeclaredCatalogs = EmptyCatalog> = {
|
|
|
2719
2870
|
readonly phase: PhaseAccessor;
|
|
2720
2871
|
readonly process: ProcessResource<CustomFor<C, "process">>;
|
|
2721
2872
|
readonly resume: ResumeResource<CustomFor<C, "resume">>;
|
|
2722
|
-
|
|
2873
|
+
/**
|
|
2874
|
+
* Attachments, reached through the resource they belong to: `t.attachment.of("resume")`.
|
|
2875
|
+
* PORTERS requires that `resource` on every Attachment Read, and the same value fills the
|
|
2876
|
+
* `<Resource>` field on write, so it is bound once (ADR-0080 / ADR-0081).
|
|
2877
|
+
*/
|
|
2878
|
+
readonly attachment: AttachmentAccessor;
|
|
2723
2879
|
readonly user: UserResource;
|
|
2724
|
-
|
|
2880
|
+
/**
|
|
2881
|
+
* Field master Read, reached through the resource whose catalog you want:
|
|
2882
|
+
* `t.field.of("candidate")`. PORTERS requires `resource=` on every Field Read, so it is bound
|
|
2883
|
+
* once (ADR-0080).
|
|
2884
|
+
*/
|
|
2885
|
+
readonly field: FieldAccessor;
|
|
2725
2886
|
readonly option: OptionResource;
|
|
2726
2887
|
};
|
|
2727
2888
|
/**
|
|
@@ -2733,7 +2894,7 @@ type TenantScope<C extends DeclaredCatalogs = EmptyCatalog> = {
|
|
|
2733
2894
|
* explicitly, exactly once, so "unbound" is not a state this API can be in.
|
|
2734
2895
|
*
|
|
2735
2896
|
* @example
|
|
2736
|
-
* const porters = new PortersClient({
|
|
2897
|
+
* const porters = new PortersClient({ hostname, appId, appSecret });
|
|
2737
2898
|
* await porters.auth.ensureAuthenticated(); // App-level
|
|
2738
2899
|
* const t = porters.tenant(123); // bind the partition once
|
|
2739
2900
|
* const page = await t.candidate.search();
|
|
@@ -2763,8 +2924,10 @@ declare class PortersClient<C extends DeclaredCatalogs = EmptyCatalog> {
|
|
|
2763
2924
|
*/
|
|
2764
2925
|
readonly tenant: (id: PartitionId) => TenantScope<C>;
|
|
2765
2926
|
constructor(options: PortersClientOptions<C>);
|
|
2766
|
-
/** The configured API
|
|
2767
|
-
get
|
|
2927
|
+
/** The configured API server name (no port — see {@link PortersClient.port}). */
|
|
2928
|
+
get hostname(): string;
|
|
2929
|
+
/** The configured port, or `undefined` when the scheme's own port is used (ADR-0078). */
|
|
2930
|
+
get port(): number | undefined;
|
|
2768
2931
|
}
|
|
2769
2932
|
|
|
2770
2933
|
/** Cross-cutting classification shared by every PORTERS error. */
|
|
@@ -2827,4 +2990,4 @@ declare const bytesToBase64: (bytes: Uint8Array) => string;
|
|
|
2827
2990
|
/** Decode a Base64 string back to raw bytes. */
|
|
2828
2991
|
declare const base64ToBytes: (b64: string) => Uint8Array;
|
|
2829
2992
|
|
|
2830
|
-
export { type Activity, type ActivityCreateInput, type ActivityPage, type ActivityResource, type ActivitySearchQuery, type ActivityUpdateInput, type Attachment, type AttachmentCreate, type AttachmentPage, type AttachmentResource, type AttachmentSearchQuery, type AttachmentUpdate, type AuthApi, type AuthorizationUrlOptions, type BulkWriteResult, type BulkWriteResultItem, type Candidate, type CandidateCreateInput, type CandidatePage, type CandidateResource, type CandidateSearchQuery, type CandidateUpdateInput, type Client, type ClientCreateInput, type ClientPage, type ClientResource, type ClientSearchQuery, type ClientUpdateInput, type Condition, type Contact, type ContactCreateInput, type ContactPage, type ContactResource, type ContactSearchQuery, type ContactUpdateInput, type Contract, type ContractCreateInput, type ContractPage, type ContractResource, type ContractSearchQuery, type ContractUpdateInput, type CustomDataType, type CustomFieldResource, type CustomFor, type DeclaredCatalogs, type DefinedFields, type DepartmentRef, type ErrorCategory, type Expand, type ExpandedReadRecord, type Field, type FieldBuilder, type FieldCatalogSource, type FieldDecls, type FieldDef, type FieldPage, type FieldResource, type FieldSearchQuery, type FieldTypeMismatch, type FieldValue, type FieldVerification, type GenerateFieldDeclsOptions, type GetAccessTokenOptions, type ImageContentType, type ImageOption, type ImageReadRecord, type ImageSelectedValue, type ImageSubField, type ImageValue, type ImageWriteValue, type ItemState, type Job, type JobCreateInput, type JobPage, type JobResource, type JobSearchQuery, type JobUpdateInput, type LinkValue, type MissingField, type MockHandler, type MockReply, type MockTransportOptions, type Opportunity, type OpportunityCreateInput, type OpportunityPage, type OpportunityResource, type OpportunitySearchQuery, type OpportunityUpdateInput, type Option, type OptionResource, type OptionSearchQuery, type Order, type Partition, type PartitionId, type PartitionPage, type PartitionResource, type PartitionSearchQuery, type Phase, type PhaseAccessor, type PhaseCreateInput, type PhasePage, type PhaseResource, type PhaseSearchQuery, type PhaseUpdateInput, PortersAuthError, PortersClient, type PortersClientOptions, PortersConfigError, PortersError, type PortersErrorContext, type PortersErrorOptions, PortersNetworkError, PortersResourceError, type Process, type ProcessCreateInput, type ProcessPage, type ProcessResource, type ProcessSearchQuery, type ProcessUpdateInput, type ReadCustomCatalogOptions, type ReadFieldAlias, type Recruiter, type RecruiterCreateInput, type RecruiterPage, type RecruiterResource, type RecruiterSearchQuery, type RecruiterUpdateInput, type ReferenceMap, type ReferenceRecord, type ResourceName, type ResourcePageOf, type ResourceType, type Resume, type ResumeCreateInput, type ResumePage, type ResumeResource, type ResumeSearchQuery, type ResumeUpdateInput, type RevokeUrlOptions, type Sales, type SalesCreateInput, type SalesPage, type SalesResource, type SalesSearchQuery, type SalesUpdateInput, type Scheme, type Scope, type SearchQuery, type StoredTokens, type TenantCustomCatalog, type TenantScope, type Throttle, type ThrottleOptions, type TokenProvider, type TokenStore, type Transport, type TransportRequest, type TransportResponse, type UndeclarableField, type UndeclarableReason, type UndeclarableTenantField, type UndeclaredField, type UnverifiableResource, type User, type UserPage, type UserRef, type UserResource, type UserSearchQuery, type VerifyFieldsOptions, assertFieldsMatch, base64ToBytes, bytesToBase64, createMockTransport, createThrottle, defineFields, generateFieldDecls, rawValue, readCustomCatalog, verifyFields };
|
|
2993
|
+
export { type Activity, type ActivityCreateInput, type ActivityPage, type ActivityResource, type ActivitySearchQuery, type ActivityUpdateInput, type Attachment, type AttachmentAccessor, type AttachmentCreate, type AttachmentPage, type AttachmentResource, type AttachmentSearchQuery, type AttachmentUpdate, type AttachmentWalkQuery, type AuthApi, type AuthorizationUrlOptions, type BulkWriteResult, type BulkWriteResultItem, type Candidate, type CandidateCreateInput, type CandidatePage, type CandidateResource, type CandidateSearchQuery, type CandidateUpdateInput, type Client, type ClientCreateInput, type ClientPage, type ClientResource, type ClientSearchQuery, type ClientUpdateInput, type Condition, type Contact, type ContactCreateInput, type ContactPage, type ContactResource, type ContactSearchQuery, type ContactUpdateInput, type Contract, type ContractCreateInput, type ContractPage, type ContractResource, type ContractSearchQuery, type ContractUpdateInput, type CustomDataType, type CustomFieldResource, type CustomFor, type DeclaredCatalogs, type DefinedFields, type DepartmentRef, type ErrorCategory, type Expand, type ExpandedReadRecord, type FetchTransportOptions, type Field, type FieldAccessor, type FieldBuilder, type FieldCatalogSource, type FieldDecls, type FieldDef, type FieldPage, type FieldResource, type FieldSearchQuery, type FieldTypeMismatch, type FieldValue, type FieldVerification, type GenerateFieldDeclsOptions, type GetAccessTokenOptions, type ImageContentType, type ImageOption, type ImageReadRecord, type ImageSelectedValue, type ImageSubField, type ImageValue, type ImageWriteValue, type ItemState, type Job, type JobCreateInput, type JobPage, type JobResource, type JobSearchQuery, type JobUpdateInput, type LinkValue, type MissingField, type MockHandler, type MockReply, type MockTransportOptions, type Opportunity, type OpportunityCreateInput, type OpportunityPage, type OpportunityResource, type OpportunitySearchQuery, type OpportunityUpdateInput, type Option, type OptionResource, type OptionSearchQuery, type Order, type Partition, type PartitionId, type PartitionPage, type PartitionResource, type PartitionSearchQuery, type Phase, type PhaseAccessor, type PhaseCreateInput, type PhasePage, type PhaseResource, type PhaseSearchQuery, type PhaseUpdateInput, PortersAuthError, PortersClient, type PortersClientOptions, PortersConfigError, PortersError, type PortersErrorContext, type PortersErrorOptions, PortersNetworkError, PortersResourceError, type Process, type ProcessCreateInput, type ProcessPage, type ProcessResource, type ProcessSearchQuery, type ProcessUpdateInput, type ReadCustomCatalogOptions, type ReadFieldAlias, type Recruiter, type RecruiterCreateInput, type RecruiterPage, type RecruiterResource, type RecruiterSearchQuery, type RecruiterUpdateInput, type ReferenceMap, type ReferenceRecord, type ResourceName, type ResourcePageOf, type ResourceType, type Resume, type ResumeCreateInput, type ResumePage, type ResumeResource, type ResumeSearchQuery, type ResumeUpdateInput, type RevokeUrlOptions, type Sales, type SalesCreateInput, type SalesPage, type SalesResource, type SalesSearchQuery, type SalesUpdateInput, type Scheme, type Scope, type SearchQuery, type StoredTokens, type TenantCustomCatalog, type TenantScope, type Throttle, type ThrottleOptions, type TokenProvider, type TokenStore, type Transport, type TransportRequest, type TransportResponse, type UndeclarableField, type UndeclarableReason, type UndeclarableTenantField, type UndeclaredField, type UnverifiableResource, type User, type UserPage, type UserRef, type UserResource, type UserSearchQuery, type VerifyFieldsOptions, assertFieldsMatch, base64ToBytes, bytesToBase64, createFetchTransport, createMockTransport, createThrottle, defineFields, generateFieldDecls, rawValue, readCustomCatalog, resourceNameOf, resourceValueOf, verifyFields };
|