@alphawebai/hs-prism 0.1.0-rc.41 → 0.1.0-rc.42
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/src/alphaweb/manifest.d.ts +2 -1
- package/dist/src/alphaweb/manifest.js +2 -1
- package/dist/src/alphaweb/stripe-connector.d.ts +5 -1
- package/dist/src/alphaweb/stripe-connector.js +123 -2
- package/dist/src/alphaweb/types.d.ts +33 -1
- package/dist/src/payments/generated/libconnector_service_ffi.so +0 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const ALPHAWEB_STRIPE_WEBHOOK_EVENTS: readonly ["charge.dispute.closed", "charge.dispute.created", "charge.dispute.funds_reinstated", "charge.dispute.funds_withdrawn", "charge.dispute.updated", "mandate.updated", "payment_intent.amount_capturable_updated", "payment_intent.canceled", "payment_intent.payment_failed", "payment_intent.processing", "payment_intent.requires_action", "payment_intent.succeeded", "payment_method.attached", "payment_method.automatically_updated", "payment_method.detached", "payment_method.updated", "refund.created", "refund.failed", "refund.updated", "setup_intent.canceled", "setup_intent.requires_action", "setup_intent.setup_failed", "setup_intent.succeeded"];
|
|
2
2
|
export declare const ALPHAWEB_PAYPAL_WEBHOOK_EVENTS: readonly ["CHECKOUT.ORDER.APPROVED", "CHECKOUT.ORDER.COMPLETED", "CHECKOUT.ORDER.PROCESSED", "CHECKOUT.PAYMENT-APPROVAL.REVERSED", "CUSTOMER.DISPUTE.CREATED", "CUSTOMER.DISPUTE.RESOLVED", "CUSTOMER.DISPUTE.UPDATED", "PAYMENT.AUTHORIZATION.CREATED", "PAYMENT.AUTHORIZATION.VOIDED", "PAYMENT.CAPTURE.COMPLETED", "PAYMENT.CAPTURE.DECLINED", "PAYMENT.CAPTURE.PENDING", "PAYMENT.CAPTURE.REFUNDED", "PAYMENT.CAPTURE.REVERSED", "PAYMENT.REFUND.FAILED", "PAYMENT.REFUND.PENDING", "RISK.DISPUTE.CREATED", "VAULT.PAYMENT-TOKEN.CREATED", "VAULT.PAYMENT-TOKEN.DELETED", "VAULT.PAYMENT-TOKEN.DELETION-INITIATED"];
|
|
3
3
|
export declare const ALPHAWEB_PRISM_COMPATIBILITY_MANIFEST: Readonly<{
|
|
4
|
-
readonly release: "0.1.0-rc.
|
|
4
|
+
readonly release: "0.1.0-rc.42";
|
|
5
5
|
readonly upstreamCommit: "b07af7d9dac271de729548e74217ddcf895c602b";
|
|
6
6
|
readonly medusaRange: ">=2.17.2 <2.18.0";
|
|
7
7
|
readonly stripeApiVersion: "2026-06-24.dahlia";
|
|
@@ -24,6 +24,7 @@ export declare const ALPHAWEB_PRISM_COMPATIBILITY_MANIFEST: Readonly<{
|
|
|
24
24
|
readonly connectorCapabilities: {
|
|
25
25
|
readonly stripe: {
|
|
26
26
|
readonly browserSession: "stripe_payment_element";
|
|
27
|
+
readonly manualAuthorizationCheckout: "v1";
|
|
27
28
|
readonly oneTimePayment: true;
|
|
28
29
|
readonly futureUse: true;
|
|
29
30
|
readonly repeatPayment: true;
|
|
@@ -49,7 +49,7 @@ exports.ALPHAWEB_PAYPAL_WEBHOOK_EVENTS = Object.freeze([
|
|
|
49
49
|
'VAULT.PAYMENT-TOKEN.DELETION-INITIATED',
|
|
50
50
|
]);
|
|
51
51
|
exports.ALPHAWEB_PRISM_COMPATIBILITY_MANIFEST = Object.freeze({
|
|
52
|
-
release: '0.1.0-rc.
|
|
52
|
+
release: '0.1.0-rc.42',
|
|
53
53
|
upstreamCommit: 'b07af7d9dac271de729548e74217ddcf895c602b',
|
|
54
54
|
medusaRange: '>=2.17.2 <2.18.0',
|
|
55
55
|
stripeApiVersion: '2026-06-24.dahlia',
|
|
@@ -72,6 +72,7 @@ exports.ALPHAWEB_PRISM_COMPATIBILITY_MANIFEST = Object.freeze({
|
|
|
72
72
|
connectorCapabilities: {
|
|
73
73
|
stripe: {
|
|
74
74
|
browserSession: 'stripe_payment_element',
|
|
75
|
+
manualAuthorizationCheckout: 'v1',
|
|
75
76
|
oneTimePayment: true,
|
|
76
77
|
futureUse: true,
|
|
77
78
|
repeatPayment: true,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { types } from '../payments/generated/proto';
|
|
2
|
-
import type { PrismCancelInput, PrismCaptureInput, PrismCreateWebhookEndpointInput, PrismDeleteWebhookEndpointInput, PrismDisputeResult, PrismEstablishReusableReferenceInput, PrismFindPaymentInput, PrismFindRefundInput, PrismMerchantOperation, PrismPaymentResult, PrismRefundInput, PrismRefundResult, PrismRetrieveDisputeInput, PrismRetrieveRefundInput, PrismRetryPaymentInput, PrismReusableReferenceDerivation, PrismRetrieveWebhookEndpointInput, PrismRetrievePaymentInput, PrismStripeConnectorOptions, PrismStripeConnectorV1, PrismStripeRuntimeVerification, PrismStripeRuntimeVerificationInput, PrismUpdateWebhookEndpointInput, PrismWebhookEndpoint, PrismWebhookEndpointCreated, PrismWebhookParseInput, PrismWebhookParseResult } from './types';
|
|
2
|
+
import type { PrismCancelInput, PrismCaptureInput, PrismCreateWebhookEndpointInput, PrismDeleteWebhookEndpointInput, PrismDisputeResult, PrismEstablishReusableReferenceInput, PrismFindPaymentInput, PrismFindRefundInput, PrismMerchantOperation, PrismPaymentResult, PrismRefundInput, PrismRefundResult, PrismRetrieveDisputeInput, PrismRetrieveRefundInput, PrismRetryPaymentInput, PrismReusableReferenceDerivation, PrismRetrieveWebhookEndpointInput, PrismRetrievePaymentInput, PrismStripeConnectorOptions, PrismStripeConnectorV1, PrismStripeAuthorizationOwner, PrismStripeAuthorization, PrismStripeIncrementAuthorizationInput, PrismStripeCaptureAuthorizationInput, PrismStripeRuntimeVerification, PrismStripeRuntimeVerificationInput, PrismUpdateWebhookEndpointInput, PrismWebhookEndpoint, PrismWebhookEndpointCreated, PrismWebhookParseInput, PrismWebhookParseResult } from './types';
|
|
3
3
|
interface MerchantAuthenticationPort {
|
|
4
4
|
createClientAuthenticationToken(input: types.IMerchantAuthenticationServiceCreateClientAuthenticationTokenRequest): Promise<types.MerchantAuthenticationServiceCreateClientAuthenticationTokenResponse>;
|
|
5
5
|
}
|
|
6
6
|
interface PaymentPort {
|
|
7
|
+
incrementalAuthorization?(input: types.IPaymentServiceIncrementalAuthorizationRequest): Promise<types.PaymentServiceIncrementalAuthorizationResponse>;
|
|
7
8
|
get(input: types.IPaymentServiceGetRequest): Promise<types.PaymentServiceGetResponse>;
|
|
8
9
|
capture(input: types.IPaymentServiceCaptureRequest): Promise<types.PaymentServiceCaptureResponse>;
|
|
9
10
|
void(input: types.IPaymentServiceVoidRequest): Promise<types.PaymentServiceVoidResponse>;
|
|
@@ -36,6 +37,9 @@ export declare class PrismStripeConnector implements PrismStripeConnectorV1 {
|
|
|
36
37
|
retrievePayment(input: PrismRetrievePaymentInput): Promise<PrismPaymentResult>;
|
|
37
38
|
establishReusableReference(input: PrismEstablishReusableReferenceInput): Promise<PrismReusableReferenceDerivation>;
|
|
38
39
|
findPaymentsByMerchantOperation(input: PrismFindPaymentInput): Promise<PrismPaymentResult[]>;
|
|
40
|
+
retrieveAuthorization(input: PrismStripeAuthorizationOwner): Promise<PrismStripeAuthorization>;
|
|
41
|
+
incrementAuthorization(input: PrismStripeIncrementAuthorizationInput): Promise<PrismStripeAuthorization>;
|
|
42
|
+
captureAuthorization(input: PrismStripeCaptureAuthorizationInput): Promise<PrismStripeAuthorization>;
|
|
39
43
|
capturePayment(input: PrismCaptureInput): Promise<PrismPaymentResult>;
|
|
40
44
|
cancelPayment(input: PrismCancelInput): Promise<PrismPaymentResult>;
|
|
41
45
|
refundPayment(input: PrismRefundInput): Promise<PrismRefundResult>;
|
|
@@ -735,6 +735,7 @@ class PrismStripeConnector {
|
|
|
735
735
|
: 'validation',
|
|
736
736
|
...(providerCode ? { providerCode } : {}),
|
|
737
737
|
...(requestId ? { providerRequestId: requestId } : {}),
|
|
738
|
+
providerHttpStatus: response.status,
|
|
738
739
|
retryable: response.status === 429 || response.status >= 500,
|
|
739
740
|
outcome: response.status >= 500 ? 'ambiguous' : 'definitely_not_applied',
|
|
740
741
|
safeMessage: 'Stripe rejected the payment operation.',
|
|
@@ -764,11 +765,13 @@ class PrismStripeConnector {
|
|
|
764
765
|
payment: {
|
|
765
766
|
amount: moneyMessage(input.money),
|
|
766
767
|
connectorCustomerId: input.customerReference,
|
|
767
|
-
setupFutureUsage:
|
|
768
|
+
setupFutureUsage: input.kind === 'combined_checkout' ||
|
|
769
|
+
Boolean(input.futureUse) ||
|
|
768
770
|
input.metadata.alphaweb_setup_future_usage === 'off_session'
|
|
769
771
|
? proto_1.types.FutureUsage.OFF_SESSION
|
|
770
772
|
: proto_1.types.FutureUsage.FUTURE_USAGE_UNSPECIFIED,
|
|
771
|
-
captureMethod: input.
|
|
773
|
+
captureMethod: input.kind === 'combined_checkout' ||
|
|
774
|
+
input.metadata.alphaweb_capture_method === 'manual'
|
|
772
775
|
? proto_1.types.CaptureMethod.MANUAL
|
|
773
776
|
: proto_1.types.CaptureMethod.AUTOMATIC,
|
|
774
777
|
paymentMethodConfigurationId: input.methodSelection.paymentMethodConfigurationId,
|
|
@@ -1073,6 +1076,124 @@ class PrismStripeConnector {
|
|
|
1073
1076
|
}
|
|
1074
1077
|
throw validationError('Stripe payment search exceeded the bounded reconciliation window.', 'PRISM_SEARCH_LIMIT');
|
|
1075
1078
|
}
|
|
1079
|
+
async retrieveAuthorization(input) {
|
|
1080
|
+
assertIdentifier(input.rootOperationId, 'rootOperationId');
|
|
1081
|
+
assertIdentifier(input.connectorPaymentId, 'connectorPaymentId');
|
|
1082
|
+
if (input.credentialBindingId !== this.options.credentialBindingId ||
|
|
1083
|
+
input.providerAccountId !== this.options.providerAccountId ||
|
|
1084
|
+
input.livemode !== (this.options.environment === 'live')) {
|
|
1085
|
+
throw configurationError('Stripe authorization ownership does not match runtime.', 'PRISM_PAYMENT_OWNERSHIP');
|
|
1086
|
+
}
|
|
1087
|
+
const raw = recordOf(await this.stripeRequest('GET', `/payment_intents/${encodeURIComponent(input.connectorPaymentId)}?expand[]=latest_charge`));
|
|
1088
|
+
const intent = parseStripePaymentIntent(raw);
|
|
1089
|
+
const capturable = integerOf(raw.amount_capturable);
|
|
1090
|
+
const received = integerOf(raw.amount_received);
|
|
1091
|
+
const charge = recordOf(raw.latest_charge);
|
|
1092
|
+
if (intent.id !== input.connectorPaymentId || intent.metadata.alphaweb_operation_id !== input.rootOperationId ||
|
|
1093
|
+
intent.metadata.alphaweb_operation_kind !== 'combined_checkout' || intent.livemode !== input.livemode ||
|
|
1094
|
+
raw.capture_method !== 'manual' || capturable === null || received === null || capturable < 0 || received < 0 ||
|
|
1095
|
+
!Number.isSafeInteger(capturable) || !Number.isSafeInteger(received)) {
|
|
1096
|
+
throw configurationError('Stripe authorization does not match its checkout.', 'PRISM_PAYMENT_OWNERSHIP');
|
|
1097
|
+
}
|
|
1098
|
+
(0, money_1.assertSafeProviderMoney)({ amountMinor: intent.amount.toString(), currency: intent.currency });
|
|
1099
|
+
const captureId = stringOf(charge.id);
|
|
1100
|
+
if (received > 0 && (!captureId || charge.payment_intent !== intent.id ||
|
|
1101
|
+
charge.livemode !== input.livemode || charge.captured !== true || charge.paid !== true ||
|
|
1102
|
+
charge.amount_captured !== received || charge.currency !== intent.currency)) {
|
|
1103
|
+
throw configurationError('Stripe capture evidence does not match its checkout.', 'PRISM_CAPTURE_OWNERSHIP');
|
|
1104
|
+
}
|
|
1105
|
+
const card = recordOf(recordOf(charge.payment_method_details).card);
|
|
1106
|
+
const clientSecret = stringOf(raw.client_secret);
|
|
1107
|
+
return {
|
|
1108
|
+
connectorPaymentId: intent.id, status: normalizedStripeIntentStatus(intent),
|
|
1109
|
+
money: { amountMinor: intent.amount.toString(), currency: intent.currency },
|
|
1110
|
+
amountCapturable: capturable.toString(), amountReceived: received.toString(),
|
|
1111
|
+
incrementalAuthorizationAvailable: recordOf(card.incremental_authorization).status === 'available',
|
|
1112
|
+
lastAdjustmentId: intent.metadata.alphaweb_adjustment_id ?? null,
|
|
1113
|
+
connectorCaptureId: received > 0 ? captureId : null,
|
|
1114
|
+
...(['requires_payment_method', 'requires_customer_action'].includes(normalizedStripeIntentStatus(intent)) &&
|
|
1115
|
+
clientSecret?.startsWith(`${intent.id}_secret_`) ? { clientSecret } : {}),
|
|
1116
|
+
};
|
|
1117
|
+
}
|
|
1118
|
+
async incrementAuthorization(input) {
|
|
1119
|
+
assertIdentifier(input.idempotencyKey, 'idempotencyKey');
|
|
1120
|
+
const target = (0, money_1.assertSafeProviderMoney)(input.money);
|
|
1121
|
+
const expected = (0, money_1.assertSafeProviderMoney)(input.expectedMoney);
|
|
1122
|
+
const observed = await this.retrieveAuthorization(input);
|
|
1123
|
+
if (observed.status !== 'authorized' || observed.amountReceived !== '0' ||
|
|
1124
|
+
observed.money.currency !== target.currency || expected.currency !== target.currency ||
|
|
1125
|
+
BigInt(observed.amountCapturable) < BigInt(observed.money.amountMinor)) {
|
|
1126
|
+
throw validationError('Stripe authorization cannot be adjusted in this state.', 'PRISM_AUTHORIZATION_STATE');
|
|
1127
|
+
}
|
|
1128
|
+
if (observed.lastAdjustmentId === input.idempotencyKey && observed.money.amountMinor === input.money.amountMinor)
|
|
1129
|
+
return observed;
|
|
1130
|
+
if (BigInt(observed.amountCapturable) < BigInt(input.expectedMoney.amountMinor)) {
|
|
1131
|
+
throw configurationError('Stripe no longer covers the approved selection.', 'PRISM_AUTHORIZATION_AMOUNT');
|
|
1132
|
+
}
|
|
1133
|
+
// A smaller final total is captured for less, without modifying the hold.
|
|
1134
|
+
if (BigInt(input.money.amountMinor) <= BigInt(observed.amountCapturable))
|
|
1135
|
+
return observed;
|
|
1136
|
+
if (!observed.incrementalAuthorizationAvailable) {
|
|
1137
|
+
throw validationError('This payment cannot authorize a higher total. The offer was not added.', 'PRISM_INCREMENT_UNAVAILABLE');
|
|
1138
|
+
}
|
|
1139
|
+
const increment = this.dependencies.payments.incrementalAuthorization;
|
|
1140
|
+
if (!increment)
|
|
1141
|
+
throw configurationError('Prism lacks incremental authorization.', 'PRISM_CAPABILITY_UNSUPPORTED');
|
|
1142
|
+
try {
|
|
1143
|
+
const result = await increment.call(this.dependencies.payments, {
|
|
1144
|
+
merchantAuthorizationId: input.idempotencyKey,
|
|
1145
|
+
connectorTransactionId: input.connectorPaymentId, amount: moneyMessage(input.money),
|
|
1146
|
+
});
|
|
1147
|
+
const error = recordOf(result.error);
|
|
1148
|
+
if (result.statusCode >= 400 || Object.keys(error).length) {
|
|
1149
|
+
throw new error_1.PrismOperationError({
|
|
1150
|
+
category: result.statusCode >= 500 ? 'provider_server' : 'declined',
|
|
1151
|
+
outcome: result.statusCode >= 500 ? 'ambiguous' : 'definitely_not_applied', retryable: false,
|
|
1152
|
+
providerHttpStatus: result.statusCode, providerCode: stringOf(error.code) ?? undefined,
|
|
1153
|
+
safeMessage: 'Stripe did not authorize the higher total. The offer was not added.',
|
|
1154
|
+
});
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
catch (error) {
|
|
1158
|
+
throw (0, error_1.normalizePrismError)(error);
|
|
1159
|
+
}
|
|
1160
|
+
let aligned;
|
|
1161
|
+
try {
|
|
1162
|
+
aligned = await this.retrieveAuthorization(input);
|
|
1163
|
+
}
|
|
1164
|
+
catch (error) {
|
|
1165
|
+
throw new error_1.PrismOperationError({ ...(0, error_1.normalizePrismError)(error).shape, outcome: 'ambiguous', retryable: false });
|
|
1166
|
+
}
|
|
1167
|
+
if (aligned.lastAdjustmentId !== input.idempotencyKey || aligned.money.amountMinor !== input.money.amountMinor ||
|
|
1168
|
+
aligned.status !== 'authorized' || BigInt(aligned.amountCapturable) < BigInt(input.money.amountMinor)) {
|
|
1169
|
+
throw new error_1.PrismOperationError({ category: 'unknown', outcome: 'ambiguous', retryable: false,
|
|
1170
|
+
providerCode: 'PRISM_INCREMENT_EVIDENCE', safeMessage: 'Stripe authorization update is awaiting verification.' });
|
|
1171
|
+
}
|
|
1172
|
+
return aligned;
|
|
1173
|
+
}
|
|
1174
|
+
async captureAuthorization(input) {
|
|
1175
|
+
assertIdentifier(input.idempotencyKey, 'idempotencyKey');
|
|
1176
|
+
const target = (0, money_1.assertSafeProviderMoney)(input.money);
|
|
1177
|
+
const observed = await this.retrieveAuthorization(input);
|
|
1178
|
+
if (observed.money.currency !== target.currency)
|
|
1179
|
+
throw configurationError('Stripe capture currency changed.', 'PRISM_CAPTURE_OWNERSHIP');
|
|
1180
|
+
if (observed.status === 'captured' && observed.amountReceived === input.money.amountMinor)
|
|
1181
|
+
return observed;
|
|
1182
|
+
if (observed.status !== 'authorized' || observed.amountReceived !== '0' || BigInt(observed.amountCapturable) < BigInt(input.money.amountMinor)) {
|
|
1183
|
+
throw validationError('Stripe has not authorized the final checkout total.', 'PRISM_CAPTURE_AMOUNT');
|
|
1184
|
+
}
|
|
1185
|
+
const result = await this.capturePayment({ operationId: input.rootOperationId, idempotencyKey: input.idempotencyKey,
|
|
1186
|
+
connectorPaymentId: input.connectorPaymentId, money: input.money });
|
|
1187
|
+
if (result.status === 'failed')
|
|
1188
|
+
throw new error_1.PrismOperationError({ category: 'declined',
|
|
1189
|
+
outcome: 'definitely_not_applied', retryable: false, safeMessage: 'Stripe declined the final capture.' });
|
|
1190
|
+
try {
|
|
1191
|
+
return await this.retrieveAuthorization(input);
|
|
1192
|
+
}
|
|
1193
|
+
catch (error) {
|
|
1194
|
+
throw new error_1.PrismOperationError({ ...(0, error_1.normalizePrismError)(error).shape, outcome: 'ambiguous', retryable: false });
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1076
1197
|
async capturePayment(input) {
|
|
1077
1198
|
assertIdentifier(input.idempotencyKey, 'idempotencyKey');
|
|
1078
1199
|
try {
|
|
@@ -327,7 +327,39 @@ export interface PrismConnectorV1 {
|
|
|
327
327
|
deleteWebhookEndpoint(input: PrismDeleteWebhookEndpointInput): Promise<void>;
|
|
328
328
|
retrieveWebhookEndpoint(input: PrismRetrieveWebhookEndpointInput): Promise<PrismWebhookEndpoint>;
|
|
329
329
|
}
|
|
330
|
-
export
|
|
330
|
+
export interface PrismStripeAuthorizationOwner {
|
|
331
|
+
rootOperationId: string;
|
|
332
|
+
connectorPaymentId: string;
|
|
333
|
+
credentialBindingId: string;
|
|
334
|
+
providerAccountId: string;
|
|
335
|
+
livemode: boolean;
|
|
336
|
+
}
|
|
337
|
+
export interface PrismStripeAuthorization {
|
|
338
|
+
connectorPaymentId: string;
|
|
339
|
+
status: PrismNormalizedPaymentStatus;
|
|
340
|
+
money: PrismMoney;
|
|
341
|
+
amountCapturable: string;
|
|
342
|
+
amountReceived: string;
|
|
343
|
+
incrementalAuthorizationAvailable: boolean;
|
|
344
|
+
lastAdjustmentId: string | null;
|
|
345
|
+
connectorCaptureId: string | null;
|
|
346
|
+
/** Only returned for an unconfirmed, owned PaymentIntent. Never log this. */
|
|
347
|
+
clientSecret?: string;
|
|
348
|
+
}
|
|
349
|
+
export interface PrismStripeIncrementAuthorizationInput extends PrismStripeAuthorizationOwner {
|
|
350
|
+
expectedMoney: PrismMoney;
|
|
351
|
+
money: PrismMoney;
|
|
352
|
+
idempotencyKey: string;
|
|
353
|
+
}
|
|
354
|
+
export interface PrismStripeCaptureAuthorizationInput extends PrismStripeAuthorizationOwner {
|
|
355
|
+
money: PrismMoney;
|
|
356
|
+
idempotencyKey: string;
|
|
357
|
+
}
|
|
358
|
+
export interface PrismStripeConnectorV1 extends PrismConnectorV1 {
|
|
359
|
+
retrieveAuthorization?(input: PrismStripeAuthorizationOwner): Promise<PrismStripeAuthorization>;
|
|
360
|
+
incrementAuthorization?(input: PrismStripeIncrementAuthorizationInput): Promise<PrismStripeAuthorization>;
|
|
361
|
+
captureAuthorization?(input: PrismStripeCaptureAuthorizationInput): Promise<PrismStripeAuthorization>;
|
|
362
|
+
}
|
|
331
363
|
export type PrismPayPalOrderLifecycleStatus = 'CREATED' | 'SAVED' | 'PAYER_ACTION_REQUIRED' | 'APPROVED' | 'VOIDED' | 'COMPLETED' | 'UNKNOWN';
|
|
332
364
|
export interface PrismPayPalOrderLifecycle {
|
|
333
365
|
orderStatus: PrismPayPalOrderLifecycleStatus;
|
|
Binary file
|
package/package.json
CHANGED