portage-ucp-bigcommerce 0.1.2 → 0.1.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -201
- data/README.md +79 -266
- data/exe/portage-ucp-bigcommerce +31 -0
- data/lib/portage/ucp/bigcommerce/adapter.rb +228 -0
- data/lib/portage/ucp/bigcommerce/client.rb +89 -0
- data/lib/portage/ucp/bigcommerce/errors.rb +23 -0
- data/lib/portage/ucp/bigcommerce/mapper.rb +191 -0
- data/lib/portage/ucp/bigcommerce/version.rb +7 -0
- data/lib/portage/ucp/bigcommerce.rb +6 -0
- metadata +14 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: abe1a96bd9cf583809c3dfd5eb83f1a17bfea79e2b59a56d3b12591f83376bc5
|
|
4
|
+
data.tar.gz: 1e8596629873156558901b60333919ea1f17a9405471f11d3e36ed6beac05692
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1746834fbc6c6ebbad41e8f21b62f4036f6c302786cea915b3a1073cd6e3794cc24b9c3ff5c69f3c8b67935a52722e9f633b0fd7113656c7101a649c6ca1da22
|
|
7
|
+
data.tar.gz: 32bc784dd25432905e9ceaadac0f8a8d436a5f2a94b4422f6fb59b85f4972b3967ddeabca0f8d9c787f287fd8015db99b4e19025bfa3829dc51cf7636e656626
|
data/CHANGELOG.md
CHANGED
|
@@ -1,203 +1,46 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- `
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
`
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
`-instagram` all bump to 0.1.1 for a standing bug, unrelated to the
|
|
48
|
-
`portage-ucp` work below and predating it: each `Mapper.product` built a
|
|
49
|
-
`Portage::Ucp::Product`/`Variant` with keywords (`price:`, `available:`)
|
|
50
|
-
`dev.ucp.shopping.catalog`'s schema-conformance work removed in favor of
|
|
51
|
-
`price_range:`/a real `variants:` array (see that work's own changelog
|
|
52
|
-
entries, back when only `portage-ucp-shopify` and `-wix` got their mappers
|
|
53
|
-
migrated) — every real `search_catalog`/`get_product` call against these
|
|
54
|
-
five adapters raised `ArgumentError: missing keyword: :price_range`. Each
|
|
55
|
-
adapter's `#search_catalog`/`#get_product` also returned a bare
|
|
56
|
-
`Array<Product>`/`Product` instead of the `CatalogSearchResult`/
|
|
57
|
-
`ProductDetail` wrapper the `Adapter` contract documents, which would have
|
|
58
|
-
failed UCP schema validation even once the first bug was fixed. Caught by
|
|
59
|
-
running the core gem's schema-validation conformance examples (added
|
|
60
|
-
earlier for the payment-enrollment slice below) against every adapter,
|
|
61
|
-
not just Shopify/Wix's specs, which asserted the same wrong shape their
|
|
62
|
-
mappers produced.
|
|
63
|
-
|
|
64
|
-
- `portage-ucp` bumps to 0.6.0 for the §22/§33-§35 payment-enrollment and
|
|
65
|
-
signature-verification slice: `PaymentEnrollmentGuard` (validates every
|
|
66
|
-
`create_payment_enrollment`/`get_payment_enrollment` response — breaking,
|
|
67
|
-
raises `InvalidPaymentEnrollmentError` on a malformed one), an AP2 mandate
|
|
68
|
-
shape (`Ap2::PaymentMandate`/`Ap2::MandateGuard`, shape-only — no
|
|
69
|
-
cryptographic verification), a `Store`/`FileStore` extraction under
|
|
70
|
-
`Support::TransactionLog`/`Support::OrderLedger` so either can be backed
|
|
71
|
-
by something other than a file, `app.portage-ucp.payment_method` /
|
|
72
|
-
`saved_address` / `shopper_data` extensions, `Dispatcher.new(journal:)`
|
|
73
|
-
wiring for the new `portage-ucp-journal` gem, RFC 9421 HTTP Message
|
|
74
|
-
Signature verification (`Security::Signature`,
|
|
75
|
-
`Rack::SignatureVerification`) for inbound requests, and
|
|
76
|
-
`Confirmer::Webhook` — an out-of-band approval path for the confirmation
|
|
77
|
-
gate (POST + poll, or a caller-supplied `wait:` callback), alongside the
|
|
78
|
-
existing `Terminal`/`AutoApprove` confirmers. See `portage-ucp`'s own
|
|
79
|
-
`CHANGELOG.md`.
|
|
80
|
-
- `portage-ucp-journal` is a new gem (0.1.0, not yet published to
|
|
81
|
-
RubyGems): a buyer-side purchase journal plus the injectable `Store`
|
|
82
|
-
abstraction `portage-ucp`'s own `Store`/`FileStore` split now mirrors.
|
|
83
|
-
- `portage-cli` bumps to 0.4.1, `portage-ucp-client` to 0.3.1,
|
|
84
|
-
`portage-ucp-shopify` to 0.4.1, and `portage-ucp-wix` to 0.1.1 — pin-only
|
|
85
|
-
releases (no behavior change) so each can install alongside `portage-ucp`
|
|
86
|
-
0.6.0: their previously-published `~> 0.5` (`~> 0.5` for `-wix`'s 0.1.0)
|
|
87
|
-
pin is pessimistic and excludes 0.6.x. Every other gem's `portage-ucp` pin
|
|
88
|
-
also widens to `~> 0.6` in its gemspec, with no release of its own needed
|
|
89
|
-
beyond what's already covered above.
|
|
90
|
-
|
|
91
|
-
## [0.5.0] - 2026-09-14
|
|
92
|
-
|
|
93
|
-
- `portage-ucp` bumps to 0.5.0 for the agentic-payments work (docs/plans/agentic-payments.md):
|
|
94
|
-
`Adapter#create_payment_enrollment`/`#get_payment_enrollment` (card-on-file
|
|
95
|
-
enrollment without the card touching this process), a durable
|
|
96
|
-
`Support::TransactionLog` wired into `complete_checkout` dispatch,
|
|
97
|
-
`PolicyGuard`/`Policy` (per-transaction/rolling caps, velocity, merchant
|
|
98
|
-
allowlist, per-token enrollment scopes), a `Confirmer` gate
|
|
99
|
-
(`Terminal`/`AutoApprove`) run just before dispatch, a durable
|
|
100
|
-
`Support::OrderLedger` snapshot written after settlement, `_meta`
|
|
101
|
-
`ucp-agent.profile` threading alongside the existing `traceparent`
|
|
102
|
-
correlation id, and `Adapter#lookup_catalog(ids:)` for batch product
|
|
103
|
-
fetch by id — see `portage-ucp`'s own `CHANGELOG.md`.
|
|
104
|
-
- `portage-cli` bumps to 0.4.0 for `portage payment list/enroll/set-default/
|
|
105
|
-
remove/freeze/revoke` (Keychain / Secret Service / env-var-only storage)
|
|
106
|
-
and `portage policy show/set`, both driving the new `portage-ucp` policy
|
|
107
|
-
and enrollment capabilities.
|
|
108
|
-
- `portage-ucp-client` bumps to 0.3.0 for `Session#create_payment_enrollment`/
|
|
109
|
-
`#get_payment_enrollment` and an optional `meta:` kwarg threaded through
|
|
110
|
-
every transport.
|
|
111
|
-
- `portage-ucp-shopify` bumps to 0.4.0 for `Adapter#lookup_catalog(ids:)`,
|
|
112
|
-
fetching several known product ids in one round trip via the Admin API's
|
|
113
|
-
`nodes(ids:)` field.
|
|
114
|
-
- Every adapter gemspec and `portage-cli` widen their `portage-ucp` pin to
|
|
115
|
-
`~> 0.5` (and `portage-cli`'s `portage-ucp-client` pin to `~> 0.3`) for the
|
|
116
|
-
capabilities above; only `portage-ucp`, `portage-ucp-shopify`,
|
|
117
|
-
`portage-ucp-client`, and `portage-cli` have ever been published to
|
|
118
|
-
RubyGems.
|
|
119
|
-
|
|
120
|
-
## [0.4.0] - 2026-08-28
|
|
121
|
-
|
|
122
|
-
- `portage-cli` bumps to 0.3.0 for `portage compare` (§22's "find this same
|
|
123
|
-
item elsewhere" mode) and `portage history` (local purchase/search log),
|
|
124
|
-
plus a fix for a `search_catalog` envelope-unwrapping bug that had been
|
|
125
|
-
producing malformed offers against every real store since 0.2.0 — see
|
|
126
|
-
`portage-cli`'s own `CHANGELOG.md`.
|
|
127
|
-
- `portage-ucp` bumps to 0.4.0 for the `app.portage-ucp.reorder` capability,
|
|
128
|
-
per-request correlation ids threaded through `Dispatcher`/`Mcp::Server`/
|
|
129
|
-
`CheckoutState` for observability, and a widened `Observability::REDACTED_KEYS`
|
|
130
|
-
covering the PII fields that actually flow through logged events — see
|
|
131
|
-
`portage-ucp`'s own `CHANGELOG.md`.
|
|
132
|
-
- `portage-ucp-shopify` bumps to 0.3.1 to widen its `portage-ucp` dependency
|
|
133
|
-
pin from `~> 0.3` to `~> 0.4` — no code change of its own. Every other
|
|
134
|
-
adapter gemspec and `portage-ucp-client` got the same pin widened, but
|
|
135
|
-
none has published a version yet, so there's no install-breakage to fix
|
|
136
|
-
for them beyond keeping the constraint correct ahead of their first
|
|
137
|
-
release.
|
|
138
|
-
- `portage-cli` and `portage-ucp` are the only two gems in this release with
|
|
139
|
-
behavior changes; `portage-ucp` and `portage-ucp-shopify` remain the only
|
|
140
|
-
two gems ever published to RubyGems.
|
|
141
|
-
|
|
142
|
-
## [0.3.0] - 2026-08-27
|
|
143
|
-
|
|
144
|
-
- All seven adapter gems now run the core gem's conformance kit against their
|
|
145
|
-
real `Adapter` through a real `Dispatcher`
|
|
146
|
-
(`spec/portage/ucp/<platform>/conformance_spec.rb`), closing the follow-up
|
|
147
|
-
design-log §17 left open when the kit shipped. No adapter needed
|
|
148
|
-
body-matching stubs: the kit's reachable surface stops at `create_checkout`.
|
|
149
|
-
- Core gem's `~> 0.2` dependency pin widened to `~> 0.3` in every adapter,
|
|
150
|
-
`portage-cli`, and `portage-ucp-client` gemspec.
|
|
151
|
-
- `portage-ucp` and `portage-ucp-shopify` both bump to 0.3.0 — see each
|
|
152
|
-
gem's own `CHANGELOG.md` for `Support::Retry`, `Support::SessionLock`, the
|
|
153
|
-
Shopify metadata_field config DSL, and the Shopify GraphQL shape fixes
|
|
154
|
-
driving the bump. `portage-cli` and `portage-ucp-client` are unchanged and
|
|
155
|
-
stay at 0.2.0.
|
|
156
|
-
|
|
157
|
-
## [0.2.0] - 2026-08-21
|
|
158
|
-
|
|
159
|
-
### Added
|
|
160
|
-
|
|
161
|
-
- `~/.portage/` — the first state anything here keeps outside the project
|
|
162
|
-
directory. `stores.yml` is the store allowlist you curate; the CLI writes
|
|
163
|
-
`discovery-cache.json` to remember which origins answered
|
|
164
|
-
`/.well-known/ucp`, so a URL-less search doesn't re-probe the same hosts on
|
|
165
|
-
every run. Both are the CLI's, and both are documented in
|
|
166
|
-
[`portage-cli`](portage-cli/README.md).
|
|
167
|
-
- Search-backend credentials as configuration that belongs to no adapter:
|
|
168
|
-
`BRAVE_SEARCH_API_KEY`, `GOOGLE_CSE_KEY` / `GOOGLE_CSE_CX`, and
|
|
169
|
-
`PORTAGE_STORES`. The per-adapter variables in the root README's
|
|
170
|
-
Requirements table decide which platforms the CLI can buy from; these decide
|
|
171
|
-
which stores it can propose in the first place, so they sit outside that
|
|
172
|
-
table.
|
|
173
|
-
- Root `CHANGELOG.md` (this file) — every gem already had one, the workspace
|
|
174
|
-
itself didn't.
|
|
175
|
-
- `docs/walkthrough.md` and `docs/well-known-ucp.md`: the agent-buys-a-snowboard
|
|
176
|
-
walkthrough and the `/.well-known/ucp` rationale, moved out of the root README
|
|
177
|
-
so it opens on how to install and run the thing.
|
|
178
|
-
- A `## License` section in every adapter gem's README — all seven shipped a
|
|
179
|
-
`LICENSE` file without pointing at it.
|
|
180
|
-
- `docs/design-log.md` §15: how the CLI finds a store when the user has no URL,
|
|
181
|
-
and why the search step uses documented APIs rather than a scraped results
|
|
182
|
-
page. Ships alongside `portage find` in `portage-cli`.
|
|
183
|
-
|
|
184
|
-
### Changed
|
|
185
|
-
|
|
186
|
-
- Root README's gem table describes both ways into the CLI — `portage buy
|
|
187
|
-
<url>` when you know the shop, and `portage find --query "..."` when you
|
|
188
|
-
don't.
|
|
189
|
-
- Root README follows the `bundle gem` section order: Installation and Usage
|
|
190
|
-
come first, then the gem table, then everything else. The table of contents
|
|
191
|
-
now matches the rendered order (Requirements had been listed last and rendered
|
|
192
|
-
second).
|
|
193
|
-
- Root README's Requirements section is a per-adapter env-var table linking each
|
|
194
|
-
adapter's own README, instead of restating credential setup those READMEs
|
|
195
|
-
already own.
|
|
196
|
-
- Every README names its how-to-run section `## Usage`, replacing the mix of
|
|
197
|
-
`Quickstart` (core, client) and `Using the adapter directly` (adapters).
|
|
198
|
-
|
|
199
|
-
## [0.1.0] - 2026-08-14
|
|
200
|
-
|
|
201
|
-
- Initial release: ten gems, published to RubyGems. See each gem's own
|
|
202
|
-
`CHANGELOG.md` for what it ships, and the [design log](docs/design-log.md)
|
|
203
|
-
for the rationale behind the split.
|
|
3
|
+
All notable changes to this project are documented here. Format loosely follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.0.0/); this project is
|
|
5
|
+
pre-1.0, so APIs may still shift between minor versions.
|
|
6
|
+
|
|
7
|
+
## [0.1.4] - 2026-09-17
|
|
8
|
+
|
|
9
|
+
- No behavior change — widens the `portage-ucp` dependency pin to `~> 0.8`
|
|
10
|
+
so this gem can install alongside `portage-ucp` 0.8.0 (the `~> 0.7` pin
|
|
11
|
+
published with 0.1.3 is pessimistic and excludes it).
|
|
12
|
+
|
|
13
|
+
## [0.1.3] - 2026-09-16
|
|
14
|
+
|
|
15
|
+
- No behavior change — 0.1.2 was built and pushed with `gem build` run from
|
|
16
|
+
the workspace root instead of this gem's own directory, so `spec.files =
|
|
17
|
+
Dir[...]` resolved against the wrong working directory and packaged an
|
|
18
|
+
empty gem. 0.1.2 has been yanked; 0.1.3 repackages the exact same 0.1.2
|
|
19
|
+
code correctly.
|
|
20
|
+
|
|
21
|
+
## [0.1.2] - 2026-09-16
|
|
22
|
+
|
|
23
|
+
- No behavior change — widens the `portage-ucp` dependency pin to `~> 0.7`
|
|
24
|
+
so this gem can install alongside `portage-ucp` 0.7.0 (the pessimistic
|
|
25
|
+
`~> 0.6` pin published with 0.1.1 excludes it).
|
|
26
|
+
|
|
27
|
+
## [0.1.1] - 2026-09-15
|
|
28
|
+
|
|
29
|
+
- **Fix:** `Mapper.product`/`.variants` built `Portage::Ucp::Product`/`Variant`
|
|
30
|
+
with the pre-schema `price:`/`available:` keywords core dropped when
|
|
31
|
+
`dev.ucp.shopping.catalog` became schema-conformant — every real
|
|
32
|
+
`search_catalog`/`get_product` call raised `ArgumentError: missing keyword:
|
|
33
|
+
:price_range`. Now builds `Description`/`Price`/`PriceRange` objects and a
|
|
34
|
+
real `Variant` array, matching `Shopify`/`Wix`'s mappers.
|
|
35
|
+
- **Fix:** `Adapter#search_catalog` returned a bare `Array<Product>` instead
|
|
36
|
+
of the `CatalogSearchResult` the `Adapter` contract documents — its wire
|
|
37
|
+
form has no `products` wrapper, so it never validated against UCP's
|
|
38
|
+
`catalog_search.json` response schema.
|
|
39
|
+
- **Fix:** `Adapter#get_product` returned a bare `Product` instead of
|
|
40
|
+
`ProductDetail`, so its wire form had no `product` wrapper either, for the
|
|
41
|
+
same reason as `search_catalog` above.
|
|
42
|
+
|
|
43
|
+
## [0.1.0] - Unreleased
|
|
44
|
+
|
|
45
|
+
- Initial pre-release. BigCommerce adapter against the v3 Catalog/Carts/
|
|
46
|
+
Checkouts APIs and v2 Orders API.
|