@joymerrevent/porters-connect 0.14.0 → 0.15.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 +86 -7
- package/README.md +76 -403
- package/dist/index.d.ts +245 -22
- package/dist/index.js +435 -72
- package/dist/index.js.map +1 -1
- package/package.json +8 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,81 @@
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.15.0] - 2026-09-13
|
|
9
|
+
|
|
10
|
+
**宣言と実物のズレを黙って飲み込まなくなった版**です。**破壊的変更**(読み取りの型不一致が
|
|
11
|
+
`null` ではなくエラーになる)と、**既定の挙動変更**(スロットルの共有単位)を含みます。
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **テナントの項目と宣言を突き合わせる 4 つの API**([ADR-0069][adr69])。いずれも opt-in で、
|
|
16
|
+
呼ばなければ既存の挙動は変わりません(`field_r` スコープが必要です)。
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
const report = await verifyFields(porters.tenant(1), myFields);
|
|
20
|
+
if (!report.ok) logger.warn({ report }, "宣言がテナントと合っていません");
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- `readCustomCatalog(tenant, resource)` — カスタム項目を「alias → Data Type」で返します
|
|
24
|
+
- `verifyFields(tenant, fields)` — 宣言と実物を 5 区分で突き合わせます(**投げません**)
|
|
25
|
+
- `assertFieldsMatch(report)` — 落としたい運用のための 1 行
|
|
26
|
+
- `generateFieldDecls(tenant, resources)` — `defineFields` の呼び出しをソース文字列で生成します
|
|
27
|
+
|
|
28
|
+
- **Field Read で Process の項目カタログを読めます**(RV-37)。`t.field.search({ resource: "process" })`
|
|
29
|
+
がこれまで型エラーで書けなかったのは、同じ事実の対応表が 2 つあり片方から抜けていたためで、
|
|
30
|
+
判断ではなく書き落としでした。`ResourceType` に `"process"` が増える**拡張**です。
|
|
31
|
+
|
|
32
|
+
- **スロットルを差し替えられるようになりました**([ADR-0073][adr73])。`createThrottle` /
|
|
33
|
+
`Throttle` / `ThrottleOptions` / `PortersClientOptions.throttle` を公開しています。
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
// バッチには控えめな枠を割り当てる
|
|
37
|
+
const porters = new PortersClient({
|
|
38
|
+
host,
|
|
39
|
+
appId,
|
|
40
|
+
appSecret,
|
|
41
|
+
throttle: createThrottle({ readPerMin: 500 }),
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`Throttle` は `take(write: boolean): Promise<void>` の 1 メソッドなので、Redis などに載せれば
|
|
46
|
+
**プロセスを跨いだ協調**も書けます。ライブラリはそこまでやりません(月次の累積管理と同じ線引き)。
|
|
47
|
+
|
|
48
|
+
- **公開 API の全記号のリファレンス**を `docs/usage/api/` に用意しました([ADR-0068][adr68])。
|
|
49
|
+
JSDoc から生成した 179 ページで、生成漏れは CI が落とします。パッケージの中身は変わりません。
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- **(破壊的)宣言型と実データの形が食い違うと、`null` ではなくエラーになります**(RV-36)。
|
|
54
|
+
実物が Option の項目を `f.singlelineText()` と宣言していた場合、これまでは読み取りが黙って
|
|
55
|
+
`null` を返し、「その項目は空だった」と区別が付きませんでした。いまは
|
|
56
|
+
`PortersResourceError`(`category: "validation"`)で**項目名つきに**失敗します。
|
|
57
|
+
|
|
58
|
+
判定は**形の食い違いだけ**です(スカラが来るべき所に入れ子、またはその逆)。それより細かい違いは
|
|
59
|
+
許容して `null` のままにしてあります — 弾くと偽の警報になるためです。
|
|
60
|
+
宣言が正しいかを**事前に**確かめたいなら、上記の `verifyFields` を使ってください。
|
|
61
|
+
|
|
62
|
+
- **(挙動変更)スロットルがクライアントごとではなく、ホストごとの共有になりました**
|
|
63
|
+
([ADR-0073][adr73]・RV-43)。1 分あたりの上限を自制するバケットはこれまで `PortersClient` ごとに
|
|
64
|
+
作られており、**ガイドが勧めるとおりテナント別にクライアントを立てると、その数だけ上限が並んで**
|
|
65
|
+
いました。PORTERS から見えるのは合計なので、50 テナントなら上限の 50 倍まで出せた計算です。
|
|
66
|
+
|
|
67
|
+
同じホストを向くクライアントは、同じバケットを通るようになりました。**以前より待つことがあります**
|
|
68
|
+
が、それが本来の上限です。共有から降りたいときは上記の `throttle` を渡してください。
|
|
69
|
+
ローカルのフェイクサーバーは別ホストなので、本番向けの枠を食いません。
|
|
70
|
+
|
|
71
|
+
- **日時の変換失敗が `PortersError` の系統になりました**(RV-36)。以前は素の `RangeError` が飛び、
|
|
72
|
+
ガイドが勧める `instanceof PortersError` の分岐から漏れていました。読み(応答が引き金)は
|
|
73
|
+
`PortersResourceError`、書き・`condition`(渡した値が引き金)は `PortersConfigError` で、
|
|
74
|
+
`category` はどちらも `validation` です。
|
|
75
|
+
|
|
76
|
+
### 移行
|
|
77
|
+
|
|
78
|
+
- **型不一致でエラーが出るようになった場合、宣言かテナントのどちらかが実際に間違っています。**
|
|
79
|
+
`verifyFields` を起動時に 1 回呼べば、どの項目がどうズレているかが分かります。
|
|
80
|
+
- **スロットル**は設定変更不要です。同じホストへ複数クライアントを立てていた場合のみ、
|
|
81
|
+
スループットが上限内に収まります(それが正しい状態です)。
|
|
82
|
+
|
|
8
83
|
## [0.14.0] - 2026-09-09
|
|
9
84
|
|
|
10
85
|
**PORTERS の Data Type 17 種すべてを型で表せるようになった版**です([ADR-0060][adr60] の完了条件 D3)。
|
|
@@ -538,7 +613,7 @@
|
|
|
538
613
|
- `exchangeAuthorizationCode(code)` — redirect の `?code=` をトークンに交換し内部保存(成功時 `void`・失敗時 throw)。
|
|
539
614
|
- `clearTokens()` — ローカルの cache + トークンストアを破棄。
|
|
540
615
|
- `ensureAuthenticated()` / `getToken()` — トークンのウォームアップ/取得(Refresh Token は返さない)。カスタム auth ストラテジでも動作。
|
|
541
|
-
- カスタムストラテジ下では credential 依存メソッドが `PortersConfigError`。新規 export 型 `AuthApi` / `AuthorizationUrlOptions` / `RevokeUrlOptions`。利用手順は [docs/
|
|
616
|
+
- カスタムストラテジ下では credential 依存メソッドが `PortersConfigError`。新規 export 型 `AuthApi` / `AuthorizationUrlOptions` / `RevokeUrlOptions`。利用手順は [docs/howto/authenticate.md][oauth-guide]。
|
|
542
617
|
|
|
543
618
|
### Fixed
|
|
544
619
|
|
|
@@ -598,10 +673,10 @@
|
|
|
598
673
|
- **日時**: ISO 8601(UTC)⇄ PORTERS 形式の正規化(業務タイムゾーン変換はしない)。
|
|
599
674
|
- **動的カスタム項目**: `defineFields` でテナント固有の `U_` / `A_` を宣言し、型安全に read / write(ADR-0023)。
|
|
600
675
|
- **評価用サンドボックス**: 公開モック `createMockTransport` で契約なし・オフライン動作(ADR-0024)。
|
|
601
|
-
- **エラー対処ガイド**: [docs/
|
|
676
|
+
- **エラー対処ガイド**: [docs/howto/handle-failures.md][guide](症状別早見表+2 系統のコード対応表)。
|
|
602
677
|
- **配布**: ESM / Node.js 18+ / 型定義同梱 / MIT。`X-P-ConnectAPI-Version: 2` を既定送信(PORTERS 8.x・9.x 想定)。
|
|
603
678
|
|
|
604
|
-
[guide]: docs/
|
|
679
|
+
[guide]: docs/usage/howto/handle-failures.md
|
|
605
680
|
[adr44]: docs/adr/0044-http-status-handling.md
|
|
606
681
|
[adr45]: docs/adr/0045-write-response-root-code.md
|
|
607
682
|
[adr46]: docs/adr/0046-guard-error-contract.md
|
|
@@ -610,12 +685,12 @@
|
|
|
610
685
|
[adr50]: docs/adr/0050-auth-http-status-handling.md
|
|
611
686
|
[adr51]: docs/adr/0051-read-envelope-identification.md
|
|
612
687
|
[adr47]: docs/adr/0047-access-point-scheme.md
|
|
613
|
-
[oauth-guide]: docs/
|
|
688
|
+
[oauth-guide]: docs/usage/howto/authenticate.md
|
|
614
689
|
[adr19]: docs/adr/0019-static-resource-types.md
|
|
615
690
|
[adr20]: docs/adr/0020-read-field-default.md
|
|
616
691
|
[adr35]: docs/adr/0035-usage-documentation-structure.md
|
|
617
|
-
[custom-fields-guide]: docs/
|
|
618
|
-
[read-query-guide]: docs/
|
|
692
|
+
[custom-fields-guide]: docs/usage/howto/custom-fields.md
|
|
693
|
+
[read-query-guide]: docs/usage/howto/search-records.md
|
|
619
694
|
[adr55]: docs/adr/0055-partition-binding-guard.md
|
|
620
695
|
[adr56]: docs/adr/0056-deleted-flag-typing.md
|
|
621
696
|
[adr57]: docs/adr/0057-itemstate-existing-explicit.md
|
|
@@ -627,11 +702,15 @@
|
|
|
627
702
|
[adr63]: docs/adr/0063-idempotency-guard-scope.md
|
|
628
703
|
[rv22]: docs/reviews/rv/0022-ratelimit-create-no-retry.md
|
|
629
704
|
[rv32]: docs/reviews/rv/0032-searchall-query-mutation.md
|
|
630
|
-
[write-constraints]: docs/
|
|
705
|
+
[write-constraints]: docs/usage/concepts/limits.md
|
|
706
|
+
[adr68]: docs/adr/0068-api-reference-tooling.md
|
|
707
|
+
[adr69]: docs/adr/0069-tenant-field-catalog-tooling.md
|
|
708
|
+
[adr73]: docs/adr/0073-throttle-sharing.md
|
|
631
709
|
[lv]: docs/live-verification.md
|
|
632
710
|
[kac]: https://keepachangelog.com/en/1.1.0/
|
|
633
711
|
[semver]: https://semver.org/
|
|
634
712
|
[unreleased]: https://github.com/Joymerrevent/porters-connect/compare/v0.14.0...HEAD
|
|
713
|
+
[0.15.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.14.0...v0.15.0
|
|
635
714
|
[0.14.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.13.0...v0.14.0
|
|
636
715
|
[0.13.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.12.1...v0.13.0
|
|
637
716
|
[0.12.1]: https://github.com/Joymerrevent/porters-connect/compare/v0.12.0...v0.12.1
|