@devlab.group/agent-commerce 2.4.1 → 2.5.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/README.md +115 -15
- package/dist/ap2.d.ts +24 -12
- package/dist/ap2.js +31 -13
- package/dist/ap2.js.map +1 -1
- package/dist/{chunk-DTKU3Z2M.js → chunk-3OTCFFFT.js} +37 -4
- package/dist/chunk-3OTCFFFT.js.map +1 -0
- package/dist/{chunk-QPV3EGJO.js → chunk-4K7FIBJM.js} +25 -4
- package/dist/chunk-4K7FIBJM.js.map +1 -0
- package/dist/{chunk-CXWC5LWM.js → chunk-FKQK5XZA.js} +652 -68
- package/dist/chunk-FKQK5XZA.js.map +1 -0
- package/dist/chunk-GA3O2A7R.js +92 -0
- package/dist/chunk-GA3O2A7R.js.map +1 -0
- package/dist/{chunk-WZW5ORZH.js → chunk-VUCMBGUR.js} +3 -3
- package/dist/{chunk-WZW5ORZH.js.map → chunk-VUCMBGUR.js.map} +1 -1
- package/dist/cli/{ap2-GWSP4LYY.js → ap2-YAPLERSC.js} +34 -15
- package/dist/cli/ap2-YAPLERSC.js.map +1 -0
- package/dist/cli/{chunk-G2JEY7MB.js → chunk-2J2IQQ4X.js} +8 -7
- package/dist/cli/chunk-2J2IQQ4X.js.map +1 -0
- package/dist/cli/chunk-2UPPX3FJ.js +311 -0
- package/dist/cli/chunk-2UPPX3FJ.js.map +1 -0
- package/dist/cli/{chunk-WYOGIANL.js → chunk-4H2QLHQI.js} +4 -4
- package/dist/cli/{chunk-WYOGIANL.js.map → chunk-4H2QLHQI.js.map} +1 -1
- package/dist/cli/{chunk-OZ4LAWBK.js → chunk-5R7DM5LM.js} +25 -4
- package/dist/cli/chunk-5R7DM5LM.js.map +1 -0
- package/dist/cli/chunk-663ALDZA.js +92 -0
- package/dist/cli/chunk-663ALDZA.js.map +1 -0
- package/dist/cli/{chunk-QQ3WY5L3.js → chunk-IDY2735M.js} +36 -104
- package/dist/cli/chunk-IDY2735M.js.map +1 -0
- package/dist/cli/chunk-JFVRG2HH.js +107 -0
- package/dist/cli/chunk-JFVRG2HH.js.map +1 -0
- package/dist/cli/chunk-M7NXVRU5.js +8 -0
- package/dist/cli/{chunk-ITWNSS2B.js.map → chunk-M7NXVRU5.js.map} +1 -1
- package/dist/cli/chunk-NIU5EMSB.js +119 -0
- package/dist/cli/chunk-NIU5EMSB.js.map +1 -0
- package/dist/cli/{chunk-TNMLDPUO.js → chunk-QA2OPHBF.js} +655 -70
- package/dist/cli/chunk-QA2OPHBF.js.map +1 -0
- package/dist/cli/{chunk-GJIMDMYT.js → chunk-QLUCNPRT.js} +404 -161
- package/dist/cli/chunk-QLUCNPRT.js.map +1 -0
- package/dist/cli/chunk-SYQLJXIU.js +105 -0
- package/dist/cli/chunk-SYQLJXIU.js.map +1 -0
- package/dist/cli/{chunk-3MGAJ5FX.js → chunk-VJ4EO4LE.js} +3 -3
- package/dist/cli/{chunk-3MGAJ5FX.js.map → chunk-VJ4EO4LE.js.map} +1 -1
- package/dist/cli/{chunk-PIMFPCNZ.js → chunk-Z34UMZBB.js} +234 -85
- package/dist/cli/chunk-Z34UMZBB.js.map +1 -0
- package/dist/cli/config-BWFMN2ZB.js +12 -0
- package/dist/cli/{config-UI4EDG4L.js.map → config-BWFMN2ZB.js.map} +1 -1
- package/dist/cli/index.js +258 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-PGBRWZVA.js → mcp-KZEMXLHR.js} +5 -4
- package/dist/cli/mcp-KZEMXLHR.js.map +1 -0
- package/dist/cli/{near-5AY3HWYF.js → near-U6365VFX.js} +15 -4
- package/dist/cli/near-U6365VFX.js.map +1 -0
- package/dist/cli/payment-providers-SZL36H3Y.js +6 -0
- package/dist/cli/payment-providers-SZL36H3Y.js.map +1 -0
- package/dist/cli/{provider-I2ESL6RS.js → provider-6TKB5ADJ.js} +26 -15
- package/dist/cli/provider-6TKB5ADJ.js.map +1 -0
- package/dist/cli/receipts-ZGLJWMQG.js +8 -0
- package/dist/cli/receipts-ZGLJWMQG.js.map +1 -0
- package/dist/cli/reconcile-IC22MJD5.js +4 -0
- package/dist/cli/reconcile-IC22MJD5.js.map +1 -0
- package/dist/cli/{run-JK4ERPJV.js → run-ZTYPQI4D.js} +151 -115
- package/dist/cli/run-ZTYPQI4D.js.map +1 -0
- package/dist/cli/svm-KDSPDFJG.js +48 -0
- package/dist/cli/svm-KDSPDFJG.js.map +1 -0
- package/dist/cli/{x402-7WBFZQXV.js → x402-WLYBLODI.js} +10 -9
- package/dist/cli/x402-WLYBLODI.js.map +1 -0
- package/dist/index.d.ts +112 -12
- package/dist/index.js +948 -157
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +1 -2
- package/dist/mcp.js +1 -1
- package/dist/mpp.js +20 -10
- package/dist/mpp.js.map +1 -1
- package/dist/{near-D6C42VPE.js → near-FH7HPZV3.js} +15 -4
- package/dist/near-FH7HPZV3.js.map +1 -0
- package/dist/{protocol-adapter-C9odYl6l.d.ts → protocol-adapter-DEXpdp8m.d.ts} +102 -48
- package/dist/{runtime-Cl_BLVZV.d.ts → runtime-Dz2fSO-P.d.ts} +220 -2
- package/dist/svm-KNC3PHMS.js +48 -0
- package/dist/svm-KNC3PHMS.js.map +1 -0
- package/dist/x402.js +5 -5
- package/package.json +1 -1
- package/dist/authorization-DjAecwuW.d.ts +0 -115
- package/dist/chunk-CXWC5LWM.js.map +0 -1
- package/dist/chunk-DTKU3Z2M.js.map +0 -1
- package/dist/chunk-KA2AX5FH.js +0 -44
- package/dist/chunk-KA2AX5FH.js.map +0 -1
- package/dist/chunk-QPV3EGJO.js.map +0 -1
- package/dist/cli/ap2-GWSP4LYY.js.map +0 -1
- package/dist/cli/chunk-G2JEY7MB.js.map +0 -1
- package/dist/cli/chunk-GJIMDMYT.js.map +0 -1
- package/dist/cli/chunk-ITWNSS2B.js +0 -8
- package/dist/cli/chunk-OSTCU6ZK.js +0 -44
- package/dist/cli/chunk-OSTCU6ZK.js.map +0 -1
- package/dist/cli/chunk-OZ4LAWBK.js.map +0 -1
- package/dist/cli/chunk-PIMFPCNZ.js.map +0 -1
- package/dist/cli/chunk-QQ3WY5L3.js.map +0 -1
- package/dist/cli/chunk-TNMLDPUO.js.map +0 -1
- package/dist/cli/config-UI4EDG4L.js +0 -11
- package/dist/cli/mcp-PGBRWZVA.js.map +0 -1
- package/dist/cli/near-5AY3HWYF.js.map +0 -1
- package/dist/cli/provider-I2ESL6RS.js.map +0 -1
- package/dist/cli/run-JK4ERPJV.js.map +0 -1
- package/dist/cli/svm-3MMYFPC7.js +0 -33
- package/dist/cli/svm-3MMYFPC7.js.map +0 -1
- package/dist/cli/x402-7WBFZQXV.js.map +0 -1
- package/dist/near-D6C42VPE.js.map +0 -1
- package/dist/svm-QEUAUNPQ.js +0 -33
- package/dist/svm-QEUAUNPQ.js.map +0 -1
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { loadConfig } from './chunk-G2JEY7MB.js';
|
|
3
|
-
import { HttpBackendExecutor, createResourceRegistry, createStoreEventSink, createExecutionPipeline, ACP_WELL_KNOWN_PATH, ACP_CHECKOUT_OPERATIONS, ACP_IN_FLIGHT_RETRY_AFTER_SECONDS, ACP_IDEMPOTENT_REPLAYED_HEADER, ACP_IDEMPOTENCY_KEY_HEADER, ACP_REQUEST_ID_HEADER, ACP_SPEC_VERSION, ACP_JSON_MEDIA_TYPE, ACP_API_VERSION, ACP_API_VERSION_HEADER, ACP_MAX_REQUEST_ID_LENGTH, ACP_OPERATION_INPUT_KEYS, ACP_OPERATION_OPTIONAL_INPUT_KEYS, ACP_SESSION_ID_INPUT_KEY, ACP_FORWARDED_HEADERS, ACP_MAX_FORWARDED_HEADER_LENGTH, BackendErrorResponse, ACP_MERCHANT_RETRY_AFTER_DEFAULT_SECONDS, ACP_MERCHANT_RETRY_AFTER_MAX_SECONDS } from './chunk-PIMFPCNZ.js';
|
|
4
|
-
import { MPP_DEFAULT_PAYMENT_FLOW, MPP_PROFILE } from './chunk-AA3FIEAR.js';
|
|
5
|
-
import { x402OfferName } from './chunk-WYOGIANL.js';
|
|
6
|
-
import { X402_DEFAULT_PAYMENT_FLOW, resolveDeploymentMode, requireX402Network } from './chunk-OZ4LAWBK.js';
|
|
7
|
-
import { openSqliteDatabase } from './chunk-3MGAJ5FX.js';
|
|
8
|
-
import './chunk-FHCFR2GS.js';
|
|
1
|
+
import { createConfiguredPaymentProviders, importOptionalPeer } from './chunk-JFVRG2HH.js';
|
|
9
2
|
import { readCappedBody, createBearerCheck, joinUrl, settlementResponse, settlementResponseFromDetails, settlementFailure, x402ErrorCode, x402RefusalStatus } from './chunk-SPAYKVUP.js';
|
|
3
|
+
import { A2A_DEFAULT_MOUNT_PATH, A2A_DEFAULT_AGENT_NAME, buildDescriptor, A2A_AGENT_CARD_PATH, A2A_JSON_MEDIA_TYPE, A2A_VERSION_HEADER, A2A_PROTOCOL_VERSION, A2A_EXTENSIONS_HEADER, A2A_PUSH_CONFIG_METHODS, A2A_TASK_LOOKUP_METHODS, A2A_UNSUPPORTED_METHODS, A2A_METHOD_SEND_MESSAGE, buildDescriptor2, A2A_PROTOCOL_BINDING, A2A_TASK_STATE_FAILED, A2A_TASK_STATE_COMPLETED, A2A_TASK_STATE_INPUT_REQUIRED } from './chunk-NIU5EMSB.js';
|
|
4
|
+
import { createSqliteReceiptStore } from './chunk-QLUCNPRT.js';
|
|
5
|
+
import { openSqliteDatabase } from './chunk-VJ4EO4LE.js';
|
|
6
|
+
import { loadConfig } from './chunk-2J2IQQ4X.js';
|
|
7
|
+
import { HttpBackendExecutor, createResourceRegistry, createStoreEventSink, createExecutionPipeline, ACP_WELL_KNOWN_PATH, ACP_CHECKOUT_OPERATIONS, ACP_IN_FLIGHT_RETRY_AFTER_SECONDS, ACP_IDEMPOTENT_REPLAYED_HEADER, ACP_IDEMPOTENCY_KEY_HEADER, ACP_REQUEST_ID_HEADER, ACP_SPEC_VERSION, ACP_JSON_MEDIA_TYPE, ACP_API_VERSION, ACP_API_VERSION_HEADER, ACP_MAX_REQUEST_ID_LENGTH, ACP_OPERATION_INPUT_KEYS, ACP_OPERATION_OPTIONAL_INPUT_KEYS, ACP_SESSION_ID_INPUT_KEY, ACP_FORWARDED_HEADERS, ACP_MAX_FORWARDED_HEADER_LENGTH, BackendErrorResponse, ACP_MERCHANT_RETRY_AFTER_DEFAULT_SECONDS, ACP_MERCHANT_RETRY_AFTER_MAX_SECONDS } from './chunk-Z34UMZBB.js';
|
|
8
|
+
import './chunk-FHCFR2GS.js';
|
|
10
9
|
import './chunk-TPC4EJLT.js';
|
|
10
|
+
import { resolveManually, journalOf } from './chunk-2UPPX3FJ.js';
|
|
11
11
|
import { contentDigest, CONTENT_DIGEST_METADATA_KEY, mppProblem, mppProblemDetail } from './chunk-5K4XEAZV.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { MPP_DEFAULT_PAYMENT_FLOW, MPP_PROFILE } from './chunk-AA3FIEAR.js';
|
|
13
|
+
import { PACKAGE_VERSION } from './chunk-M7NXVRU5.js';
|
|
14
|
+
import { x402OfferName } from './chunk-4H2QLHQI.js';
|
|
15
|
+
import { X402_DEFAULT_PAYMENT_FLOW, resolveDeploymentMode, requireX402Network } from './chunk-5R7DM5LM.js';
|
|
16
|
+
import { PAYMENT_HEADER, AUTHORIZATION_HEADER, systemClock, extractReservedInputFields, isHttpProtocolAdapter, toErrorEnvelope, DELIVERY_SUMMARY_META_KEY, toDeliverySummary, toPaymentRequiredEnvelope, NOOP_LOGGER, parseAuthorizationHeader, PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_INPUT_FIELD, AUTHORIZATION_INPUT_FIELD, parseAuthorizationSubmission, TRANSACTION_STATES } from './chunk-IDY2735M.js';
|
|
17
|
+
import { CommerceError, isCommerceError, toLogInfo, toCommerceError } from './chunk-SYQLJXIU.js';
|
|
14
18
|
import { isRecord } from './chunk-3M6U7ILB.js';
|
|
15
19
|
import { createHash, randomUUID } from 'crypto';
|
|
16
20
|
import { z } from 'zod';
|
|
@@ -133,14 +137,13 @@ var A2A_CALL_SHAPE = 'one data part {"resource": "<skill id>", "input": {...}}';
|
|
|
133
137
|
function userRoleProblem(role) {
|
|
134
138
|
return role === A2A_USER_ROLE ? void 0 : `Unsupported message role "${String(role)}": only ${A2A_USER_ROLE} is accepted.`;
|
|
135
139
|
}
|
|
136
|
-
var UnknownRecord = z.record(z.string(), z.unknown());
|
|
137
140
|
var MessageSchema = z.object({
|
|
138
141
|
role: z.string(),
|
|
139
142
|
messageId: z.string().optional(),
|
|
140
|
-
parts: z.array(
|
|
143
|
+
parts: z.array(z.unknown()),
|
|
141
144
|
taskId: z.string().optional(),
|
|
142
145
|
contextId: z.string().optional(),
|
|
143
|
-
referenceTaskIds: z.array(z.
|
|
146
|
+
referenceTaskIds: z.array(z.unknown()).optional()
|
|
144
147
|
});
|
|
145
148
|
var ParamsSchema = z.object({
|
|
146
149
|
message: MessageSchema,
|
|
@@ -224,6 +227,7 @@ function parseInvocation(rawParams) {
|
|
|
224
227
|
}
|
|
225
228
|
const part = message.parts[0];
|
|
226
229
|
if (part === void 0) throw invalid("Message carries no parts.");
|
|
230
|
+
if (!isRecord(part)) throw invalid("Message part must be a JSON object.");
|
|
227
231
|
assertSupportedPart(part);
|
|
228
232
|
const data = part["data"];
|
|
229
233
|
if (!isRecord(data)) {
|
|
@@ -6149,99 +6153,6 @@ function wrapPino(instance) {
|
|
|
6149
6153
|
return logger;
|
|
6150
6154
|
}
|
|
6151
6155
|
|
|
6152
|
-
// src/gateway/optional-peer.ts
|
|
6153
|
-
var MISSING_PACKAGE = /Cannot find package '([^']+)'/;
|
|
6154
|
-
async function importOptionalPeer(feature, load) {
|
|
6155
|
-
try {
|
|
6156
|
-
return await load();
|
|
6157
|
-
} catch (cause) {
|
|
6158
|
-
if (cause?.code !== "ERR_MODULE_NOT_FOUND") throw cause;
|
|
6159
|
-
const pkg = MISSING_PACKAGE.exec(cause.message)?.[1];
|
|
6160
|
-
if (pkg === void 0) throw cause;
|
|
6161
|
-
throw new CommerceError(
|
|
6162
|
-
"CONFIG_INVALID",
|
|
6163
|
-
`${feature} is enabled, but the package "${pkg}" is not installed. Install the optional peers it needs at the versions \`agent-commerce version\` lists, or disable it.`,
|
|
6164
|
-
{ cause }
|
|
6165
|
-
);
|
|
6166
|
-
}
|
|
6167
|
-
}
|
|
6168
|
-
|
|
6169
|
-
// src/gateway/payment-providers.ts
|
|
6170
|
-
function offerOptions(option) {
|
|
6171
|
-
return {
|
|
6172
|
-
network: option.network,
|
|
6173
|
-
rpcUrl: option.rpcUrl,
|
|
6174
|
-
asset: option.asset,
|
|
6175
|
-
assetDecimals: option.assetDecimals,
|
|
6176
|
-
payTo: option.payTo,
|
|
6177
|
-
...option.assetName !== void 0 ? { assetName: option.assetName } : {},
|
|
6178
|
-
...option.assetVersion !== void 0 ? { assetVersion: option.assetVersion } : {},
|
|
6179
|
-
...option.assetTransferMethod !== void 0 ? { assetTransferMethod: option.assetTransferMethod } : {}
|
|
6180
|
-
};
|
|
6181
|
-
}
|
|
6182
|
-
async function createConfiguredPaymentProviders(payments, logger) {
|
|
6183
|
-
const providers = [];
|
|
6184
|
-
const { x402, mpp } = payments;
|
|
6185
|
-
if (x402?.enabled) {
|
|
6186
|
-
const { createX402PaymentProvider } = await importOptionalPeer(
|
|
6187
|
-
"payments.x402",
|
|
6188
|
-
() => import('./x402-7WBFZQXV.js')
|
|
6189
|
-
);
|
|
6190
|
-
providers.push(
|
|
6191
|
-
createX402PaymentProvider({
|
|
6192
|
-
// Support manually built single-option configs without `options`
|
|
6193
|
-
offers: (x402.options ?? [x402]).map(offerOptions),
|
|
6194
|
-
...x402.resourceOptions !== void 0 ? {
|
|
6195
|
-
resourceOffers: Object.fromEntries(
|
|
6196
|
-
Object.entries(x402.resourceOptions).map(([id, list]) => [
|
|
6197
|
-
id,
|
|
6198
|
-
list.map(offerOptions)
|
|
6199
|
-
])
|
|
6200
|
-
)
|
|
6201
|
-
} : {},
|
|
6202
|
-
maxTimeoutSeconds: x402.maxTimeoutSeconds,
|
|
6203
|
-
...x402.paymentFlow !== void 0 ? { paymentFlow: x402.paymentFlow } : {},
|
|
6204
|
-
...x402.resourcePaymentFlows !== void 0 ? { resourcePaymentFlows: x402.resourcePaymentFlows } : {},
|
|
6205
|
-
...x402.resourceMimeTypes !== void 0 ? { resourceMimeTypes: x402.resourceMimeTypes } : {},
|
|
6206
|
-
facilitator: x402.facilitator,
|
|
6207
|
-
...x402.allowMainnet !== void 0 ? { allowMainnet: x402.allowMainnet } : {},
|
|
6208
|
-
...x402.allowUnauthenticatedFacilitator !== void 0 ? { allowUnauthenticatedFacilitator: x402.allowUnauthenticatedFacilitator } : {},
|
|
6209
|
-
...x402.networks !== void 0 ? { customNetworks: x402.networks } : {},
|
|
6210
|
-
// Pass quote settings only to x402; MPP builds a separate settlement
|
|
6211
|
-
// provider without quotes
|
|
6212
|
-
...x402.quote !== void 0 ? { quote: x402.quote } : {},
|
|
6213
|
-
logger
|
|
6214
|
-
})
|
|
6215
|
-
);
|
|
6216
|
-
}
|
|
6217
|
-
if (mpp?.enabled) {
|
|
6218
|
-
const { createMppPaymentProvider } = await importOptionalPeer(
|
|
6219
|
-
"payments.mpp",
|
|
6220
|
-
() => import('./provider-I2ESL6RS.js')
|
|
6221
|
-
);
|
|
6222
|
-
providers.push(
|
|
6223
|
-
createMppPaymentProvider({
|
|
6224
|
-
recipient: mpp.recipient,
|
|
6225
|
-
asset: mpp.asset,
|
|
6226
|
-
assetName: mpp.assetName,
|
|
6227
|
-
assetVersion: mpp.assetVersion,
|
|
6228
|
-
network: mpp.network,
|
|
6229
|
-
realm: mpp.realm,
|
|
6230
|
-
challengeSecret: mpp.challengeSecret,
|
|
6231
|
-
...mpp.challengeTtlSeconds !== void 0 ? { challengeTtlSeconds: mpp.challengeTtlSeconds } : {},
|
|
6232
|
-
rpcUrl: mpp.rpcUrl,
|
|
6233
|
-
facilitator: mpp.facilitator,
|
|
6234
|
-
...mpp.allowMainnet !== void 0 ? { allowMainnet: mpp.allowMainnet } : {},
|
|
6235
|
-
...mpp.allowUnauthenticatedFacilitator !== void 0 ? { allowUnauthenticatedFacilitator: mpp.allowUnauthenticatedFacilitator } : {},
|
|
6236
|
-
...mpp.paymentFlow !== void 0 ? { paymentFlow: mpp.paymentFlow } : {},
|
|
6237
|
-
...mpp.resourcePaymentFlows !== void 0 ? { resourcePaymentFlows: mpp.resourcePaymentFlows } : {},
|
|
6238
|
-
logger
|
|
6239
|
-
})
|
|
6240
|
-
);
|
|
6241
|
-
}
|
|
6242
|
-
return providers;
|
|
6243
|
-
}
|
|
6244
|
-
|
|
6245
6156
|
// src/gateway/access-control.ts
|
|
6246
6157
|
var CORS_METHODS = "GET,POST,OPTIONS";
|
|
6247
6158
|
var CORS_HEADERS = [
|
|
@@ -6776,6 +6687,15 @@ function buildWellKnownDocument(options) {
|
|
|
6776
6687
|
|
|
6777
6688
|
// src/gateway/routes.ts
|
|
6778
6689
|
var X402_V1_PAYMENT_HEADER = "x-payment";
|
|
6690
|
+
var RESOLVE_BODY_LIMIT_BYTES = 4096;
|
|
6691
|
+
var RESOLVE_FIELDS = [
|
|
6692
|
+
"status",
|
|
6693
|
+
"actor",
|
|
6694
|
+
"reason",
|
|
6695
|
+
"externalReference",
|
|
6696
|
+
"confirmExpired"
|
|
6697
|
+
];
|
|
6698
|
+
var TRANSACTION_EVENT_LIMIT = 50;
|
|
6779
6699
|
function registerRoutes(options) {
|
|
6780
6700
|
const { server } = options;
|
|
6781
6701
|
const readinessProbe = createReadinessProbe({
|
|
@@ -6843,6 +6763,113 @@ function registerRoutes(options) {
|
|
|
6843
6763
|
)
|
|
6844
6764
|
)
|
|
6845
6765
|
);
|
|
6766
|
+
const { store, clock } = options;
|
|
6767
|
+
const journal = () => journalOf(store);
|
|
6768
|
+
const withAge = (transaction) => ({
|
|
6769
|
+
...transaction,
|
|
6770
|
+
ageSeconds: Math.max(
|
|
6771
|
+
0,
|
|
6772
|
+
Math.floor((clock.now().getTime() - Date.parse(transaction.createdAt)) / 1e3)
|
|
6773
|
+
)
|
|
6774
|
+
});
|
|
6775
|
+
server.get(
|
|
6776
|
+
"/api/transactions",
|
|
6777
|
+
{ onRequest: tokenHook },
|
|
6778
|
+
operatorHandler(async (request) => {
|
|
6779
|
+
const query = request.query;
|
|
6780
|
+
const limit = parseLimit(query["limit"]);
|
|
6781
|
+
const state = parseText(query["state"]);
|
|
6782
|
+
if (state !== void 0 && !TRANSACTION_STATES.includes(state)) {
|
|
6783
|
+
throw new CommerceError("INPUT_INVALID", `Unknown transaction state "${state}"`, {
|
|
6784
|
+
details: { field: "state" }
|
|
6785
|
+
});
|
|
6786
|
+
}
|
|
6787
|
+
const requestId = parseText(query["requestId"]);
|
|
6788
|
+
const cursor = parseText(query["cursor"]);
|
|
6789
|
+
const page = await journal().listTransactions({
|
|
6790
|
+
...limit !== void 0 ? { limit } : {},
|
|
6791
|
+
...parseFlag(query["unresolved"], "unresolved") ? { unresolved: true } : {},
|
|
6792
|
+
...state !== void 0 ? { state } : {},
|
|
6793
|
+
...requestId !== void 0 ? { requestId } : {},
|
|
6794
|
+
...cursor !== void 0 ? { cursor } : {}
|
|
6795
|
+
});
|
|
6796
|
+
return {
|
|
6797
|
+
transactions: page.transactions.map(withAge),
|
|
6798
|
+
...page.nextCursor !== void 0 ? { nextCursor: page.nextCursor } : {}
|
|
6799
|
+
};
|
|
6800
|
+
})
|
|
6801
|
+
);
|
|
6802
|
+
server.get(
|
|
6803
|
+
"/api/transactions/:id",
|
|
6804
|
+
{ onRequest: tokenHook },
|
|
6805
|
+
operatorHandler(async (request) => {
|
|
6806
|
+
const id = request.params.id;
|
|
6807
|
+
const transaction = await journal().getTransaction(id);
|
|
6808
|
+
if (transaction === void 0) {
|
|
6809
|
+
throw new CommerceError("RESOURCE_NOT_FOUND", `Transaction "${id}" was not found`);
|
|
6810
|
+
}
|
|
6811
|
+
const [attempt, receipt, events] = await Promise.all([
|
|
6812
|
+
journal().getPaymentAttempt(transaction.payment.attemptId),
|
|
6813
|
+
transaction.receiptId !== void 0 ? store.getReceipt(transaction.receiptId) : void 0,
|
|
6814
|
+
store.listEvents({ requestId: transaction.requestId, limit: TRANSACTION_EVENT_LIMIT })
|
|
6815
|
+
]);
|
|
6816
|
+
return {
|
|
6817
|
+
transaction: withAge(transaction),
|
|
6818
|
+
...attempt !== void 0 ? { attempt } : {},
|
|
6819
|
+
...receipt !== void 0 ? { receipt } : {},
|
|
6820
|
+
events
|
|
6821
|
+
};
|
|
6822
|
+
})
|
|
6823
|
+
);
|
|
6824
|
+
server.post(
|
|
6825
|
+
"/api/payment-attempts/:id/resolve",
|
|
6826
|
+
{ onRequest: tokenHook, bodyLimit: RESOLVE_BODY_LIMIT_BYTES },
|
|
6827
|
+
operatorHandler(async (request) => {
|
|
6828
|
+
const result = await resolveManually({
|
|
6829
|
+
store,
|
|
6830
|
+
authorizationProviders: options.authorizationProviders,
|
|
6831
|
+
clock,
|
|
6832
|
+
logger: options.logger,
|
|
6833
|
+
attemptId: request.params.id,
|
|
6834
|
+
...parseResolveBody(request.body)
|
|
6835
|
+
});
|
|
6836
|
+
if (!result.resolved) {
|
|
6837
|
+
throw new CommerceError("INPUT_INVALID", result.message, {
|
|
6838
|
+
httpStatus: 409,
|
|
6839
|
+
details: { reason: result.refusal, attemptStatus: result.attempt.status }
|
|
6840
|
+
});
|
|
6841
|
+
}
|
|
6842
|
+
return {
|
|
6843
|
+
attempt: result.attempt,
|
|
6844
|
+
...result.hold !== void 0 ? { hold: result.hold } : {}
|
|
6845
|
+
};
|
|
6846
|
+
})
|
|
6847
|
+
);
|
|
6848
|
+
}
|
|
6849
|
+
function parseResolveBody(body) {
|
|
6850
|
+
if (!isRecord(body)) {
|
|
6851
|
+
throw new CommerceError("INPUT_INVALID", "The request body must be a JSON object");
|
|
6852
|
+
}
|
|
6853
|
+
const field = (name, type, required) => {
|
|
6854
|
+
const value = body[name];
|
|
6855
|
+
if (value === void 0 && required || value !== void 0 && typeof value !== type) {
|
|
6856
|
+
throw new CommerceError("INPUT_INVALID", `Field "${name}" must be a ${type}`, {
|
|
6857
|
+
details: { field: name }
|
|
6858
|
+
});
|
|
6859
|
+
}
|
|
6860
|
+
};
|
|
6861
|
+
const unknownField = Object.keys(body).find((name) => !RESOLVE_FIELDS.includes(name));
|
|
6862
|
+
if (unknownField !== void 0) {
|
|
6863
|
+
throw new CommerceError("INPUT_INVALID", `Unknown field "${unknownField}"`, {
|
|
6864
|
+
details: { field: unknownField }
|
|
6865
|
+
});
|
|
6866
|
+
}
|
|
6867
|
+
field("status", "string", true);
|
|
6868
|
+
field("actor", "string", true);
|
|
6869
|
+
field("reason", "string", true);
|
|
6870
|
+
field("externalReference", "string", false);
|
|
6871
|
+
field("confirmExpired", "boolean", false);
|
|
6872
|
+
return body;
|
|
6846
6873
|
}
|
|
6847
6874
|
var bodyDigests = /* @__PURE__ */ new WeakMap();
|
|
6848
6875
|
function digestingStream(request) {
|
|
@@ -6858,13 +6885,10 @@ function digestingStream(request) {
|
|
|
6858
6885
|
}
|
|
6859
6886
|
});
|
|
6860
6887
|
}
|
|
6861
|
-
function
|
|
6888
|
+
function operatorHandler(handle) {
|
|
6862
6889
|
return async (request, reply) => {
|
|
6863
6890
|
try {
|
|
6864
|
-
|
|
6865
|
-
const limit = parseLimit(query["limit"]);
|
|
6866
|
-
const page = await list(limit !== void 0 ? { limit } : {}, query);
|
|
6867
|
-
return { [key]: page };
|
|
6891
|
+
return await handle(request, reply);
|
|
6868
6892
|
} catch (error) {
|
|
6869
6893
|
const commerceError = toCommerceError(error);
|
|
6870
6894
|
reply.status(commerceError.httpStatus).send(toErrorEnvelope(commerceError));
|
|
@@ -6872,6 +6896,14 @@ function ledgerHandler(key, list) {
|
|
|
6872
6896
|
}
|
|
6873
6897
|
};
|
|
6874
6898
|
}
|
|
6899
|
+
function ledgerHandler(key, list) {
|
|
6900
|
+
return operatorHandler(async (request) => {
|
|
6901
|
+
const query = request.query;
|
|
6902
|
+
const limit = parseLimit(query["limit"]);
|
|
6903
|
+
const page = await list(limit !== void 0 ? { limit } : {}, query);
|
|
6904
|
+
return { [key]: page };
|
|
6905
|
+
});
|
|
6906
|
+
}
|
|
6875
6907
|
async function handleInvoke(request, reply, options) {
|
|
6876
6908
|
const resourceId = request.params.id;
|
|
6877
6909
|
let paymentMethod;
|
|
@@ -7052,6 +7084,10 @@ function parseLimit(value) {
|
|
|
7052
7084
|
}
|
|
7053
7085
|
return n;
|
|
7054
7086
|
}
|
|
7087
|
+
function parseText(value) {
|
|
7088
|
+
if (Array.isArray(value)) return parseText(value[0]);
|
|
7089
|
+
return typeof value === "string" && value !== "" ? value : void 0;
|
|
7090
|
+
}
|
|
7055
7091
|
function parseFlag(value, field) {
|
|
7056
7092
|
if (Array.isArray(value)) return parseFlag(value[0], field);
|
|
7057
7093
|
if (value === void 0 || value === "false") return false;
|
|
@@ -7185,9 +7221,9 @@ async function runGateway(options = {}) {
|
|
|
7185
7221
|
const { core: logger } = createGatewayLogger({ name: config.merchant.id });
|
|
7186
7222
|
const paymentProviders = await createConfiguredPaymentProviders(config.payments, logger);
|
|
7187
7223
|
const ap2 = config.authorization?.ap2;
|
|
7188
|
-
const ap2Module = ap2?.enabled ? await importOptionalPeer("authorization.ap2", () => import('./ap2-
|
|
7224
|
+
const ap2Module = ap2?.enabled ? await importOptionalPeer("authorization.ap2", () => import('./ap2-YAPLERSC.js')) : void 0;
|
|
7189
7225
|
const mcp = config.protocols.mcp;
|
|
7190
|
-
const mcpModule = mcp.enabled ? await importOptionalPeer("protocols.mcp", () => import('./mcp-
|
|
7226
|
+
const mcpModule = mcp.enabled ? await importOptionalPeer("protocols.mcp", () => import('./mcp-KZEMXLHR.js')) : void 0;
|
|
7191
7227
|
const store = createSqliteReceiptStore({
|
|
7192
7228
|
path: config.storage.receipts.path,
|
|
7193
7229
|
logger
|
|
@@ -7318,5 +7354,5 @@ function printStartupError(error) {
|
|
|
7318
7354
|
}
|
|
7319
7355
|
|
|
7320
7356
|
export { printStartupError, runGateway };
|
|
7321
|
-
//# sourceMappingURL=run-
|
|
7322
|
-
//# sourceMappingURL=run-
|
|
7357
|
+
//# sourceMappingURL=run-ZTYPQI4D.js.map
|
|
7358
|
+
//# sourceMappingURL=run-ZTYPQI4D.js.map
|