@peac/mappings-acp 0.14.2 → 0.14.3
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/dist/index.d.ts +61 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +144 -19
- package/dist/index.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +31 -11
- package/dist/session.js.map +1 -1
- package/dist/validation.d.ts +13 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +31 -0
- package/dist/validation.js.map +1 -0
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
|
@@ -4,23 +4,66 @@
|
|
|
4
4
|
* Agentic Commerce Protocol (ACP) integration for PEAC.
|
|
5
5
|
* Maps ACP checkout events to PEAC receipts and carries evidence via HTTP headers.
|
|
6
6
|
*/
|
|
7
|
-
import type
|
|
7
|
+
import { type PaymentEvidence } from '@peac/schema';
|
|
8
|
+
import { type StrictnessMode } from '@peac/adapter-core';
|
|
8
9
|
export * from './budget';
|
|
9
10
|
export type { HeaderMap, AcpMessageLike, AcpExtractResult, AcpExtractAsyncResult } from './carrier';
|
|
10
11
|
export { ACP_CARRIER_LIMITS, attachCarrierToACPHeaders, attachCarrierToACPMessage, extractCarrierFromACPHeaders, extractCarrierFromACPHeadersAsync, AcpCarrierAdapter, } from './carrier';
|
|
11
12
|
/**
|
|
12
|
-
* ACP Checkout Success Event
|
|
13
|
+
* ACP Checkout Success Event.
|
|
14
|
+
*
|
|
15
|
+
* Carrier-shape input for an ACP checkout-success observation. The amount is
|
|
16
|
+
* a base-10 integer string in the smallest currency unit (e.g. "9999" for
|
|
17
|
+
* $99.99) to preserve precision above Number.MAX_SAFE_INTEGER. The
|
|
18
|
+
* environment is asserted by upstream and never silently defaulted.
|
|
13
19
|
*/
|
|
14
20
|
export interface ACPCheckoutSuccess {
|
|
15
21
|
checkout_id: string;
|
|
16
22
|
resource_uri: string;
|
|
17
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Amount in smallest currency unit as a base-10 integer string.
|
|
25
|
+
* Validated against the shared AmountMinorStringSchema and must be
|
|
26
|
+
* non-negative. Decimals, empty strings, and numeric values are rejected.
|
|
27
|
+
*/
|
|
28
|
+
amount_minor: string;
|
|
18
29
|
currency: string;
|
|
19
30
|
payment_rail: string;
|
|
20
31
|
payment_reference: string;
|
|
32
|
+
/** Environment as asserted by upstream. Required: no silent default. */
|
|
33
|
+
env: 'live' | 'test';
|
|
21
34
|
customer_id?: string;
|
|
22
35
|
metadata?: Record<string, unknown>;
|
|
23
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Optional knobs for fromACPCheckoutSuccess. Mode controls the
|
|
39
|
+
* mapper-boundary finality-synthesis guard (default `interop`).
|
|
40
|
+
*/
|
|
41
|
+
export interface ACPCheckoutSuccessOptions {
|
|
42
|
+
mode?: StrictnessMode;
|
|
43
|
+
warn?: (message: string) => void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Stable error codes emitted by ACP mapper validation. Callers MAY switch
|
|
47
|
+
* on `code` to discriminate without parsing message text. Distinct from
|
|
48
|
+
* `@peac/adapter-core` MapperBoundaryError codes (which carry the finality-
|
|
49
|
+
* synthesis code only); kept local to avoid widening the adapter-core enum
|
|
50
|
+
* for ACP-specific validation concerns.
|
|
51
|
+
*/
|
|
52
|
+
export type ACPMapperBoundaryErrorCode = 'acp.checkout_invalid_event' | 'acp.checkout_missing_checkout_id' | 'acp.checkout_invalid_resource_uri' | 'acp.checkout_legacy_total_amount' | 'acp.checkout_invalid_amount_minor' | 'acp.checkout_unsafe_amount_minor' | 'acp.checkout_invalid_currency' | 'acp.checkout_missing_payment_rail' | 'acp.checkout_missing_payment_reference' | 'acp.checkout_missing_env' | 'acp.checkout_invalid_env';
|
|
53
|
+
export interface ACPMapperBoundaryErrorInit {
|
|
54
|
+
code: ACPMapperBoundaryErrorCode;
|
|
55
|
+
field: string;
|
|
56
|
+
message: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Structured validation error thrown by ACP mapper input checks. Carries a
|
|
60
|
+
* stable `code` and `field` so callers can discriminate programmatically.
|
|
61
|
+
*/
|
|
62
|
+
export declare class ACPMapperBoundaryError extends Error {
|
|
63
|
+
readonly code: ACPMapperBoundaryErrorCode;
|
|
64
|
+
readonly field: string;
|
|
65
|
+
constructor(init: ACPMapperBoundaryErrorInit);
|
|
66
|
+
}
|
|
24
67
|
/**
|
|
25
68
|
* PEAC Receipt Input (for issue())
|
|
26
69
|
*/
|
|
@@ -31,12 +74,25 @@ export interface PEACReceiptInput {
|
|
|
31
74
|
payment: PaymentEvidence;
|
|
32
75
|
}
|
|
33
76
|
/**
|
|
34
|
-
* Convert ACP checkout success event to PEAC receipt input
|
|
77
|
+
* Convert ACP checkout success event to PEAC receipt input.
|
|
78
|
+
*
|
|
79
|
+
* Observational mapping only. fromACPCheckoutSuccess does NOT synthesize
|
|
80
|
+
* commerce finality: a checkout-success observation alone does not prove
|
|
81
|
+
* authorization, capture, settlement, refund, void, or chargeback. The
|
|
82
|
+
* mapper records checkout/payment evidence only; no `commerce_event`,
|
|
83
|
+
* `settlement_state`, `capture_state`, or `authorization_state` is emitted.
|
|
84
|
+
* Callers that have an explicit payment-bearing artifact should route
|
|
85
|
+
* through fromACPDelegatedPaymentObservation or fromACPPaymentObservation
|
|
86
|
+
* instead.
|
|
87
|
+
*
|
|
88
|
+
* Validation errors are thrown as ACPMapperBoundaryError with stable
|
|
89
|
+
* `code` and `field` so callers can discriminate programmatically.
|
|
35
90
|
*
|
|
36
91
|
* @param event - ACP checkout success event
|
|
92
|
+
* @param options - Optional strictness mode + warn sink
|
|
37
93
|
* @returns PEAC receipt input ready for issue()
|
|
38
94
|
*/
|
|
39
|
-
export declare function fromACPCheckoutSuccess(event: ACPCheckoutSuccess): PEACReceiptInput;
|
|
95
|
+
export declare function fromACPCheckoutSuccess(event: ACPCheckoutSuccess, options?: ACPCheckoutSuccessOptions): PEACReceiptInput;
|
|
40
96
|
/**
|
|
41
97
|
* Attach PEAC receipt to ACP response
|
|
42
98
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,10 +20,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
20
20
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.fromACPDelegatedPaymentObservation = exports.fromACPInterventionRequired = exports.fromACPCapabilitySnapshot = exports.fromACPPaymentObservation = exports.fromACPSessionLifecycleEvent = exports.AcpCarrierAdapter = exports.extractCarrierFromACPHeadersAsync = exports.extractCarrierFromACPHeaders = exports.attachCarrierToACPMessage = exports.attachCarrierToACPHeaders = exports.ACP_CARRIER_LIMITS = void 0;
|
|
23
|
+
exports.fromACPDelegatedPaymentObservation = exports.fromACPInterventionRequired = exports.fromACPCapabilitySnapshot = exports.fromACPPaymentObservation = exports.fromACPSessionLifecycleEvent = exports.ACPMapperBoundaryError = exports.AcpCarrierAdapter = exports.extractCarrierFromACPHeadersAsync = exports.extractCarrierFromACPHeaders = exports.attachCarrierToACPMessage = exports.attachCarrierToACPHeaders = exports.ACP_CARRIER_LIMITS = void 0;
|
|
24
24
|
exports.fromACPCheckoutSuccess = fromACPCheckoutSuccess;
|
|
25
25
|
exports.attachReceiptToACPResponse = attachReceiptToACPResponse;
|
|
26
26
|
exports.extractReceiptFromACPResponse = extractReceiptFromACPResponse;
|
|
27
|
+
const schema_1 = require("@peac/schema");
|
|
28
|
+
const adapter_core_1 = require("@peac/adapter-core");
|
|
29
|
+
const validation_js_1 = require("./validation.js");
|
|
27
30
|
__exportStar(require("./budget"), exports);
|
|
28
31
|
var carrier_1 = require("./carrier");
|
|
29
32
|
Object.defineProperty(exports, "ACP_CARRIER_LIMITS", { enumerable: true, get: function () { return carrier_1.ACP_CARRIER_LIMITS; } });
|
|
@@ -33,36 +36,158 @@ Object.defineProperty(exports, "extractCarrierFromACPHeaders", { enumerable: tru
|
|
|
33
36
|
Object.defineProperty(exports, "extractCarrierFromACPHeadersAsync", { enumerable: true, get: function () { return carrier_1.extractCarrierFromACPHeadersAsync; } });
|
|
34
37
|
Object.defineProperty(exports, "AcpCarrierAdapter", { enumerable: true, get: function () { return carrier_1.AcpCarrierAdapter; } });
|
|
35
38
|
/**
|
|
36
|
-
*
|
|
39
|
+
* Structured validation error thrown by ACP mapper input checks. Carries a
|
|
40
|
+
* stable `code` and `field` so callers can discriminate programmatically.
|
|
41
|
+
*/
|
|
42
|
+
class ACPMapperBoundaryError extends Error {
|
|
43
|
+
code;
|
|
44
|
+
field;
|
|
45
|
+
constructor(init) {
|
|
46
|
+
super(init.message);
|
|
47
|
+
this.name = 'ACPMapperBoundaryError';
|
|
48
|
+
this.code = init.code;
|
|
49
|
+
this.field = init.field;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.ACPMapperBoundaryError = ACPMapperBoundaryError;
|
|
53
|
+
/**
|
|
54
|
+
* Convert ACP checkout success event to PEAC receipt input.
|
|
55
|
+
*
|
|
56
|
+
* Observational mapping only. fromACPCheckoutSuccess does NOT synthesize
|
|
57
|
+
* commerce finality: a checkout-success observation alone does not prove
|
|
58
|
+
* authorization, capture, settlement, refund, void, or chargeback. The
|
|
59
|
+
* mapper records checkout/payment evidence only; no `commerce_event`,
|
|
60
|
+
* `settlement_state`, `capture_state`, or `authorization_state` is emitted.
|
|
61
|
+
* Callers that have an explicit payment-bearing artifact should route
|
|
62
|
+
* through fromACPDelegatedPaymentObservation or fromACPPaymentObservation
|
|
63
|
+
* instead.
|
|
64
|
+
*
|
|
65
|
+
* Validation errors are thrown as ACPMapperBoundaryError with stable
|
|
66
|
+
* `code` and `field` so callers can discriminate programmatically.
|
|
37
67
|
*
|
|
38
68
|
* @param event - ACP checkout success event
|
|
69
|
+
* @param options - Optional strictness mode + warn sink
|
|
39
70
|
* @returns PEAC receipt input ready for issue()
|
|
40
71
|
*/
|
|
41
|
-
function fromACPCheckoutSuccess(event) {
|
|
42
|
-
|
|
72
|
+
function fromACPCheckoutSuccess(event, options = {}) {
|
|
73
|
+
if (event === null || typeof event !== 'object') {
|
|
74
|
+
throw new ACPMapperBoundaryError({
|
|
75
|
+
code: 'acp.checkout_invalid_event',
|
|
76
|
+
field: 'event',
|
|
77
|
+
message: 'ACP checkout event must be an object',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
43
80
|
if (!event.checkout_id) {
|
|
44
|
-
throw new
|
|
81
|
+
throw new ACPMapperBoundaryError({
|
|
82
|
+
code: 'acp.checkout_missing_checkout_id',
|
|
83
|
+
field: 'checkout_id',
|
|
84
|
+
message: 'ACP checkout event missing checkout_id',
|
|
85
|
+
});
|
|
45
86
|
}
|
|
46
|
-
if (!
|
|
47
|
-
throw new
|
|
87
|
+
if (!(0, validation_js_1.isValidHttpsResourceUri)(event.resource_uri)) {
|
|
88
|
+
throw new ACPMapperBoundaryError({
|
|
89
|
+
code: 'acp.checkout_invalid_resource_uri',
|
|
90
|
+
field: 'resource_uri',
|
|
91
|
+
message: 'ACP checkout event missing or invalid resource_uri (must be an https:// URL with a hostname and no embedded credentials)',
|
|
92
|
+
});
|
|
48
93
|
}
|
|
49
|
-
|
|
50
|
-
|
|
94
|
+
// Reject legacy numeric total_amount with a clear migration message.
|
|
95
|
+
const legacy = event.total_amount;
|
|
96
|
+
if (legacy !== undefined) {
|
|
97
|
+
throw new ACPMapperBoundaryError({
|
|
98
|
+
code: 'acp.checkout_legacy_total_amount',
|
|
99
|
+
field: 'total_amount',
|
|
100
|
+
message: 'ACP checkout event uses legacy total_amount: number; pass amount_minor as a base-10 integer string instead (e.g. "9999")',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
if (!(0, schema_1.isValidAmountMinor)(event.amount_minor)) {
|
|
104
|
+
throw new ACPMapperBoundaryError({
|
|
105
|
+
code: 'acp.checkout_invalid_amount_minor',
|
|
106
|
+
field: 'amount_minor',
|
|
107
|
+
message: 'ACP checkout event invalid amount_minor (must be a base-10 integer string, e.g. "9999")',
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (event.amount_minor.startsWith('-')) {
|
|
111
|
+
throw new ACPMapperBoundaryError({
|
|
112
|
+
code: 'acp.checkout_invalid_amount_minor',
|
|
113
|
+
field: 'amount_minor',
|
|
114
|
+
message: 'ACP checkout event invalid amount_minor (must be non-negative)',
|
|
115
|
+
});
|
|
51
116
|
}
|
|
52
117
|
if (!event.currency || !/^[A-Z]{3}$/.test(event.currency)) {
|
|
53
|
-
throw new
|
|
118
|
+
throw new ACPMapperBoundaryError({
|
|
119
|
+
code: 'acp.checkout_invalid_currency',
|
|
120
|
+
field: 'currency',
|
|
121
|
+
message: 'ACP checkout event invalid currency (must be uppercase ISO 4217)',
|
|
122
|
+
});
|
|
54
123
|
}
|
|
55
124
|
if (!event.payment_rail) {
|
|
56
|
-
throw new
|
|
125
|
+
throw new ACPMapperBoundaryError({
|
|
126
|
+
code: 'acp.checkout_missing_payment_rail',
|
|
127
|
+
field: 'payment_rail',
|
|
128
|
+
message: 'ACP checkout event missing payment_rail',
|
|
129
|
+
});
|
|
57
130
|
}
|
|
58
131
|
if (!event.payment_reference) {
|
|
59
|
-
throw new
|
|
132
|
+
throw new ACPMapperBoundaryError({
|
|
133
|
+
code: 'acp.checkout_missing_payment_reference',
|
|
134
|
+
field: 'payment_reference',
|
|
135
|
+
message: 'ACP checkout event missing payment_reference',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (event.env === undefined || event.env === null) {
|
|
139
|
+
throw new ACPMapperBoundaryError({
|
|
140
|
+
code: 'acp.checkout_missing_env',
|
|
141
|
+
field: 'env',
|
|
142
|
+
message: "ACP checkout event missing env (must be 'live' or 'test')",
|
|
143
|
+
});
|
|
60
144
|
}
|
|
61
|
-
|
|
145
|
+
if (event.env !== 'live' && event.env !== 'test') {
|
|
146
|
+
throw new ACPMapperBoundaryError({
|
|
147
|
+
code: 'acp.checkout_invalid_env',
|
|
148
|
+
field: 'env',
|
|
149
|
+
message: "ACP checkout event invalid env (must be 'live' or 'test')",
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
// Safe-integer boundary for amount_minor -> Number conversion.
|
|
153
|
+
//
|
|
154
|
+
// PaymentEvidence.amount and PEACReceiptInput.amt carry the amount as a
|
|
155
|
+
// JS `number`. AmountMinorStringSchema accepts up to 39 digits, so we
|
|
156
|
+
// MUST refuse anything beyond Number.MAX_SAFE_INTEGER to avoid silently
|
|
157
|
+
// losing precision on the way back to a number. Use a string-preserving
|
|
158
|
+
// record profile for amounts beyond the safe-integer range, NOT this
|
|
159
|
+
// checkout-success mapper.
|
|
160
|
+
const amountMinorBig = BigInt(event.amount_minor);
|
|
161
|
+
if (amountMinorBig > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
162
|
+
throw new ACPMapperBoundaryError({
|
|
163
|
+
code: 'acp.checkout_unsafe_amount_minor',
|
|
164
|
+
field: 'amount_minor',
|
|
165
|
+
message: `ACP checkout event amount_minor exceeds Number.MAX_SAFE_INTEGER (${Number.MAX_SAFE_INTEGER}); the legacy PEAC receipt input carries amount as a JS number and would lose precision. Use a string-preserving record profile for amounts beyond the safe-integer range.`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
const amountMinor = Number(amountMinorBig);
|
|
169
|
+
// Mapper-boundary finality-synthesis guard.
|
|
170
|
+
//
|
|
171
|
+
// fromACPCheckoutSuccess does NOT synthesize commerce finality. event is
|
|
172
|
+
// intentionally undefined here so Rule 1 (the finality-synthesis check)
|
|
173
|
+
// is a no-op: a checkout-success observation alone does not claim
|
|
174
|
+
// authorization, capture, settlement, refund, void, or chargeback. The
|
|
175
|
+
// guard call is retained to enforce Rules 2 and 3 (currency MUST be
|
|
176
|
+
// upstream-asserted, env MUST be explicit). A caller with a finality-
|
|
177
|
+
// bearing event must use a finality-aware mapper.
|
|
178
|
+
(0, adapter_core_1.assertExplicitFinality)({
|
|
179
|
+
event: undefined,
|
|
180
|
+
hasExplicitUpstreamArtifact: false,
|
|
181
|
+
currency: event.currency,
|
|
182
|
+
env: event.env,
|
|
183
|
+
envExplicit: true,
|
|
184
|
+
}, {
|
|
185
|
+
mode: options.mode,
|
|
186
|
+
warn: options.warn,
|
|
187
|
+
pointer: '/proofs/acp/checkout',
|
|
188
|
+
});
|
|
62
189
|
const evidence = {};
|
|
63
|
-
// Include ACP metadata in evidence
|
|
64
190
|
if (event.metadata) {
|
|
65
|
-
// Cast metadata to JsonObject (Record<string, unknown> -> JsonObject)
|
|
66
191
|
evidence.acp_metadata = event.metadata;
|
|
67
192
|
}
|
|
68
193
|
if (event.customer_id) {
|
|
@@ -74,15 +199,15 @@ function fromACPCheckoutSuccess(event) {
|
|
|
74
199
|
const payment = {
|
|
75
200
|
rail: event.payment_rail,
|
|
76
201
|
reference: event.payment_reference,
|
|
77
|
-
amount:
|
|
202
|
+
amount: amountMinor,
|
|
78
203
|
currency: event.currency,
|
|
79
|
-
asset: event.currency,
|
|
80
|
-
env:
|
|
204
|
+
asset: event.currency,
|
|
205
|
+
env: event.env,
|
|
81
206
|
evidence,
|
|
82
207
|
};
|
|
83
208
|
return {
|
|
84
209
|
subject_uri: event.resource_uri,
|
|
85
|
-
amt:
|
|
210
|
+
amt: amountMinor,
|
|
86
211
|
cur: event.currency,
|
|
87
212
|
payment,
|
|
88
213
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGjF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,eAAe,CAAC;CAC1B;AAMD,iDAAiD;AACjD,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,SAAS,GACT,mBAAmB,GACnB,aAAa,GACb,WAAW,GACX,UAAU,GACV,uBAAuB,CAAC;AAE5B,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uEAAuE;AACvE,MAAM,MAAM,oBAAoB,GAC5B,WAAW,GACX,YAAY,GACZ,UAAU,GACV,SAAS,GACT,QAAQ,GACR,UAAU,CAAC;AAEf,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,oBAAoB,CAAC;CAC9C;AAED,0CAA0C;AAC1C,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAkBD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,mBAAmB,CAsCxF;AAMD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,eAAe,EAAE,kBAAkB,GAClC,mBAAmB,CA0DrB;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,wBAAwB,GACpC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAMD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,eAAe,GAAG,mBAAmB,CAmC9F;AAMD;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhG;;;;;;;GAOG;AACH,MAAM,WAAW,8BAA8B;IAC7C,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAChC,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,mEAAmE;IACnE,sBAAsB,EAAE,qBAAqB,CAAC;IAC9C;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,eAAe,GAAG,YAAY,CAAC;IAC/C;;;;;OAKG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,8BAA8B,EAC3C,OAAO,GAAE,0BAA+B,GACvC,mBAAmB,CAyHrB"}
|
package/dist/session.js
CHANGED
|
@@ -19,6 +19,7 @@ exports.fromACPCapabilitySnapshot = fromACPCapabilitySnapshot;
|
|
|
19
19
|
exports.fromACPInterventionRequired = fromACPInterventionRequired;
|
|
20
20
|
exports.fromACPDelegatedPaymentObservation = fromACPDelegatedPaymentObservation;
|
|
21
21
|
const adapter_core_1 = require("@peac/adapter-core");
|
|
22
|
+
const validation_js_1 = require("./validation.js");
|
|
22
23
|
// ---------------------------------------------------------------------------
|
|
23
24
|
// Commerce event mapping (payment state -> commerce extension event)
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
@@ -43,8 +44,8 @@ function fromACPSessionLifecycleEvent(event) {
|
|
|
43
44
|
if (!event.session_id) {
|
|
44
45
|
throw new Error('ACP session event missing session_id');
|
|
45
46
|
}
|
|
46
|
-
if (!
|
|
47
|
-
throw new Error('ACP session event missing or invalid resource_uri (must be https://)');
|
|
47
|
+
if (!(0, validation_js_1.isValidHttpsResourceUri)(event.resource_uri)) {
|
|
48
|
+
throw new Error('ACP session event missing or invalid resource_uri (must be an https:// URL with a hostname and no embedded credentials)');
|
|
48
49
|
}
|
|
49
50
|
const evidence = {
|
|
50
51
|
acp_session_id: event.session_id,
|
|
@@ -91,8 +92,8 @@ function fromACPPaymentObservation(event, paymentArtifact) {
|
|
|
91
92
|
if (!event.session_id) {
|
|
92
93
|
throw new Error('ACP session event missing session_id');
|
|
93
94
|
}
|
|
94
|
-
if (!
|
|
95
|
-
throw new Error('ACP session event missing or invalid resource_uri (must be https://)');
|
|
95
|
+
if (!(0, validation_js_1.isValidHttpsResourceUri)(event.resource_uri)) {
|
|
96
|
+
throw new Error('ACP session event missing or invalid resource_uri (must be an https:// URL with a hostname and no embedded credentials)');
|
|
96
97
|
}
|
|
97
98
|
if (!paymentArtifact.rail) {
|
|
98
99
|
throw new Error('Payment artifact missing rail');
|
|
@@ -103,6 +104,12 @@ function fromACPPaymentObservation(event, paymentArtifact) {
|
|
|
103
104
|
if (!paymentArtifact.observed_payment_state) {
|
|
104
105
|
throw new Error('Payment artifact missing observed_payment_state');
|
|
105
106
|
}
|
|
107
|
+
// paymentArtifact.amount is a number on the input boundary; reject NaN,
|
|
108
|
+
// Infinity, decimals, and unsafe integers before assigning to
|
|
109
|
+
// PaymentEvidence.amount to prevent signing imprecise numeric evidence.
|
|
110
|
+
if (!Number.isSafeInteger(paymentArtifact.amount)) {
|
|
111
|
+
throw new Error('Payment artifact amount must be a safe integer minor-unit value (no NaN, Infinity, decimals, or values outside Number.MIN_SAFE_INTEGER..Number.MAX_SAFE_INTEGER)');
|
|
112
|
+
}
|
|
106
113
|
const commerceEvent = PAYMENT_STATE_TO_COMMERCE_EVENT[paymentArtifact.observed_payment_state];
|
|
107
114
|
const evidence = {
|
|
108
115
|
acp_session_id: event.session_id,
|
|
@@ -157,8 +164,8 @@ function fromACPInterventionRequired(intervention) {
|
|
|
157
164
|
if (!intervention.session_id) {
|
|
158
165
|
throw new Error('ACP intervention missing session_id');
|
|
159
166
|
}
|
|
160
|
-
if (!
|
|
161
|
-
throw new Error('ACP intervention missing or invalid resource_uri (must be https://)');
|
|
167
|
+
if (!(0, validation_js_1.isValidHttpsResourceUri)(intervention.resource_uri)) {
|
|
168
|
+
throw new Error('ACP intervention missing or invalid resource_uri (must be an https:// URL with a hostname and no embedded credentials)');
|
|
162
169
|
}
|
|
163
170
|
const evidence = {
|
|
164
171
|
acp_session_id: intervention.session_id,
|
|
@@ -213,8 +220,8 @@ function fromACPDelegatedPaymentObservation(observation, options = {}) {
|
|
|
213
220
|
if (!observation.delegation_id) {
|
|
214
221
|
throw new Error('ACP delegated-payment observation missing delegation_id');
|
|
215
222
|
}
|
|
216
|
-
if (!
|
|
217
|
-
throw new Error('ACP delegated-payment observation missing or invalid resource_uri (must be https://)');
|
|
223
|
+
if (!(0, validation_js_1.isValidHttpsResourceUri)(observation.resource_uri)) {
|
|
224
|
+
throw new Error('ACP delegated-payment observation missing or invalid resource_uri (must be an https:// URL with a hostname and no embedded credentials)');
|
|
218
225
|
}
|
|
219
226
|
if (!observation.principal) {
|
|
220
227
|
throw new Error('ACP delegated-payment observation missing principal');
|
|
@@ -228,8 +235,8 @@ function fromACPDelegatedPaymentObservation(observation, options = {}) {
|
|
|
228
235
|
if (!observation.observed_payment_state) {
|
|
229
236
|
throw new Error('ACP delegated-payment observation missing observed_payment_state');
|
|
230
237
|
}
|
|
231
|
-
if (
|
|
232
|
-
throw new Error('ACP delegated-payment observation authorized_amount_minor must be a base-10 integer string');
|
|
238
|
+
if (!/^[0-9]+$/.test(observation.authorized_amount_minor)) {
|
|
239
|
+
throw new Error('ACP delegated-payment observation authorized_amount_minor must be a non-negative base-10 integer string');
|
|
233
240
|
}
|
|
234
241
|
const commerceEvent = DELEGATED_STATE_TO_COMMERCE_EVENT[observation.observed_payment_state];
|
|
235
242
|
// Settlement-proof discriminator: for finality states, the upstream
|
|
@@ -283,7 +290,20 @@ function fromACPDelegatedPaymentObservation(observation, options = {}) {
|
|
|
283
290
|
// No currency-aware scaling is applied; consumers that need major units
|
|
284
291
|
// must convert downstream using the currency. The canonical minor string
|
|
285
292
|
// remains available under evidence.authorized_amount_minor.
|
|
286
|
-
|
|
293
|
+
//
|
|
294
|
+
// Safe-integer boundary for authorized_amount_minor -> Number conversion.
|
|
295
|
+
// PaymentEvidence.amount is a JS `number`; values above the safe-integer
|
|
296
|
+
// range would silently lose precision. Negative values are rejected at
|
|
297
|
+
// the regex layer above (authorized amounts are non-negative; refund
|
|
298
|
+
// semantics flow through observed_payment_state='refunded' on the
|
|
299
|
+
// session-payment-artifact path, not through delegated-payment).
|
|
300
|
+
// Callers with amounts beyond the safe-integer range must use a
|
|
301
|
+
// string-preserving record profile, not this mapper.
|
|
302
|
+
const amountMinorBig = BigInt(observation.authorized_amount_minor);
|
|
303
|
+
if (amountMinorBig > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
304
|
+
throw new Error(`ACP delegated-payment observation authorized_amount_minor (${observation.authorized_amount_minor}) exceeds Number.MAX_SAFE_INTEGER (${Number.MAX_SAFE_INTEGER}); converting to PaymentEvidence.amount would lose precision. Use a string-preserving record profile for amounts beyond the safe-integer range.`);
|
|
305
|
+
}
|
|
306
|
+
const amountMinor = Number(amountMinorBig);
|
|
287
307
|
const payment = {
|
|
288
308
|
rail: 'acp-delegated-payment',
|
|
289
309
|
reference: observation.delegation_id,
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared ACP mapper validation helpers.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Type guard for an https:// URL string with a non-empty hostname.
|
|
6
|
+
*
|
|
7
|
+
* Requires the literal "https://" prefix in addition to a parsed `https:`
|
|
8
|
+
* protocol so opaque-path forms like "https:example.com" are rejected.
|
|
9
|
+
* Embedded credentials (userinfo) are rejected to avoid signing a
|
|
10
|
+
* resource_uri that carries secrets.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isValidHttpsResourceUri(value: unknown): value is string;
|
|
13
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAcvE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared ACP mapper validation helpers.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isValidHttpsResourceUri = isValidHttpsResourceUri;
|
|
7
|
+
/**
|
|
8
|
+
* Type guard for an https:// URL string with a non-empty hostname.
|
|
9
|
+
*
|
|
10
|
+
* Requires the literal "https://" prefix in addition to a parsed `https:`
|
|
11
|
+
* protocol so opaque-path forms like "https:example.com" are rejected.
|
|
12
|
+
* Embedded credentials (userinfo) are rejected to avoid signing a
|
|
13
|
+
* resource_uri that carries secrets.
|
|
14
|
+
*/
|
|
15
|
+
function isValidHttpsResourceUri(value) {
|
|
16
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
17
|
+
return false;
|
|
18
|
+
if (!value.startsWith('https://'))
|
|
19
|
+
return false;
|
|
20
|
+
try {
|
|
21
|
+
const url = new URL(value);
|
|
22
|
+
return (url.protocol === 'https:' &&
|
|
23
|
+
url.hostname.length > 0 &&
|
|
24
|
+
url.username.length === 0 &&
|
|
25
|
+
url.password.length === 0);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAUH,0DAcC;AAtBD;;;;;;;GAOG;AACH,SAAgB,uBAAuB,CAAC,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,CACL,GAAG,CAAC,QAAQ,KAAK,QAAQ;YACzB,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACvB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAC1B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peac/mappings-acp",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.3",
|
|
4
4
|
"description": "Agentic Commerce Protocol (ACP) integration for PEAC",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
"access": "public"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@peac/adapter-core": "0.14.
|
|
27
|
-
"@peac/
|
|
28
|
-
"@peac/schema": "0.14.
|
|
29
|
-
"@peac/
|
|
26
|
+
"@peac/adapter-core": "0.14.3",
|
|
27
|
+
"@peac/kernel": "0.14.3",
|
|
28
|
+
"@peac/schema": "0.14.3",
|
|
29
|
+
"@peac/protocol": "0.14.3"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^22.19.11",
|
|
33
33
|
"typescript": "^5.3.3",
|
|
34
34
|
"vitest": "^4.0.0",
|
|
35
|
-
"@peac/crypto": "0.14.
|
|
35
|
+
"@peac/crypto": "0.14.3"
|
|
36
36
|
},
|
|
37
37
|
"keywords": [
|
|
38
38
|
"peac",
|