@joymerrevent/porters-connect 0.14.0 → 0.15.1
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 +129 -8
- 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 +12 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,116 @@
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.15.1] - 2026-09-13
|
|
9
|
+
|
|
10
|
+
**開発・CI まわりだけの版**です。**公開されるパッケージの中身(`dist`)は 0.15.0 と同一**で、
|
|
11
|
+
公開 API・型・挙動に変更はありません(既存コードはそのまま動きます)。
|
|
12
|
+
|
|
13
|
+
### Security
|
|
14
|
+
|
|
15
|
+
- **開発用依存の既知脆弱性 5 件を解消しました**。いずれもビルド・テスト用ツールの推移依存で、
|
|
16
|
+
**利用者の実行時には入りません**(`dependencies` は `fast-xml-parser` のみ)。
|
|
17
|
+
依存の解決を `pnpm.overrides` で固定しています。
|
|
18
|
+
|
|
19
|
+
| パッケージ | 経路 | Advisory |
|
|
20
|
+
| ----------------- | --------------------------------------------- | ------------------------------------------------------- |
|
|
21
|
+
| `brace-expansion` | `@stryker-mutator/core` > `minimatch` | [GHSA-mh99-v99m-4gvg][gh1] / [GHSA-rgw5-rvv9-x895][gh2] |
|
|
22
|
+
| `smol-toml` | `markdownlint-cli2` | [GHSA-7w5x-hrqm-74c2][gh5] |
|
|
23
|
+
| `qs` | `@stryker-mutator/core` > `typed-rest-client` | [GHSA-x5fp-wj9c-mxmx][gh3] / [GHSA-4mjr-xmp4-gh2g][gh4] |
|
|
24
|
+
|
|
25
|
+
- **GitHub Actions の書き込み権限を job 単位に絞りました**。タグ作成ワークフローの既定を
|
|
26
|
+
読み取りのみにし、書き込みは実際に必要な job にだけ与えます。ワークフローが行える操作の範囲は
|
|
27
|
+
変わりません(最小権限の原則に寄せた整理です)。
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- **往復・エスケープ・分割の不変条件を property-based テストで検査するようになりました**
|
|
32
|
+
([fast-check][fastcheck])。代表値を 1 点ずつ確かめる形では境界の抜けが見えないため、
|
|
33
|
+
値を機械に選ばせて不変条件そのものを検査します。対象は 3 つです。
|
|
34
|
+
|
|
35
|
+
- 日時: PORTERS 形式 ⇄ ISO 8601 (UTC) の往復と、オフセット表記によらない UTC 正規化
|
|
36
|
+
- Write XML: エスケープ後に生の `&` `<` `>` が残らないこと、書いて読むと元の値に戻ること
|
|
37
|
+
- bulk write: 200 件と約 15000 文字の 2 つの上限を、どの入力でも同時に満たすこと
|
|
38
|
+
|
|
39
|
+
- **生成 API リファレンスの「Defined in」表記を整理しました**。継承元が依存側にある記号
|
|
40
|
+
(`Error.message` など)のパスから pnpm ストアの版つきディレクトリを落とし、
|
|
41
|
+
`@types/node/globals.d.ts:67` の形にしています。表示されるメンバーは変わりません。
|
|
42
|
+
|
|
43
|
+
## [0.15.0] - 2026-09-13
|
|
44
|
+
|
|
45
|
+
**宣言と実物のズレを黙って飲み込まなくなった版**です。**破壊的変更**(読み取りの型不一致が
|
|
46
|
+
`null` ではなくエラーになる)と、**既定の挙動変更**(スロットルの共有単位)を含みます。
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- **テナントの項目と宣言を突き合わせる 4 つの API**([ADR-0069][adr69])。いずれも opt-in で、
|
|
51
|
+
呼ばなければ既存の挙動は変わりません(`field_r` スコープが必要です)。
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
const report = await verifyFields(porters.tenant(1), myFields);
|
|
55
|
+
if (!report.ok) logger.warn({ report }, "宣言がテナントと合っていません");
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- `readCustomCatalog(tenant, resource)` — カスタム項目を「alias → Data Type」で返します
|
|
59
|
+
- `verifyFields(tenant, fields)` — 宣言と実物を 5 区分で突き合わせます(**投げません**)
|
|
60
|
+
- `assertFieldsMatch(report)` — 落としたい運用のための 1 行
|
|
61
|
+
- `generateFieldDecls(tenant, resources)` — `defineFields` の呼び出しをソース文字列で生成します
|
|
62
|
+
|
|
63
|
+
- **Field Read で Process の項目カタログを読めます**(RV-37)。`t.field.search({ resource: "process" })`
|
|
64
|
+
がこれまで型エラーで書けなかったのは、同じ事実の対応表が 2 つあり片方から抜けていたためで、
|
|
65
|
+
判断ではなく書き落としでした。`ResourceType` に `"process"` が増える**拡張**です。
|
|
66
|
+
|
|
67
|
+
- **スロットルを差し替えられるようになりました**([ADR-0073][adr73])。`createThrottle` /
|
|
68
|
+
`Throttle` / `ThrottleOptions` / `PortersClientOptions.throttle` を公開しています。
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
// バッチには控えめな枠を割り当てる
|
|
72
|
+
const porters = new PortersClient({
|
|
73
|
+
host,
|
|
74
|
+
appId,
|
|
75
|
+
appSecret,
|
|
76
|
+
throttle: createThrottle({ readPerMin: 500 }),
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`Throttle` は `take(write: boolean): Promise<void>` の 1 メソッドなので、Redis などに載せれば
|
|
81
|
+
**プロセスを跨いだ協調**も書けます。ライブラリはそこまでやりません(月次の累積管理と同じ線引き)。
|
|
82
|
+
|
|
83
|
+
- **公開 API の全記号のリファレンス**を `docs/usage/api/` に用意しました([ADR-0068][adr68])。
|
|
84
|
+
JSDoc から生成した 179 ページで、生成漏れは CI が落とします。パッケージの中身は変わりません。
|
|
85
|
+
|
|
86
|
+
### Changed
|
|
87
|
+
|
|
88
|
+
- **(破壊的)宣言型と実データの形が食い違うと、`null` ではなくエラーになります**(RV-36)。
|
|
89
|
+
実物が Option の項目を `f.singlelineText()` と宣言していた場合、これまでは読み取りが黙って
|
|
90
|
+
`null` を返し、「その項目は空だった」と区別が付きませんでした。いまは
|
|
91
|
+
`PortersResourceError`(`category: "validation"`)で**項目名つきに**失敗します。
|
|
92
|
+
|
|
93
|
+
判定は**形の食い違いだけ**です(スカラが来るべき所に入れ子、またはその逆)。それより細かい違いは
|
|
94
|
+
許容して `null` のままにしてあります — 弾くと偽の警報になるためです。
|
|
95
|
+
宣言が正しいかを**事前に**確かめたいなら、上記の `verifyFields` を使ってください。
|
|
96
|
+
|
|
97
|
+
- **(挙動変更)スロットルがクライアントごとではなく、ホストごとの共有になりました**
|
|
98
|
+
([ADR-0073][adr73]・RV-43)。1 分あたりの上限を自制するバケットはこれまで `PortersClient` ごとに
|
|
99
|
+
作られており、**ガイドが勧めるとおりテナント別にクライアントを立てると、その数だけ上限が並んで**
|
|
100
|
+
いました。PORTERS から見えるのは合計なので、50 テナントなら上限の 50 倍まで出せた計算です。
|
|
101
|
+
|
|
102
|
+
同じホストを向くクライアントは、同じバケットを通るようになりました。**以前より待つことがあります**
|
|
103
|
+
が、それが本来の上限です。共有から降りたいときは上記の `throttle` を渡してください。
|
|
104
|
+
ローカルのフェイクサーバーは別ホストなので、本番向けの枠を食いません。
|
|
105
|
+
|
|
106
|
+
- **日時の変換失敗が `PortersError` の系統になりました**(RV-36)。以前は素の `RangeError` が飛び、
|
|
107
|
+
ガイドが勧める `instanceof PortersError` の分岐から漏れていました。読み(応答が引き金)は
|
|
108
|
+
`PortersResourceError`、書き・`condition`(渡した値が引き金)は `PortersConfigError` で、
|
|
109
|
+
`category` はどちらも `validation` です。
|
|
110
|
+
|
|
111
|
+
### 移行
|
|
112
|
+
|
|
113
|
+
- **型不一致でエラーが出るようになった場合、宣言かテナントのどちらかが実際に間違っています。**
|
|
114
|
+
`verifyFields` を起動時に 1 回呼べば、どの項目がどうズレているかが分かります。
|
|
115
|
+
- **スロットル**は設定変更不要です。同じホストへ複数クライアントを立てていた場合のみ、
|
|
116
|
+
スループットが上限内に収まります(それが正しい状態です)。
|
|
117
|
+
|
|
8
118
|
## [0.14.0] - 2026-09-09
|
|
9
119
|
|
|
10
120
|
**PORTERS の Data Type 17 種すべてを型で表せるようになった版**です([ADR-0060][adr60] の完了条件 D3)。
|
|
@@ -538,7 +648,7 @@
|
|
|
538
648
|
- `exchangeAuthorizationCode(code)` — redirect の `?code=` をトークンに交換し内部保存(成功時 `void`・失敗時 throw)。
|
|
539
649
|
- `clearTokens()` — ローカルの cache + トークンストアを破棄。
|
|
540
650
|
- `ensureAuthenticated()` / `getToken()` — トークンのウォームアップ/取得(Refresh Token は返さない)。カスタム auth ストラテジでも動作。
|
|
541
|
-
- カスタムストラテジ下では credential 依存メソッドが `PortersConfigError`。新規 export 型 `AuthApi` / `AuthorizationUrlOptions` / `RevokeUrlOptions`。利用手順は [docs/
|
|
651
|
+
- カスタムストラテジ下では credential 依存メソッドが `PortersConfigError`。新規 export 型 `AuthApi` / `AuthorizationUrlOptions` / `RevokeUrlOptions`。利用手順は [docs/howto/authenticate.md][oauth-guide]。
|
|
542
652
|
|
|
543
653
|
### Fixed
|
|
544
654
|
|
|
@@ -598,10 +708,10 @@
|
|
|
598
708
|
- **日時**: ISO 8601(UTC)⇄ PORTERS 形式の正規化(業務タイムゾーン変換はしない)。
|
|
599
709
|
- **動的カスタム項目**: `defineFields` でテナント固有の `U_` / `A_` を宣言し、型安全に read / write(ADR-0023)。
|
|
600
710
|
- **評価用サンドボックス**: 公開モック `createMockTransport` で契約なし・オフライン動作(ADR-0024)。
|
|
601
|
-
- **エラー対処ガイド**: [docs/
|
|
711
|
+
- **エラー対処ガイド**: [docs/howto/handle-failures.md][guide](症状別早見表+2 系統のコード対応表)。
|
|
602
712
|
- **配布**: ESM / Node.js 18+ / 型定義同梱 / MIT。`X-P-ConnectAPI-Version: 2` を既定送信(PORTERS 8.x・9.x 想定)。
|
|
603
713
|
|
|
604
|
-
[guide]: docs/
|
|
714
|
+
[guide]: docs/usage/howto/handle-failures.md
|
|
605
715
|
[adr44]: docs/adr/0044-http-status-handling.md
|
|
606
716
|
[adr45]: docs/adr/0045-write-response-root-code.md
|
|
607
717
|
[adr46]: docs/adr/0046-guard-error-contract.md
|
|
@@ -610,12 +720,12 @@
|
|
|
610
720
|
[adr50]: docs/adr/0050-auth-http-status-handling.md
|
|
611
721
|
[adr51]: docs/adr/0051-read-envelope-identification.md
|
|
612
722
|
[adr47]: docs/adr/0047-access-point-scheme.md
|
|
613
|
-
[oauth-guide]: docs/
|
|
723
|
+
[oauth-guide]: docs/usage/howto/authenticate.md
|
|
614
724
|
[adr19]: docs/adr/0019-static-resource-types.md
|
|
615
725
|
[adr20]: docs/adr/0020-read-field-default.md
|
|
616
726
|
[adr35]: docs/adr/0035-usage-documentation-structure.md
|
|
617
|
-
[custom-fields-guide]: docs/
|
|
618
|
-
[read-query-guide]: docs/
|
|
727
|
+
[custom-fields-guide]: docs/usage/howto/custom-fields.md
|
|
728
|
+
[read-query-guide]: docs/usage/howto/search-records.md
|
|
619
729
|
[adr55]: docs/adr/0055-partition-binding-guard.md
|
|
620
730
|
[adr56]: docs/adr/0056-deleted-flag-typing.md
|
|
621
731
|
[adr57]: docs/adr/0057-itemstate-existing-explicit.md
|
|
@@ -627,11 +737,16 @@
|
|
|
627
737
|
[adr63]: docs/adr/0063-idempotency-guard-scope.md
|
|
628
738
|
[rv22]: docs/reviews/rv/0022-ratelimit-create-no-retry.md
|
|
629
739
|
[rv32]: docs/reviews/rv/0032-searchall-query-mutation.md
|
|
630
|
-
[write-constraints]: docs/
|
|
740
|
+
[write-constraints]: docs/usage/concepts/limits.md
|
|
741
|
+
[adr68]: docs/adr/0068-api-reference-tooling.md
|
|
742
|
+
[adr69]: docs/adr/0069-tenant-field-catalog-tooling.md
|
|
743
|
+
[adr73]: docs/adr/0073-throttle-sharing.md
|
|
631
744
|
[lv]: docs/live-verification.md
|
|
632
745
|
[kac]: https://keepachangelog.com/en/1.1.0/
|
|
633
746
|
[semver]: https://semver.org/
|
|
634
|
-
[unreleased]: https://github.com/Joymerrevent/porters-connect/compare/v0.
|
|
747
|
+
[unreleased]: https://github.com/Joymerrevent/porters-connect/compare/v0.15.1...HEAD
|
|
748
|
+
[0.15.1]: https://github.com/Joymerrevent/porters-connect/compare/v0.15.0...v0.15.1
|
|
749
|
+
[0.15.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.14.0...v0.15.0
|
|
635
750
|
[0.14.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.13.0...v0.14.0
|
|
636
751
|
[0.13.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.12.1...v0.13.0
|
|
637
752
|
[0.12.1]: https://github.com/Joymerrevent/porters-connect/compare/v0.12.0...v0.12.1
|
|
@@ -651,3 +766,9 @@
|
|
|
651
766
|
[0.2.0]: https://github.com/Joymerrevent/porters-connect/compare/v0.1.1...v0.2.0
|
|
652
767
|
[0.1.1]: https://github.com/Joymerrevent/porters-connect/compare/v0.1.0...v0.1.1
|
|
653
768
|
[0.1.0]: https://github.com/Joymerrevent/porters-connect/releases/tag/v0.1.0
|
|
769
|
+
[gh1]: https://github.com/advisories/GHSA-mh99-v99m-4gvg
|
|
770
|
+
[gh2]: https://github.com/advisories/GHSA-rgw5-rvv9-x895
|
|
771
|
+
[gh3]: https://github.com/advisories/GHSA-x5fp-wj9c-mxmx
|
|
772
|
+
[gh4]: https://github.com/advisories/GHSA-4mjr-xmp4-gh2g
|
|
773
|
+
[gh5]: https://github.com/advisories/GHSA-7w5x-hrqm-74c2
|
|
774
|
+
[fastcheck]: https://github.com/dubzzz/fast-check
|