@xapps-platform/backend-kit 0.2.0 → 0.2.2
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 +26 -0
- package/dist/backend/xms.d.ts +159 -0
- package/dist/backend/xms.d.ts.map +1 -0
- package/dist/backend/xms.js +429 -0
- package/dist/backend/xms.js.map +7 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -136,6 +136,7 @@ The current package surface provides:
|
|
|
136
136
|
- default route surface
|
|
137
137
|
- default mode tree
|
|
138
138
|
- payment runtime assembly
|
|
139
|
+
- higher-level XMS purchase workflow helpers
|
|
139
140
|
- host-proxy service assembly
|
|
140
141
|
- request-widget bootstrap verification passthrough
|
|
141
142
|
- subject-profile sourcing hooks
|
|
@@ -148,6 +149,8 @@ Internal package structure is intentionally modular:
|
|
|
148
149
|
option normalization and config shaping
|
|
149
150
|
- `src/backend/paymentRuntime.ts`
|
|
150
151
|
payment runtime assembly and payment-page API helpers
|
|
152
|
+
- `src/backend/xms.ts`
|
|
153
|
+
higher-level XMS purchase workflow helpers on top of the server SDK
|
|
151
154
|
- `src/backend/modules.ts`
|
|
152
155
|
backend module composition
|
|
153
156
|
- `src/backend/modes/*`
|
|
@@ -166,6 +169,29 @@ Current route surface includes:
|
|
|
166
169
|
- guard
|
|
167
170
|
- subject profiles
|
|
168
171
|
|
|
172
|
+
Current workflow helpers also include:
|
|
173
|
+
|
|
174
|
+
- `normalizeXappMonetizationScopeKind(...)`
|
|
175
|
+
normalizes subject / installation / realm scope selection
|
|
176
|
+
- `resolveXappMonetizationScope(...)`
|
|
177
|
+
resolves scope fields from runtime context plus optional realm reference
|
|
178
|
+
- `resolveXappHostedPaymentDefinition(...)`
|
|
179
|
+
resolves a manifest payment definition into hosted session config, including delegated signing metadata
|
|
180
|
+
- `listXappHostedPaymentPresets(...)`
|
|
181
|
+
shapes manifest payment definitions into generic hosted-lane preset options for UI selectors
|
|
182
|
+
- `findXappHostedPaymentPreset(...)`
|
|
183
|
+
looks up one hosted-lane preset by `paymentGuardRef`
|
|
184
|
+
- `readXappMonetizationSnapshot(...)`
|
|
185
|
+
reads the common app-facing XMS state bundle: access, current subscription, and wallet accounts
|
|
186
|
+
- `consumeXappWalletCredits(...)`
|
|
187
|
+
consumes credits from one wallet account through the XMS API and returns the updated wallet, ledger entry, and refreshed access projection
|
|
188
|
+
- `startXappHostedPurchase(...)`
|
|
189
|
+
prepares a purchase intent and creates the lane-bootstrapped gateway payment session
|
|
190
|
+
- `finalizeXappHostedPurchase(...)`
|
|
191
|
+
finalizes a hosted purchase through the platform finalize endpoint, returning reconciliation and issued access state
|
|
192
|
+
- `activateXappPurchaseReference(...)`
|
|
193
|
+
prepares a purchase intent, creates a verified reference transaction, and issues access
|
|
194
|
+
|
|
169
195
|
For hosted-integrator mode, the host API surface can also enforce explicit
|
|
170
196
|
frontend-origin allowlists through `host.allowedOrigins`. Leave it empty for
|
|
171
197
|
same-origin consumers; set it when the browser host runs on another domain and
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
type UnknownRecord = Record<string, unknown>;
|
|
2
|
+
type ScopeFieldsInput = {
|
|
3
|
+
subjectId?: string | null;
|
|
4
|
+
subject_id?: string | null;
|
|
5
|
+
installationId?: string | null;
|
|
6
|
+
installation_id?: string | null;
|
|
7
|
+
realmRef?: string | null;
|
|
8
|
+
realm_ref?: string | null;
|
|
9
|
+
};
|
|
10
|
+
type PreparePurchaseInput = ScopeFieldsInput & {
|
|
11
|
+
xappId: string;
|
|
12
|
+
offeringId?: string | null;
|
|
13
|
+
offering_id?: string | null;
|
|
14
|
+
packageId?: string | null;
|
|
15
|
+
package_id?: string | null;
|
|
16
|
+
priceId?: string | null;
|
|
17
|
+
price_id?: string | null;
|
|
18
|
+
sourceKind?: string | null;
|
|
19
|
+
source_kind?: string | null;
|
|
20
|
+
sourceRef?: string | null;
|
|
21
|
+
source_ref?: string | null;
|
|
22
|
+
paymentLane?: string | null;
|
|
23
|
+
payment_lane?: string | null;
|
|
24
|
+
paymentSessionId?: string | null;
|
|
25
|
+
payment_session_id?: string | null;
|
|
26
|
+
requestId?: string | null;
|
|
27
|
+
request_id?: string | null;
|
|
28
|
+
};
|
|
29
|
+
export type StartXappHostedPurchaseInput = PreparePurchaseInput & {
|
|
30
|
+
paymentGuardRef?: string | null;
|
|
31
|
+
payment_guard_ref?: string | null;
|
|
32
|
+
issuer?: string | null;
|
|
33
|
+
scheme?: string | null;
|
|
34
|
+
paymentScheme?: string | null;
|
|
35
|
+
payment_scheme?: string | null;
|
|
36
|
+
returnUrl?: string | null;
|
|
37
|
+
return_url?: string | null;
|
|
38
|
+
cancelUrl?: string | null;
|
|
39
|
+
cancel_url?: string | null;
|
|
40
|
+
xappsResume?: string | null;
|
|
41
|
+
xapps_resume?: string | null;
|
|
42
|
+
pageUrl?: string | null;
|
|
43
|
+
page_url?: string | null;
|
|
44
|
+
locale?: string | null;
|
|
45
|
+
metadata?: UnknownRecord | null;
|
|
46
|
+
};
|
|
47
|
+
export type FinalizeXappHostedPurchaseInput = {
|
|
48
|
+
xappId: string;
|
|
49
|
+
intentId?: string | null;
|
|
50
|
+
intent_id?: string | null;
|
|
51
|
+
};
|
|
52
|
+
export type ActivateXappPurchaseReferenceInput = PreparePurchaseInput & {
|
|
53
|
+
status?: string | null;
|
|
54
|
+
providerRef?: string | null;
|
|
55
|
+
provider_ref?: string | null;
|
|
56
|
+
evidenceRef?: string | null;
|
|
57
|
+
evidence_ref?: string | null;
|
|
58
|
+
settlementRef?: string | null;
|
|
59
|
+
settlement_ref?: string | null;
|
|
60
|
+
amount?: string | number | null;
|
|
61
|
+
currency?: string | null;
|
|
62
|
+
occurredAt?: string | null;
|
|
63
|
+
occurred_at?: string | null;
|
|
64
|
+
};
|
|
65
|
+
export type ReadXappMonetizationSnapshotInput = ScopeFieldsInput & {
|
|
66
|
+
xappId: string;
|
|
67
|
+
includeWalletAccounts?: boolean | null;
|
|
68
|
+
includeWalletLedger?: boolean | null;
|
|
69
|
+
walletAccountId?: string | null;
|
|
70
|
+
wallet_account_id?: string | null;
|
|
71
|
+
paymentSessionId?: string | null;
|
|
72
|
+
payment_session_id?: string | null;
|
|
73
|
+
requestId?: string | null;
|
|
74
|
+
request_id?: string | null;
|
|
75
|
+
settlementRef?: string | null;
|
|
76
|
+
settlement_ref?: string | null;
|
|
77
|
+
};
|
|
78
|
+
export type ConsumeXappWalletCreditsInput = {
|
|
79
|
+
xappId: string;
|
|
80
|
+
walletAccountId?: string | null;
|
|
81
|
+
wallet_account_id?: string | null;
|
|
82
|
+
amount: string;
|
|
83
|
+
sourceRef?: string | null;
|
|
84
|
+
source_ref?: string | null;
|
|
85
|
+
metadata?: UnknownRecord | null;
|
|
86
|
+
};
|
|
87
|
+
export type ResolveXappMonetizationScopeInput = {
|
|
88
|
+
scopeKind?: string | null;
|
|
89
|
+
scope_kind?: string | null;
|
|
90
|
+
context?: UnknownRecord | null;
|
|
91
|
+
realmRef?: string | null;
|
|
92
|
+
realm_ref?: string | null;
|
|
93
|
+
};
|
|
94
|
+
export type ResolveXappHostedPaymentDefinitionInput = {
|
|
95
|
+
manifest: UnknownRecord;
|
|
96
|
+
paymentGuardRef?: string | null;
|
|
97
|
+
payment_guard_ref?: string | null;
|
|
98
|
+
paymentScheme?: string | null;
|
|
99
|
+
payment_scheme?: string | null;
|
|
100
|
+
env?: Record<string, string | undefined>;
|
|
101
|
+
};
|
|
102
|
+
export type ListXappHostedPaymentPresetsInput = {
|
|
103
|
+
manifest: UnknownRecord;
|
|
104
|
+
};
|
|
105
|
+
type GatewayPurchaseFlowClient = {
|
|
106
|
+
prepareXappPurchaseIntent: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
107
|
+
createXappPurchasePaymentSession?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
108
|
+
reconcileXappPurchasePaymentSession?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
109
|
+
finalizeXappPurchasePaymentSession?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
110
|
+
issueXappPurchaseAccess?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
111
|
+
createXappPurchaseTransaction?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
112
|
+
getXappMonetizationAccess?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
113
|
+
getXappCurrentSubscription?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
114
|
+
listXappWalletAccounts?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
115
|
+
listXappWalletLedger?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
116
|
+
consumeXappWalletCredits?: (input: UnknownRecord) => Promise<UnknownRecord>;
|
|
117
|
+
};
|
|
118
|
+
export declare function normalizeXappMonetizationScopeKind(value: unknown): "subject" | "installation" | "realm";
|
|
119
|
+
export declare function resolveXappMonetizationScope(input: ResolveXappMonetizationScopeInput): {
|
|
120
|
+
scope_kind: "subject" | "installation" | "realm";
|
|
121
|
+
scope_fields: UnknownRecord;
|
|
122
|
+
};
|
|
123
|
+
export declare function listXappHostedPaymentPresets(input: ListXappHostedPaymentPresetsInput): Array<{
|
|
124
|
+
key: string;
|
|
125
|
+
label: string;
|
|
126
|
+
description: string;
|
|
127
|
+
paymentGuardRef: string;
|
|
128
|
+
paymentScheme: string | null;
|
|
129
|
+
issuerMode: string;
|
|
130
|
+
delegated: boolean;
|
|
131
|
+
}>;
|
|
132
|
+
export declare function findXappHostedPaymentPreset(input: ListXappHostedPaymentPresetsInput & {
|
|
133
|
+
paymentGuardRef?: string | null;
|
|
134
|
+
payment_guard_ref?: string | null;
|
|
135
|
+
paymentScheme?: string | null;
|
|
136
|
+
payment_scheme?: string | null;
|
|
137
|
+
}): {
|
|
138
|
+
key: string;
|
|
139
|
+
label: string;
|
|
140
|
+
description: string;
|
|
141
|
+
paymentGuardRef: string;
|
|
142
|
+
paymentScheme: string | null;
|
|
143
|
+
issuerMode: string;
|
|
144
|
+
delegated: boolean;
|
|
145
|
+
};
|
|
146
|
+
export declare function resolveXappHostedPaymentDefinition(input: ResolveXappHostedPaymentDefinitionInput): {
|
|
147
|
+
paymentGuardRef: string;
|
|
148
|
+
issuerMode: string;
|
|
149
|
+
scheme: string | null;
|
|
150
|
+
metadata: UnknownRecord | null;
|
|
151
|
+
definition: UnknownRecord;
|
|
152
|
+
};
|
|
153
|
+
export declare function readXappMonetizationSnapshot(gatewayClient: GatewayPurchaseFlowClient, input: ReadXappMonetizationSnapshotInput): Promise<UnknownRecord>;
|
|
154
|
+
export declare function consumeXappWalletCredits(gatewayClient: GatewayPurchaseFlowClient, input: ConsumeXappWalletCreditsInput): Promise<UnknownRecord>;
|
|
155
|
+
export declare function startXappHostedPurchase(gatewayClient: GatewayPurchaseFlowClient, input: StartXappHostedPurchaseInput): Promise<UnknownRecord>;
|
|
156
|
+
export declare function finalizeXappHostedPurchase(gatewayClient: GatewayPurchaseFlowClient, input: FinalizeXappHostedPurchaseInput): Promise<UnknownRecord>;
|
|
157
|
+
export declare function activateXappPurchaseReference(gatewayClient: GatewayPurchaseFlowClient, input: ActivateXappPurchaseReferenceInput): Promise<UnknownRecord>;
|
|
158
|
+
export {};
|
|
159
|
+
//# sourceMappingURL=xms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xms.d.ts","sourceRoot":"","sources":["../../src/backend/xms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
function readOptionalString(value) {
|
|
2
|
+
const normalized = String(value ?? "").trim();
|
|
3
|
+
return normalized ? normalized : void 0;
|
|
4
|
+
}
|
|
5
|
+
function readString(value) {
|
|
6
|
+
return String(value ?? "").trim();
|
|
7
|
+
}
|
|
8
|
+
function readLocalizedText(value, fallback = "") {
|
|
9
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
10
|
+
return readString(value.en) || readString(value.ro) || Object.values(value).map((item) => readString(item)).find(Boolean) || fallback;
|
|
11
|
+
}
|
|
12
|
+
return readString(value) || fallback;
|
|
13
|
+
}
|
|
14
|
+
function readMetadata(value) {
|
|
15
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
16
|
+
return void 0;
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function requireGatewayMethod(gatewayClient, methodName) {
|
|
21
|
+
const method = gatewayClient[methodName];
|
|
22
|
+
if (typeof method !== "function") {
|
|
23
|
+
throw new TypeError(`gatewayClient must implement ${String(methodName)}`);
|
|
24
|
+
}
|
|
25
|
+
return method;
|
|
26
|
+
}
|
|
27
|
+
function requireIntentId(result, methodName) {
|
|
28
|
+
const preparedIntent = result.prepared_intent && typeof result.prepared_intent === "object" ? result.prepared_intent : null;
|
|
29
|
+
const intentId = readOptionalString(preparedIntent?.purchase_intent_id);
|
|
30
|
+
if (!intentId) {
|
|
31
|
+
throw new Error(`${methodName} returned a purchase intent without purchase_intent_id`);
|
|
32
|
+
}
|
|
33
|
+
return intentId;
|
|
34
|
+
}
|
|
35
|
+
function buildScopeFields(input) {
|
|
36
|
+
return {
|
|
37
|
+
...readOptionalString(input.subjectId ?? input.subject_id) ? { subject_id: readOptionalString(input.subjectId ?? input.subject_id) } : {},
|
|
38
|
+
...readOptionalString(input.installationId ?? input.installation_id) ? { installation_id: readOptionalString(input.installationId ?? input.installation_id) } : {},
|
|
39
|
+
...readOptionalString(input.realmRef ?? input.realm_ref) ? { realm_ref: readOptionalString(input.realmRef ?? input.realm_ref) } : {}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function buildPreparePayload(input) {
|
|
43
|
+
return {
|
|
44
|
+
xappId: input.xappId,
|
|
45
|
+
offering_id: readOptionalString(input.offeringId ?? input.offering_id),
|
|
46
|
+
package_id: readOptionalString(input.packageId ?? input.package_id),
|
|
47
|
+
price_id: readOptionalString(input.priceId ?? input.price_id),
|
|
48
|
+
...buildScopeFields(input),
|
|
49
|
+
source_kind: readOptionalString(input.sourceKind ?? input.source_kind),
|
|
50
|
+
source_ref: readOptionalString(input.sourceRef ?? input.source_ref),
|
|
51
|
+
payment_lane: readOptionalString(input.paymentLane ?? input.payment_lane),
|
|
52
|
+
payment_session_id: readOptionalString(input.paymentSessionId ?? input.payment_session_id),
|
|
53
|
+
request_id: readOptionalString(input.requestId ?? input.request_id)
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function normalizeXappMonetizationScopeKind(value) {
|
|
57
|
+
const raw = readString(value).toLowerCase();
|
|
58
|
+
if (raw === "installation" || raw === "realm") return raw;
|
|
59
|
+
return "subject";
|
|
60
|
+
}
|
|
61
|
+
function resolveXappMonetizationScope(input) {
|
|
62
|
+
const scopeKind = normalizeXappMonetizationScopeKind(input.scopeKind ?? input.scope_kind);
|
|
63
|
+
const context = input.context && typeof input.context === "object" && !Array.isArray(input.context) ? input.context : {};
|
|
64
|
+
if (scopeKind === "installation") {
|
|
65
|
+
const installationId = readString(context.installation_id);
|
|
66
|
+
if (!installationId) {
|
|
67
|
+
throw new Error("Installation context is required for installation-scoped monetization");
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
scope_kind: scopeKind,
|
|
71
|
+
scope_fields: { installation_id: installationId }
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (scopeKind === "realm") {
|
|
75
|
+
const realmRef = readString(input.realmRef ?? input.realm_ref);
|
|
76
|
+
if (!realmRef) {
|
|
77
|
+
throw new Error("realmRef is required for realm-scoped monetization");
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
scope_kind: scopeKind,
|
|
81
|
+
scope_fields: { realm_ref: realmRef }
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const subjectId = readString(context.subject_id);
|
|
85
|
+
if (!subjectId) {
|
|
86
|
+
throw new Error("Subject context is required for subject-scoped monetization");
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
scope_kind: scopeKind,
|
|
90
|
+
scope_fields: { subject_id: subjectId }
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function normalizePaymentIssuerMode(value) {
|
|
94
|
+
const raw = readString(value).toLowerCase();
|
|
95
|
+
if (raw === "gateway_managed" || raw === "tenant_delegated" || raw === "publisher_delegated" || raw === "owner_managed") {
|
|
96
|
+
return raw;
|
|
97
|
+
}
|
|
98
|
+
return "";
|
|
99
|
+
}
|
|
100
|
+
function formatPaymentIssuerModeLabel(issuerMode) {
|
|
101
|
+
const raw = normalizePaymentIssuerMode(issuerMode);
|
|
102
|
+
if (raw === "gateway_managed") return "Gateway managed";
|
|
103
|
+
if (raw === "tenant_delegated") return "Tenant delegated";
|
|
104
|
+
if (raw === "publisher_delegated") return "Publisher delegated";
|
|
105
|
+
if (raw === "owner_managed") return "Owner managed";
|
|
106
|
+
return "Unknown lane";
|
|
107
|
+
}
|
|
108
|
+
function formatPaymentSchemeLabel(value) {
|
|
109
|
+
const raw = readString(value).toLowerCase();
|
|
110
|
+
if (!raw) return "";
|
|
111
|
+
return raw.replace(/_/g, " ");
|
|
112
|
+
}
|
|
113
|
+
function buildHostedPaymentPresetDescription(definition) {
|
|
114
|
+
const paymentUi = readMetadata(definition.payment_ui) || {};
|
|
115
|
+
const copy = readMetadata(paymentUi.copy) || {};
|
|
116
|
+
const subtitle = readLocalizedText(copy.subtitle);
|
|
117
|
+
if (subtitle) return subtitle;
|
|
118
|
+
const title = readLocalizedText(copy.title);
|
|
119
|
+
if (title) return title;
|
|
120
|
+
const issuerMode = normalizePaymentIssuerMode(definition.payment_issuer_mode);
|
|
121
|
+
if (!issuerMode) return "Hosted payment lane from manifest definition.";
|
|
122
|
+
return `${issuerMode.replace(/_/g, " ")} hosted payment lane.`;
|
|
123
|
+
}
|
|
124
|
+
function listAcceptedPaymentSchemes(definition) {
|
|
125
|
+
const out = [];
|
|
126
|
+
const primary = readString(definition.payment_scheme).toLowerCase();
|
|
127
|
+
if (primary) out.push(primary);
|
|
128
|
+
const accepts = Array.isArray(definition.accepts) ? definition.accepts : [];
|
|
129
|
+
for (const item of accepts) {
|
|
130
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) continue;
|
|
131
|
+
const scheme = readString(item.scheme).toLowerCase();
|
|
132
|
+
if (scheme && !out.includes(scheme)) out.push(scheme);
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
function buildHostedPaymentPresetDescriptionForScheme(definition, paymentScheme) {
|
|
137
|
+
const paymentUi = readMetadata(definition.payment_ui) || {};
|
|
138
|
+
const schemes = Array.isArray(paymentUi.schemes) ? paymentUi.schemes : [];
|
|
139
|
+
const schemeUi = schemes.find((item) => {
|
|
140
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) return false;
|
|
141
|
+
return readString(item.scheme).toLowerCase() === paymentScheme;
|
|
142
|
+
});
|
|
143
|
+
if (schemeUi) {
|
|
144
|
+
const subtitle = readLocalizedText(schemeUi.subtitle);
|
|
145
|
+
if (subtitle) return subtitle;
|
|
146
|
+
const title = readLocalizedText(schemeUi.title);
|
|
147
|
+
if (title) return title;
|
|
148
|
+
}
|
|
149
|
+
return buildHostedPaymentPresetDescription(definition);
|
|
150
|
+
}
|
|
151
|
+
function findPaymentGuardDefinition(manifest, paymentGuardRef) {
|
|
152
|
+
const definitions = Array.isArray(manifest.payment_guard_definitions) ? manifest.payment_guard_definitions : Array.isArray(manifest.paymentGuardDefinitions) ? manifest.paymentGuardDefinitions : [];
|
|
153
|
+
for (const definition of definitions) {
|
|
154
|
+
if (!definition || typeof definition !== "object" || Array.isArray(definition)) continue;
|
|
155
|
+
if (readString(definition.name) === paymentGuardRef) {
|
|
156
|
+
return definition;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
function listXappHostedPaymentPresets(input) {
|
|
162
|
+
const manifest = readMetadata(input.manifest) || {};
|
|
163
|
+
const definitions = Array.isArray(manifest.payment_guard_definitions) ? manifest.payment_guard_definitions : Array.isArray(manifest.paymentGuardDefinitions) ? manifest.paymentGuardDefinitions : [];
|
|
164
|
+
return definitions.flatMap((definition) => {
|
|
165
|
+
if (!definition || typeof definition !== "object" || Array.isArray(definition)) return null;
|
|
166
|
+
const record = definition;
|
|
167
|
+
const paymentGuardRef = readString(record.name);
|
|
168
|
+
const issuerMode = normalizePaymentIssuerMode(record.payment_issuer_mode);
|
|
169
|
+
if (!paymentGuardRef || !issuerMode) return null;
|
|
170
|
+
const schemes = listAcceptedPaymentSchemes(record);
|
|
171
|
+
return schemes.map((scheme, index) => {
|
|
172
|
+
const schemeLabel = formatPaymentSchemeLabel(scheme);
|
|
173
|
+
return {
|
|
174
|
+
key: `${paymentGuardRef}:${scheme || index}`,
|
|
175
|
+
label: schemeLabel ? `${formatPaymentIssuerModeLabel(issuerMode)} (${schemeLabel})` : formatPaymentIssuerModeLabel(issuerMode),
|
|
176
|
+
description: buildHostedPaymentPresetDescriptionForScheme(record, scheme),
|
|
177
|
+
paymentGuardRef,
|
|
178
|
+
paymentScheme: scheme || null,
|
|
179
|
+
issuerMode,
|
|
180
|
+
delegated: issuerMode === "tenant_delegated" || issuerMode === "publisher_delegated"
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
}).filter((item) => Boolean(item));
|
|
184
|
+
}
|
|
185
|
+
function findXappHostedPaymentPreset(input) {
|
|
186
|
+
const paymentGuardRef = readString(input.paymentGuardRef ?? input.payment_guard_ref);
|
|
187
|
+
const paymentScheme = readString(input.paymentScheme ?? input.payment_scheme).toLowerCase();
|
|
188
|
+
if (!paymentGuardRef) return null;
|
|
189
|
+
return listXappHostedPaymentPresets({ manifest: input.manifest }).find(
|
|
190
|
+
(item) => item.paymentGuardRef === paymentGuardRef && (!paymentScheme || readString(item.paymentScheme).toLowerCase() === paymentScheme)
|
|
191
|
+
) || null;
|
|
192
|
+
}
|
|
193
|
+
function readDelegatedReturnSecret(issuerMode, env) {
|
|
194
|
+
if (issuerMode === "tenant_delegated") {
|
|
195
|
+
const secret_ref = readString(
|
|
196
|
+
env.TENANT_DELEGATED_PAYMENT_RETURN_SECRET_REF ?? env.XCONECT_TENANT_PAYMENT_RETURN_SECRET_REF ?? env.TENANT_PAYMENT_RETURN_SECRET_REF
|
|
197
|
+
);
|
|
198
|
+
const secret = readString(
|
|
199
|
+
env.TENANT_DELEGATED_PAYMENT_RETURN_SECRET ?? env.XCONECT_TENANT_PAYMENT_RETURN_SECRET ?? env.TENANT_PAYMENT_RETURN_SECRET
|
|
200
|
+
);
|
|
201
|
+
return {
|
|
202
|
+
...secret_ref ? { secret_ref } : {},
|
|
203
|
+
...secret ? { secret } : {}
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (issuerMode === "publisher_delegated") {
|
|
207
|
+
const secret_ref = readString(
|
|
208
|
+
env.PUBLISHER_DELEGATED_PAYMENT_RETURN_SECRET_REF ?? env.PUBLISHER_PAYMENT_RETURN_SECRET_REF
|
|
209
|
+
);
|
|
210
|
+
const secret = readString(
|
|
211
|
+
env.PUBLISHER_DELEGATED_PAYMENT_RETURN_SECRET ?? env.PUBLISHER_PAYMENT_RETURN_SECRET
|
|
212
|
+
);
|
|
213
|
+
return {
|
|
214
|
+
...secret_ref ? { secret_ref } : {},
|
|
215
|
+
...secret ? { secret } : {}
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return {};
|
|
219
|
+
}
|
|
220
|
+
function resolveXappHostedPaymentDefinition(input) {
|
|
221
|
+
const paymentGuardRef = readString(input.paymentGuardRef ?? input.payment_guard_ref);
|
|
222
|
+
if (!paymentGuardRef) {
|
|
223
|
+
throw new Error("paymentGuardRef is required");
|
|
224
|
+
}
|
|
225
|
+
const definition = findPaymentGuardDefinition(input.manifest, paymentGuardRef);
|
|
226
|
+
if (!definition) {
|
|
227
|
+
throw new Error("Unknown payment lane. Choose one of the configured payment definitions.");
|
|
228
|
+
}
|
|
229
|
+
const issuerMode = normalizePaymentIssuerMode(definition.payment_issuer_mode);
|
|
230
|
+
if (!issuerMode) {
|
|
231
|
+
throw new Error(`Unsupported payment issuer mode for ${paymentGuardRef}`);
|
|
232
|
+
}
|
|
233
|
+
const requestedScheme = readString(input.paymentScheme ?? input.payment_scheme).toLowerCase();
|
|
234
|
+
const supportedSchemes = listAcceptedPaymentSchemes(definition);
|
|
235
|
+
const scheme = requestedScheme || supportedSchemes[0] || null;
|
|
236
|
+
if (requestedScheme && !supportedSchemes.includes(requestedScheme)) {
|
|
237
|
+
throw new Error(`Unsupported payment scheme ${requestedScheme} for ${paymentGuardRef}`);
|
|
238
|
+
}
|
|
239
|
+
const env = input.env || {};
|
|
240
|
+
if (issuerMode === "tenant_delegated" || issuerMode === "publisher_delegated") {
|
|
241
|
+
const signingSecret = readDelegatedReturnSecret(issuerMode, env);
|
|
242
|
+
if (!signingSecret.secret_ref && !signingSecret.secret) {
|
|
243
|
+
throw new Error(
|
|
244
|
+
issuerMode === "tenant_delegated" ? "Tenant-delegated payment return secret or secret ref is not configured." : "Publisher-delegated payment return secret or secret ref is not configured."
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
paymentGuardRef,
|
|
249
|
+
issuerMode,
|
|
250
|
+
scheme,
|
|
251
|
+
definition,
|
|
252
|
+
metadata: {
|
|
253
|
+
payment_return_signing: {
|
|
254
|
+
issuer: issuerMode,
|
|
255
|
+
signing_lane: issuerMode,
|
|
256
|
+
resolver_source: "session_metadata_delegated",
|
|
257
|
+
...signingSecret
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
paymentGuardRef,
|
|
264
|
+
issuerMode,
|
|
265
|
+
scheme,
|
|
266
|
+
definition,
|
|
267
|
+
metadata: null
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
function buildSnapshotScopePayload(input) {
|
|
271
|
+
return {
|
|
272
|
+
xappId: input.xappId,
|
|
273
|
+
...buildScopeFields(input)
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
async function readXappMonetizationSnapshot(gatewayClient, input) {
|
|
277
|
+
const getMonetizationAccess = requireGatewayMethod(gatewayClient, "getXappMonetizationAccess");
|
|
278
|
+
const getCurrentSubscription = requireGatewayMethod(gatewayClient, "getXappCurrentSubscription");
|
|
279
|
+
const listWalletAccounts = requireGatewayMethod(gatewayClient, "listXappWalletAccounts");
|
|
280
|
+
const scopePayload = buildSnapshotScopePayload(input);
|
|
281
|
+
const includeWalletAccounts = input.includeWalletAccounts !== false;
|
|
282
|
+
const includeWalletLedger = input.includeWalletLedger === true;
|
|
283
|
+
const [accessResult, currentSubscriptionResult, walletAccountsResult, walletLedgerResult] = await Promise.all([
|
|
284
|
+
getMonetizationAccess(scopePayload),
|
|
285
|
+
getCurrentSubscription(scopePayload),
|
|
286
|
+
includeWalletAccounts ? listWalletAccounts(scopePayload) : Promise.resolve(null),
|
|
287
|
+
includeWalletLedger ? requireGatewayMethod(
|
|
288
|
+
gatewayClient,
|
|
289
|
+
"listXappWalletLedger"
|
|
290
|
+
)({
|
|
291
|
+
xappId: input.xappId,
|
|
292
|
+
...buildScopeFields(input),
|
|
293
|
+
wallet_account_id: readOptionalString(input.walletAccountId ?? input.wallet_account_id),
|
|
294
|
+
payment_session_id: readOptionalString(
|
|
295
|
+
input.paymentSessionId ?? input.payment_session_id
|
|
296
|
+
),
|
|
297
|
+
request_id: readOptionalString(input.requestId ?? input.request_id),
|
|
298
|
+
settlement_ref: readOptionalString(input.settlementRef ?? input.settlement_ref)
|
|
299
|
+
}) : Promise.resolve(null)
|
|
300
|
+
]);
|
|
301
|
+
return {
|
|
302
|
+
access_projection: accessResult?.access_projection && typeof accessResult.access_projection === "object" ? accessResult.access_projection : null,
|
|
303
|
+
current_subscription: currentSubscriptionResult?.current_subscription && typeof currentSubscriptionResult.current_subscription === "object" ? currentSubscriptionResult.current_subscription : null,
|
|
304
|
+
wallet_accounts: walletAccountsResult && Array.isArray(walletAccountsResult.items) ? walletAccountsResult.items : [],
|
|
305
|
+
wallet_ledger: walletLedgerResult && Array.isArray(walletLedgerResult.items) ? walletLedgerResult.items : []
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
async function consumeXappWalletCredits(gatewayClient, input) {
|
|
309
|
+
const consumeWalletCredits = requireGatewayMethod(gatewayClient, "consumeXappWalletCredits");
|
|
310
|
+
const walletAccountId = readOptionalString(input.walletAccountId ?? input.wallet_account_id);
|
|
311
|
+
if (!walletAccountId) {
|
|
312
|
+
throw new Error("walletAccountId is required");
|
|
313
|
+
}
|
|
314
|
+
const amount = readString(input.amount);
|
|
315
|
+
if (!amount) {
|
|
316
|
+
throw new Error("amount is required");
|
|
317
|
+
}
|
|
318
|
+
const consumed = await consumeWalletCredits({
|
|
319
|
+
xappId: input.xappId,
|
|
320
|
+
walletAccountId,
|
|
321
|
+
amount,
|
|
322
|
+
source_ref: readOptionalString(input.sourceRef ?? input.source_ref),
|
|
323
|
+
metadata: readMetadata(input.metadata)
|
|
324
|
+
});
|
|
325
|
+
return {
|
|
326
|
+
wallet_account: consumed?.wallet_account && typeof consumed.wallet_account === "object" ? consumed.wallet_account : null,
|
|
327
|
+
wallet_ledger: consumed?.wallet_ledger && typeof consumed.wallet_ledger === "object" ? consumed.wallet_ledger : null,
|
|
328
|
+
access_projection: consumed?.access_projection && typeof consumed.access_projection === "object" ? consumed.access_projection : null,
|
|
329
|
+
snapshot_id: readOptionalString(consumed?.snapshot_id) ?? null,
|
|
330
|
+
consumed
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
async function startXappHostedPurchase(gatewayClient, input) {
|
|
334
|
+
const preparePurchaseIntent = requireGatewayMethod(gatewayClient, "prepareXappPurchaseIntent");
|
|
335
|
+
const createPurchasePaymentSession = requireGatewayMethod(
|
|
336
|
+
gatewayClient,
|
|
337
|
+
"createXappPurchasePaymentSession"
|
|
338
|
+
);
|
|
339
|
+
const prepared = await preparePurchaseIntent(buildPreparePayload(input));
|
|
340
|
+
const intentId = requireIntentId(prepared, "prepareXappPurchaseIntent");
|
|
341
|
+
const paymentSession = await createPurchasePaymentSession({
|
|
342
|
+
xappId: input.xappId,
|
|
343
|
+
intentId,
|
|
344
|
+
payment_guard_ref: readOptionalString(input.paymentGuardRef ?? input.payment_guard_ref),
|
|
345
|
+
issuer: readOptionalString(input.issuer),
|
|
346
|
+
scheme: readOptionalString(input.scheme),
|
|
347
|
+
payment_scheme: readOptionalString(input.paymentScheme ?? input.payment_scheme),
|
|
348
|
+
return_url: readOptionalString(input.returnUrl ?? input.return_url),
|
|
349
|
+
cancel_url: readOptionalString(input.cancelUrl ?? input.cancel_url),
|
|
350
|
+
xapps_resume: readOptionalString(input.xappsResume ?? input.xapps_resume),
|
|
351
|
+
page_url: readOptionalString(input.pageUrl ?? input.page_url),
|
|
352
|
+
locale: readOptionalString(input.locale),
|
|
353
|
+
...buildScopeFields(input),
|
|
354
|
+
metadata: readMetadata(input.metadata)
|
|
355
|
+
});
|
|
356
|
+
return {
|
|
357
|
+
prepared_intent: prepared?.prepared_intent && typeof prepared.prepared_intent === "object" ? prepared.prepared_intent : null,
|
|
358
|
+
payment_session: paymentSession?.payment_session && typeof paymentSession.payment_session === "object" ? paymentSession.payment_session : null,
|
|
359
|
+
payment_page_url: readOptionalString(paymentSession?.payment_page_url) ?? null
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
async function finalizeXappHostedPurchase(gatewayClient, input) {
|
|
363
|
+
const finalizePurchasePaymentSession = requireGatewayMethod(
|
|
364
|
+
gatewayClient,
|
|
365
|
+
"finalizeXappPurchasePaymentSession"
|
|
366
|
+
);
|
|
367
|
+
const intentId = readOptionalString(input.intentId ?? input.intent_id);
|
|
368
|
+
if (!intentId) {
|
|
369
|
+
throw new Error("intentId is required");
|
|
370
|
+
}
|
|
371
|
+
const finalized = await finalizePurchasePaymentSession({
|
|
372
|
+
xappId: input.xappId,
|
|
373
|
+
intentId
|
|
374
|
+
});
|
|
375
|
+
return {
|
|
376
|
+
prepared_intent: finalized?.prepared_intent && typeof finalized.prepared_intent === "object" ? finalized.prepared_intent : null,
|
|
377
|
+
payment_session: finalized?.payment_session && typeof finalized.payment_session === "object" ? finalized.payment_session : null,
|
|
378
|
+
transaction: finalized?.transaction && typeof finalized.transaction === "object" ? finalized.transaction : null,
|
|
379
|
+
access_projection: finalized?.access_projection && typeof finalized.access_projection === "object" ? finalized.access_projection : null,
|
|
380
|
+
issued: finalized
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
async function activateXappPurchaseReference(gatewayClient, input) {
|
|
384
|
+
const preparePurchaseIntent = requireGatewayMethod(gatewayClient, "prepareXappPurchaseIntent");
|
|
385
|
+
const createPurchaseTransaction = requireGatewayMethod(
|
|
386
|
+
gatewayClient,
|
|
387
|
+
"createXappPurchaseTransaction"
|
|
388
|
+
);
|
|
389
|
+
const issuePurchaseAccess = requireGatewayMethod(gatewayClient, "issueXappPurchaseAccess");
|
|
390
|
+
const prepared = await preparePurchaseIntent(buildPreparePayload(input));
|
|
391
|
+
const intentId = requireIntentId(prepared, "prepareXappPurchaseIntent");
|
|
392
|
+
const preparedIntent = prepared?.prepared_intent && typeof prepared.prepared_intent === "object" ? prepared.prepared_intent : null;
|
|
393
|
+
const preparedPrice = preparedIntent?.price && typeof preparedIntent.price === "object" ? preparedIntent.price : null;
|
|
394
|
+
const transaction = await createPurchaseTransaction({
|
|
395
|
+
xappId: input.xappId,
|
|
396
|
+
intentId,
|
|
397
|
+
status: readOptionalString(input.status) ?? "verified",
|
|
398
|
+
provider_ref: readOptionalString(input.providerRef ?? input.provider_ref),
|
|
399
|
+
evidence_ref: readOptionalString(input.evidenceRef ?? input.evidence_ref),
|
|
400
|
+
payment_session_id: readOptionalString(input.paymentSessionId ?? input.payment_session_id),
|
|
401
|
+
request_id: readOptionalString(input.requestId ?? input.request_id),
|
|
402
|
+
settlement_ref: readOptionalString(input.settlementRef ?? input.settlement_ref),
|
|
403
|
+
amount: input.amount ?? preparedPrice?.amount ?? void 0,
|
|
404
|
+
currency: readOptionalString(input.currency) ?? readOptionalString(preparedPrice?.currency),
|
|
405
|
+
occurred_at: readOptionalString(input.occurredAt ?? input.occurred_at)
|
|
406
|
+
});
|
|
407
|
+
const issued = await issuePurchaseAccess({
|
|
408
|
+
xappId: input.xappId,
|
|
409
|
+
intentId
|
|
410
|
+
});
|
|
411
|
+
return {
|
|
412
|
+
prepared_intent: preparedIntent,
|
|
413
|
+
transaction: transaction?.transaction && typeof transaction.transaction === "object" ? transaction.transaction : null,
|
|
414
|
+
issued
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
export {
|
|
418
|
+
activateXappPurchaseReference,
|
|
419
|
+
consumeXappWalletCredits,
|
|
420
|
+
finalizeXappHostedPurchase,
|
|
421
|
+
findXappHostedPaymentPreset,
|
|
422
|
+
listXappHostedPaymentPresets,
|
|
423
|
+
normalizeXappMonetizationScopeKind,
|
|
424
|
+
readXappMonetizationSnapshot,
|
|
425
|
+
resolveXappHostedPaymentDefinition,
|
|
426
|
+
resolveXappMonetizationScope,
|
|
427
|
+
startXappHostedPurchase
|
|
428
|
+
};
|
|
429
|
+
//# sourceMappingURL=xms.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/backend/xms.ts"],
|
|
4
|
+
"sourcesContent": ["type UnknownRecord = Record<string, unknown>;\n\ntype ScopeFieldsInput = {\n subjectId?: string | null;\n subject_id?: string | null;\n installationId?: string | null;\n installation_id?: string | null;\n realmRef?: string | null;\n realm_ref?: string | null;\n};\n\ntype PreparePurchaseInput = ScopeFieldsInput & {\n xappId: string;\n offeringId?: string | null;\n offering_id?: string | null;\n packageId?: string | null;\n package_id?: string | null;\n priceId?: string | null;\n price_id?: string | null;\n sourceKind?: string | null;\n source_kind?: string | null;\n sourceRef?: string | null;\n source_ref?: string | null;\n paymentLane?: string | null;\n payment_lane?: string | null;\n paymentSessionId?: string | null;\n payment_session_id?: string | null;\n requestId?: string | null;\n request_id?: string | null;\n};\n\nexport type StartXappHostedPurchaseInput = PreparePurchaseInput & {\n paymentGuardRef?: string | null;\n payment_guard_ref?: string | null;\n issuer?: string | null;\n scheme?: string | null;\n paymentScheme?: string | null;\n payment_scheme?: string | null;\n returnUrl?: string | null;\n return_url?: string | null;\n cancelUrl?: string | null;\n cancel_url?: string | null;\n xappsResume?: string | null;\n xapps_resume?: string | null;\n pageUrl?: string | null;\n page_url?: string | null;\n locale?: string | null;\n metadata?: UnknownRecord | null;\n};\n\nexport type FinalizeXappHostedPurchaseInput = {\n xappId: string;\n intentId?: string | null;\n intent_id?: string | null;\n};\n\nexport type ActivateXappPurchaseReferenceInput = PreparePurchaseInput & {\n status?: string | null;\n providerRef?: string | null;\n provider_ref?: string | null;\n evidenceRef?: string | null;\n evidence_ref?: string | null;\n settlementRef?: string | null;\n settlement_ref?: string | null;\n amount?: string | number | null;\n currency?: string | null;\n occurredAt?: string | null;\n occurred_at?: string | null;\n};\n\nexport type ReadXappMonetizationSnapshotInput = ScopeFieldsInput & {\n xappId: string;\n includeWalletAccounts?: boolean | null;\n includeWalletLedger?: boolean | null;\n walletAccountId?: string | null;\n wallet_account_id?: string | null;\n paymentSessionId?: string | null;\n payment_session_id?: string | null;\n requestId?: string | null;\n request_id?: string | null;\n settlementRef?: string | null;\n settlement_ref?: string | null;\n};\n\nexport type ConsumeXappWalletCreditsInput = {\n xappId: string;\n walletAccountId?: string | null;\n wallet_account_id?: string | null;\n amount: string;\n sourceRef?: string | null;\n source_ref?: string | null;\n metadata?: UnknownRecord | null;\n};\n\nexport type ResolveXappMonetizationScopeInput = {\n scopeKind?: string | null;\n scope_kind?: string | null;\n context?: UnknownRecord | null;\n realmRef?: string | null;\n realm_ref?: string | null;\n};\n\nexport type ResolveXappHostedPaymentDefinitionInput = {\n manifest: UnknownRecord;\n paymentGuardRef?: string | null;\n payment_guard_ref?: string | null;\n paymentScheme?: string | null;\n payment_scheme?: string | null;\n env?: Record<string, string | undefined>;\n};\n\nexport type ListXappHostedPaymentPresetsInput = {\n manifest: UnknownRecord;\n};\n\ntype GatewayPurchaseFlowClient = {\n prepareXappPurchaseIntent: (input: UnknownRecord) => Promise<UnknownRecord>;\n createXappPurchasePaymentSession?: (input: UnknownRecord) => Promise<UnknownRecord>;\n reconcileXappPurchasePaymentSession?: (input: UnknownRecord) => Promise<UnknownRecord>;\n finalizeXappPurchasePaymentSession?: (input: UnknownRecord) => Promise<UnknownRecord>;\n issueXappPurchaseAccess?: (input: UnknownRecord) => Promise<UnknownRecord>;\n createXappPurchaseTransaction?: (input: UnknownRecord) => Promise<UnknownRecord>;\n getXappMonetizationAccess?: (input: UnknownRecord) => Promise<UnknownRecord>;\n getXappCurrentSubscription?: (input: UnknownRecord) => Promise<UnknownRecord>;\n listXappWalletAccounts?: (input: UnknownRecord) => Promise<UnknownRecord>;\n listXappWalletLedger?: (input: UnknownRecord) => Promise<UnknownRecord>;\n consumeXappWalletCredits?: (input: UnknownRecord) => Promise<UnknownRecord>;\n};\n\nfunction readOptionalString(value: unknown): string | undefined {\n const normalized = String(value ?? \"\").trim();\n return normalized ? normalized : undefined;\n}\n\nfunction readString(value: unknown): string {\n return String(value ?? \"\").trim();\n}\n\nfunction readLocalizedText(value: unknown, fallback = \"\"): string {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n return (\n readString((value as UnknownRecord).en) ||\n readString((value as UnknownRecord).ro) ||\n Object.values(value as UnknownRecord)\n .map((item) => readString(item))\n .find(Boolean) ||\n fallback\n );\n }\n return readString(value) || fallback;\n}\n\nfunction readMetadata(value: unknown): UnknownRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as UnknownRecord;\n}\n\nfunction requireGatewayMethod<T extends keyof GatewayPurchaseFlowClient>(\n gatewayClient: GatewayPurchaseFlowClient,\n methodName: T,\n): NonNullable<GatewayPurchaseFlowClient[T]> {\n const method = gatewayClient[methodName];\n if (typeof method !== \"function\") {\n throw new TypeError(`gatewayClient must implement ${String(methodName)}`);\n }\n return method as NonNullable<GatewayPurchaseFlowClient[T]>;\n}\n\nfunction requireIntentId(result: UnknownRecord, methodName: string): string {\n const preparedIntent =\n result.prepared_intent && typeof result.prepared_intent === \"object\"\n ? (result.prepared_intent as UnknownRecord)\n : null;\n const intentId = readOptionalString(preparedIntent?.purchase_intent_id);\n if (!intentId) {\n throw new Error(`${methodName} returned a purchase intent without purchase_intent_id`);\n }\n return intentId;\n}\n\nfunction buildScopeFields(input: ScopeFieldsInput): UnknownRecord {\n return {\n ...(readOptionalString(input.subjectId ?? input.subject_id)\n ? { subject_id: readOptionalString(input.subjectId ?? input.subject_id) }\n : {}),\n ...(readOptionalString(input.installationId ?? input.installation_id)\n ? { installation_id: readOptionalString(input.installationId ?? input.installation_id) }\n : {}),\n ...(readOptionalString(input.realmRef ?? input.realm_ref)\n ? { realm_ref: readOptionalString(input.realmRef ?? input.realm_ref) }\n : {}),\n };\n}\n\nfunction buildPreparePayload(input: PreparePurchaseInput): UnknownRecord {\n return {\n xappId: input.xappId,\n offering_id: readOptionalString(input.offeringId ?? input.offering_id),\n package_id: readOptionalString(input.packageId ?? input.package_id),\n price_id: readOptionalString(input.priceId ?? input.price_id),\n ...buildScopeFields(input),\n source_kind: readOptionalString(input.sourceKind ?? input.source_kind),\n source_ref: readOptionalString(input.sourceRef ?? input.source_ref),\n payment_lane: readOptionalString(input.paymentLane ?? input.payment_lane),\n payment_session_id: readOptionalString(input.paymentSessionId ?? input.payment_session_id),\n request_id: readOptionalString(input.requestId ?? input.request_id),\n };\n}\n\nexport function normalizeXappMonetizationScopeKind(\n value: unknown,\n): \"subject\" | \"installation\" | \"realm\" {\n const raw = readString(value).toLowerCase();\n if (raw === \"installation\" || raw === \"realm\") return raw;\n return \"subject\";\n}\n\nexport function resolveXappMonetizationScope(input: ResolveXappMonetizationScopeInput): {\n scope_kind: \"subject\" | \"installation\" | \"realm\";\n scope_fields: UnknownRecord;\n} {\n const scopeKind = normalizeXappMonetizationScopeKind(input.scopeKind ?? input.scope_kind);\n const context =\n input.context && typeof input.context === \"object\" && !Array.isArray(input.context)\n ? input.context\n : {};\n if (scopeKind === \"installation\") {\n const installationId = readString(context.installation_id);\n if (!installationId) {\n throw new Error(\"Installation context is required for installation-scoped monetization\");\n }\n return {\n scope_kind: scopeKind,\n scope_fields: { installation_id: installationId },\n };\n }\n if (scopeKind === \"realm\") {\n const realmRef = readString(input.realmRef ?? input.realm_ref);\n if (!realmRef) {\n throw new Error(\"realmRef is required for realm-scoped monetization\");\n }\n return {\n scope_kind: scopeKind,\n scope_fields: { realm_ref: realmRef },\n };\n }\n const subjectId = readString(context.subject_id);\n if (!subjectId) {\n throw new Error(\"Subject context is required for subject-scoped monetization\");\n }\n return {\n scope_kind: scopeKind,\n scope_fields: { subject_id: subjectId },\n };\n}\n\nfunction normalizePaymentIssuerMode(value: unknown): string {\n const raw = readString(value).toLowerCase();\n if (\n raw === \"gateway_managed\" ||\n raw === \"tenant_delegated\" ||\n raw === \"publisher_delegated\" ||\n raw === \"owner_managed\"\n ) {\n return raw;\n }\n return \"\";\n}\n\nfunction formatPaymentIssuerModeLabel(issuerMode: string) {\n const raw = normalizePaymentIssuerMode(issuerMode);\n if (raw === \"gateway_managed\") return \"Gateway managed\";\n if (raw === \"tenant_delegated\") return \"Tenant delegated\";\n if (raw === \"publisher_delegated\") return \"Publisher delegated\";\n if (raw === \"owner_managed\") return \"Owner managed\";\n return \"Unknown lane\";\n}\n\nfunction formatPaymentSchemeLabel(value: unknown) {\n const raw = readString(value).toLowerCase();\n if (!raw) return \"\";\n return raw.replace(/_/g, \" \");\n}\n\nfunction buildHostedPaymentPresetDescription(definition: UnknownRecord) {\n const paymentUi = readMetadata(definition.payment_ui) || {};\n const copy = readMetadata(paymentUi.copy) || {};\n const subtitle = readLocalizedText(copy.subtitle);\n if (subtitle) return subtitle;\n const title = readLocalizedText(copy.title);\n if (title) return title;\n const issuerMode = normalizePaymentIssuerMode(definition.payment_issuer_mode);\n if (!issuerMode) return \"Hosted payment lane from manifest definition.\";\n return `${issuerMode.replace(/_/g, \" \")} hosted payment lane.`;\n}\n\nfunction listAcceptedPaymentSchemes(definition: UnknownRecord): string[] {\n const out: string[] = [];\n const primary = readString(definition.payment_scheme).toLowerCase();\n if (primary) out.push(primary);\n const accepts = Array.isArray(definition.accepts) ? definition.accepts : [];\n for (const item of accepts) {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) continue;\n const scheme = readString((item as UnknownRecord).scheme).toLowerCase();\n if (scheme && !out.includes(scheme)) out.push(scheme);\n }\n return out;\n}\n\nfunction buildHostedPaymentPresetDescriptionForScheme(\n definition: UnknownRecord,\n paymentScheme: string,\n) {\n const paymentUi = readMetadata(definition.payment_ui) || {};\n const schemes = Array.isArray(paymentUi.schemes) ? paymentUi.schemes : [];\n const schemeUi = schemes.find((item) => {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) return false;\n return readString((item as UnknownRecord).scheme).toLowerCase() === paymentScheme;\n }) as UnknownRecord | undefined;\n if (schemeUi) {\n const subtitle = readLocalizedText(schemeUi.subtitle);\n if (subtitle) return subtitle;\n const title = readLocalizedText(schemeUi.title);\n if (title) return title;\n }\n return buildHostedPaymentPresetDescription(definition);\n}\n\nfunction findPaymentGuardDefinition(\n manifest: UnknownRecord,\n paymentGuardRef: string,\n): UnknownRecord | null {\n const definitions = Array.isArray(manifest.payment_guard_definitions)\n ? manifest.payment_guard_definitions\n : Array.isArray((manifest as any).paymentGuardDefinitions)\n ? ((manifest as any).paymentGuardDefinitions as unknown[])\n : [];\n for (const definition of definitions) {\n if (!definition || typeof definition !== \"object\" || Array.isArray(definition)) continue;\n if (readString((definition as UnknownRecord).name) === paymentGuardRef) {\n return definition as UnknownRecord;\n }\n }\n return null;\n}\n\nexport function listXappHostedPaymentPresets(input: ListXappHostedPaymentPresetsInput): Array<{\n key: string;\n label: string;\n description: string;\n paymentGuardRef: string;\n paymentScheme: string | null;\n issuerMode: string;\n delegated: boolean;\n}> {\n const manifest = readMetadata(input.manifest) || {};\n const definitions = Array.isArray(manifest.payment_guard_definitions)\n ? manifest.payment_guard_definitions\n : Array.isArray((manifest as any).paymentGuardDefinitions)\n ? ((manifest as any).paymentGuardDefinitions as unknown[])\n : [];\n return definitions\n .flatMap((definition) => {\n if (!definition || typeof definition !== \"object\" || Array.isArray(definition)) return null;\n const record = definition as UnknownRecord;\n const paymentGuardRef = readString(record.name);\n const issuerMode = normalizePaymentIssuerMode(record.payment_issuer_mode);\n if (!paymentGuardRef || !issuerMode) return null;\n const schemes = listAcceptedPaymentSchemes(record);\n return schemes.map((scheme, index) => {\n const schemeLabel = formatPaymentSchemeLabel(scheme);\n return {\n key: `${paymentGuardRef}:${scheme || index}`,\n label: schemeLabel\n ? `${formatPaymentIssuerModeLabel(issuerMode)} (${schemeLabel})`\n : formatPaymentIssuerModeLabel(issuerMode),\n description: buildHostedPaymentPresetDescriptionForScheme(record, scheme),\n paymentGuardRef,\n paymentScheme: scheme || null,\n issuerMode,\n delegated: issuerMode === \"tenant_delegated\" || issuerMode === \"publisher_delegated\",\n };\n });\n })\n .filter((item): item is NonNullable<typeof item> => Boolean(item));\n}\n\nexport function findXappHostedPaymentPreset(\n input: ListXappHostedPaymentPresetsInput & {\n paymentGuardRef?: string | null;\n payment_guard_ref?: string | null;\n paymentScheme?: string | null;\n payment_scheme?: string | null;\n },\n) {\n const paymentGuardRef = readString(input.paymentGuardRef ?? input.payment_guard_ref);\n const paymentScheme = readString(input.paymentScheme ?? input.payment_scheme).toLowerCase();\n if (!paymentGuardRef) return null;\n return (\n listXappHostedPaymentPresets({ manifest: input.manifest }).find(\n (item) =>\n item.paymentGuardRef === paymentGuardRef &&\n (!paymentScheme || readString(item.paymentScheme).toLowerCase() === paymentScheme),\n ) || null\n );\n}\n\nfunction readDelegatedReturnSecret(\n issuerMode: string,\n env: Record<string, string | undefined>,\n): { secret?: string; secret_ref?: string } {\n if (issuerMode === \"tenant_delegated\") {\n const secret_ref = readString(\n env.TENANT_DELEGATED_PAYMENT_RETURN_SECRET_REF ??\n env.XCONECT_TENANT_PAYMENT_RETURN_SECRET_REF ??\n env.TENANT_PAYMENT_RETURN_SECRET_REF,\n );\n const secret = readString(\n env.TENANT_DELEGATED_PAYMENT_RETURN_SECRET ??\n env.XCONECT_TENANT_PAYMENT_RETURN_SECRET ??\n env.TENANT_PAYMENT_RETURN_SECRET,\n );\n return {\n ...(secret_ref ? { secret_ref } : {}),\n ...(secret ? { secret } : {}),\n };\n }\n if (issuerMode === \"publisher_delegated\") {\n const secret_ref = readString(\n env.PUBLISHER_DELEGATED_PAYMENT_RETURN_SECRET_REF ?? env.PUBLISHER_PAYMENT_RETURN_SECRET_REF,\n );\n const secret = readString(\n env.PUBLISHER_DELEGATED_PAYMENT_RETURN_SECRET ?? env.PUBLISHER_PAYMENT_RETURN_SECRET,\n );\n return {\n ...(secret_ref ? { secret_ref } : {}),\n ...(secret ? { secret } : {}),\n };\n }\n return {};\n}\n\nexport function resolveXappHostedPaymentDefinition(\n input: ResolveXappHostedPaymentDefinitionInput,\n): {\n paymentGuardRef: string;\n issuerMode: string;\n scheme: string | null;\n metadata: UnknownRecord | null;\n definition: UnknownRecord;\n} {\n const paymentGuardRef = readString(input.paymentGuardRef ?? input.payment_guard_ref);\n if (!paymentGuardRef) {\n throw new Error(\"paymentGuardRef is required\");\n }\n const definition = findPaymentGuardDefinition(input.manifest, paymentGuardRef);\n if (!definition) {\n throw new Error(\"Unknown payment lane. Choose one of the configured payment definitions.\");\n }\n const issuerMode = normalizePaymentIssuerMode(definition.payment_issuer_mode);\n if (!issuerMode) {\n throw new Error(`Unsupported payment issuer mode for ${paymentGuardRef}`);\n }\n const requestedScheme = readString(input.paymentScheme ?? input.payment_scheme).toLowerCase();\n const supportedSchemes = listAcceptedPaymentSchemes(definition);\n const scheme = requestedScheme || supportedSchemes[0] || null;\n if (requestedScheme && !supportedSchemes.includes(requestedScheme)) {\n throw new Error(`Unsupported payment scheme ${requestedScheme} for ${paymentGuardRef}`);\n }\n const env = input.env || {};\n if (issuerMode === \"tenant_delegated\" || issuerMode === \"publisher_delegated\") {\n const signingSecret = readDelegatedReturnSecret(issuerMode, env);\n if (!signingSecret.secret_ref && !signingSecret.secret) {\n throw new Error(\n issuerMode === \"tenant_delegated\"\n ? \"Tenant-delegated payment return secret or secret ref is not configured.\"\n : \"Publisher-delegated payment return secret or secret ref is not configured.\",\n );\n }\n return {\n paymentGuardRef,\n issuerMode,\n scheme,\n definition,\n metadata: {\n payment_return_signing: {\n issuer: issuerMode,\n signing_lane: issuerMode,\n resolver_source: \"session_metadata_delegated\",\n ...signingSecret,\n },\n },\n };\n }\n return {\n paymentGuardRef,\n issuerMode,\n scheme,\n definition,\n metadata: null,\n };\n}\n\nfunction buildSnapshotScopePayload(input: ScopeFieldsInput & { xappId: string }): UnknownRecord {\n return {\n xappId: input.xappId,\n ...buildScopeFields(input),\n };\n}\n\nexport async function readXappMonetizationSnapshot(\n gatewayClient: GatewayPurchaseFlowClient,\n input: ReadXappMonetizationSnapshotInput,\n): Promise<UnknownRecord> {\n const getMonetizationAccess = requireGatewayMethod(gatewayClient, \"getXappMonetizationAccess\");\n const getCurrentSubscription = requireGatewayMethod(gatewayClient, \"getXappCurrentSubscription\");\n const listWalletAccounts = requireGatewayMethod(gatewayClient, \"listXappWalletAccounts\");\n const scopePayload = buildSnapshotScopePayload(input);\n const includeWalletAccounts = input.includeWalletAccounts !== false;\n const includeWalletLedger = input.includeWalletLedger === true;\n\n const [accessResult, currentSubscriptionResult, walletAccountsResult, walletLedgerResult] =\n await Promise.all([\n getMonetizationAccess(scopePayload),\n getCurrentSubscription(scopePayload),\n includeWalletAccounts ? listWalletAccounts(scopePayload) : Promise.resolve(null),\n includeWalletLedger\n ? requireGatewayMethod(\n gatewayClient,\n \"listXappWalletLedger\",\n )({\n xappId: input.xappId,\n ...buildScopeFields(input),\n wallet_account_id: readOptionalString(input.walletAccountId ?? input.wallet_account_id),\n payment_session_id: readOptionalString(\n input.paymentSessionId ?? input.payment_session_id,\n ),\n request_id: readOptionalString(input.requestId ?? input.request_id),\n settlement_ref: readOptionalString(input.settlementRef ?? input.settlement_ref),\n })\n : Promise.resolve(null),\n ]);\n\n return {\n access_projection:\n accessResult?.access_projection && typeof accessResult.access_projection === \"object\"\n ? accessResult.access_projection\n : null,\n current_subscription:\n currentSubscriptionResult?.current_subscription &&\n typeof currentSubscriptionResult.current_subscription === \"object\"\n ? currentSubscriptionResult.current_subscription\n : null,\n wallet_accounts:\n walletAccountsResult && Array.isArray(walletAccountsResult.items)\n ? walletAccountsResult.items\n : [],\n wallet_ledger:\n walletLedgerResult && Array.isArray(walletLedgerResult.items) ? walletLedgerResult.items : [],\n };\n}\n\nexport async function consumeXappWalletCredits(\n gatewayClient: GatewayPurchaseFlowClient,\n input: ConsumeXappWalletCreditsInput,\n): Promise<UnknownRecord> {\n const consumeWalletCredits = requireGatewayMethod(gatewayClient, \"consumeXappWalletCredits\");\n const walletAccountId = readOptionalString(input.walletAccountId ?? input.wallet_account_id);\n if (!walletAccountId) {\n throw new Error(\"walletAccountId is required\");\n }\n const amount = readString(input.amount);\n if (!amount) {\n throw new Error(\"amount is required\");\n }\n const consumed = await consumeWalletCredits({\n xappId: input.xappId,\n walletAccountId,\n amount,\n source_ref: readOptionalString(input.sourceRef ?? input.source_ref),\n metadata: readMetadata(input.metadata),\n });\n return {\n wallet_account:\n consumed?.wallet_account && typeof consumed.wallet_account === \"object\"\n ? consumed.wallet_account\n : null,\n wallet_ledger:\n consumed?.wallet_ledger && typeof consumed.wallet_ledger === \"object\"\n ? consumed.wallet_ledger\n : null,\n access_projection:\n consumed?.access_projection && typeof consumed.access_projection === \"object\"\n ? consumed.access_projection\n : null,\n snapshot_id: readOptionalString(consumed?.snapshot_id) ?? null,\n consumed,\n };\n}\n\nexport async function startXappHostedPurchase(\n gatewayClient: GatewayPurchaseFlowClient,\n input: StartXappHostedPurchaseInput,\n): Promise<UnknownRecord> {\n const preparePurchaseIntent = requireGatewayMethod(gatewayClient, \"prepareXappPurchaseIntent\");\n const createPurchasePaymentSession = requireGatewayMethod(\n gatewayClient,\n \"createXappPurchasePaymentSession\",\n );\n const prepared = await preparePurchaseIntent(buildPreparePayload(input));\n const intentId = requireIntentId(prepared, \"prepareXappPurchaseIntent\");\n const paymentSession = await createPurchasePaymentSession({\n xappId: input.xappId,\n intentId,\n payment_guard_ref: readOptionalString(input.paymentGuardRef ?? input.payment_guard_ref),\n issuer: readOptionalString(input.issuer),\n scheme: readOptionalString(input.scheme),\n payment_scheme: readOptionalString(input.paymentScheme ?? input.payment_scheme),\n return_url: readOptionalString(input.returnUrl ?? input.return_url),\n cancel_url: readOptionalString(input.cancelUrl ?? input.cancel_url),\n xapps_resume: readOptionalString(input.xappsResume ?? input.xapps_resume),\n page_url: readOptionalString(input.pageUrl ?? input.page_url),\n locale: readOptionalString(input.locale),\n ...buildScopeFields(input),\n metadata: readMetadata(input.metadata),\n });\n return {\n prepared_intent:\n prepared?.prepared_intent && typeof prepared.prepared_intent === \"object\"\n ? prepared.prepared_intent\n : null,\n payment_session:\n paymentSession?.payment_session && typeof paymentSession.payment_session === \"object\"\n ? paymentSession.payment_session\n : null,\n payment_page_url: readOptionalString(paymentSession?.payment_page_url) ?? null,\n };\n}\n\nexport async function finalizeXappHostedPurchase(\n gatewayClient: GatewayPurchaseFlowClient,\n input: FinalizeXappHostedPurchaseInput,\n): Promise<UnknownRecord> {\n const finalizePurchasePaymentSession = requireGatewayMethod(\n gatewayClient,\n \"finalizeXappPurchasePaymentSession\",\n );\n const intentId = readOptionalString(input.intentId ?? input.intent_id);\n if (!intentId) {\n throw new Error(\"intentId is required\");\n }\n const finalized = await finalizePurchasePaymentSession({\n xappId: input.xappId,\n intentId,\n });\n return {\n prepared_intent:\n finalized?.prepared_intent && typeof finalized.prepared_intent === \"object\"\n ? finalized.prepared_intent\n : null,\n payment_session:\n finalized?.payment_session && typeof finalized.payment_session === \"object\"\n ? finalized.payment_session\n : null,\n transaction:\n finalized?.transaction && typeof finalized.transaction === \"object\"\n ? finalized.transaction\n : null,\n access_projection:\n finalized?.access_projection && typeof finalized.access_projection === \"object\"\n ? finalized.access_projection\n : null,\n issued: finalized,\n };\n}\n\nexport async function activateXappPurchaseReference(\n gatewayClient: GatewayPurchaseFlowClient,\n input: ActivateXappPurchaseReferenceInput,\n): Promise<UnknownRecord> {\n const preparePurchaseIntent = requireGatewayMethod(gatewayClient, \"prepareXappPurchaseIntent\");\n const createPurchaseTransaction = requireGatewayMethod(\n gatewayClient,\n \"createXappPurchaseTransaction\",\n );\n const issuePurchaseAccess = requireGatewayMethod(gatewayClient, \"issueXappPurchaseAccess\");\n const prepared = await preparePurchaseIntent(buildPreparePayload(input));\n const intentId = requireIntentId(prepared, \"prepareXappPurchaseIntent\");\n const preparedIntent =\n prepared?.prepared_intent && typeof prepared.prepared_intent === \"object\"\n ? (prepared.prepared_intent as UnknownRecord)\n : null;\n const preparedPrice =\n preparedIntent?.price && typeof preparedIntent.price === \"object\"\n ? (preparedIntent.price as UnknownRecord)\n : null;\n const transaction = await createPurchaseTransaction({\n xappId: input.xappId,\n intentId,\n status: readOptionalString(input.status) ?? \"verified\",\n provider_ref: readOptionalString(input.providerRef ?? input.provider_ref),\n evidence_ref: readOptionalString(input.evidenceRef ?? input.evidence_ref),\n payment_session_id: readOptionalString(input.paymentSessionId ?? input.payment_session_id),\n request_id: readOptionalString(input.requestId ?? input.request_id),\n settlement_ref: readOptionalString(input.settlementRef ?? input.settlement_ref),\n amount: input.amount ?? preparedPrice?.amount ?? undefined,\n currency: readOptionalString(input.currency) ?? readOptionalString(preparedPrice?.currency),\n occurred_at: readOptionalString(input.occurredAt ?? input.occurred_at),\n });\n const issued = await issuePurchaseAccess({\n xappId: input.xappId,\n intentId,\n });\n return {\n prepared_intent: preparedIntent,\n transaction:\n transaction?.transaction && typeof transaction.transaction === \"object\"\n ? transaction.transaction\n : null,\n issued,\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createGatewayExecutionModule, createHostReferenceModule, createReferenceSurfaceModule, createHostProxyService } from "./backend/modules.js";
|
|
2
2
|
import { buildHostedGatewayPaymentUrl, buildModeHostedGatewayPaymentUrl, createPaymentEvidenceHandler, createPaymentRuntime, extractHostedPaymentSessionId, registerPaymentPageApiRoutes, registerPaymentPageAssetRoute } from "./backend/paymentRuntime.js";
|
|
3
|
+
import { activateXappPurchaseReference, consumeXappWalletCredits, finalizeXappHostedPurchase, findXappHostedPaymentPreset, listXappHostedPaymentPresets, normalizeXappMonetizationScopeKind, readXappMonetizationSnapshot, resolveXappHostedPaymentDefinition, resolveXappMonetizationScope, startXappHostedPurchase, type ActivateXappPurchaseReferenceInput, type ConsumeXappWalletCreditsInput, type FinalizeXappHostedPurchaseInput, type ListXappHostedPaymentPresetsInput, type ReadXappMonetizationSnapshotInput, type ResolveXappHostedPaymentDefinitionInput, type ResolveXappMonetizationScopeInput, type StartXappHostedPurchaseInput } from "./backend/xms.js";
|
|
3
4
|
import { normalizeBackendKitOptions, resolvePlatformSecretRefFromEnv, type BackendKitNormalizedOptions, type StringRecord } from "./backend/options.js";
|
|
4
5
|
type ReplyLike = {
|
|
5
6
|
code: (statusCode: number) => {
|
|
@@ -44,6 +45,7 @@ export type BackendKit = {
|
|
|
44
45
|
registerRoutes: (app: RegisterableApp) => Promise<void>;
|
|
45
46
|
applyNotFoundHandler: (app: RegisterableApp) => void;
|
|
46
47
|
};
|
|
48
|
+
export type { ActivateXappPurchaseReferenceInput, ConsumeXappWalletCreditsInput, FinalizeXappHostedPurchaseInput, ListXappHostedPaymentPresetsInput, ReadXappMonetizationSnapshotInput, ResolveXappHostedPaymentDefinitionInput, ResolveXappMonetizationScopeInput, StartXappHostedPurchaseInput, };
|
|
47
49
|
export type VerifyBrowserWidgetContextInput = {
|
|
48
50
|
hostOrigin: string;
|
|
49
51
|
bootstrapTicket?: string | null;
|
|
@@ -73,5 +75,5 @@ export declare function verifyBrowserWidgetContext(gatewayClient: {
|
|
|
73
75
|
verifyBrowserWidgetContext: (input: VerifyBrowserWidgetContextInput) => Promise<Record<string, unknown>>;
|
|
74
76
|
}, input: VerifyBrowserWidgetContextInput): Promise<Record<string, unknown>>;
|
|
75
77
|
export declare function createBackendKit(input?: StringRecord, deps?: BackendKitDeps): Promise<BackendKit>;
|
|
76
|
-
export { buildHostedGatewayPaymentUrl as buildHostedGatewayPaymentUrl, buildModeHostedGatewayPaymentUrl as buildModeHostedGatewayPaymentUrl, createGatewayExecutionModule, createHostReferenceModule, createReferenceSurfaceModule, createHostProxyService, createPaymentEvidenceHandler, createPaymentRuntime, extractHostedPaymentSessionId, normalizeBackendKitOptions, registerPaymentPageApiRoutes, registerPaymentPageAssetRoute, resolvePlatformSecretRefFromEnv, };
|
|
78
|
+
export { buildHostedGatewayPaymentUrl as buildHostedGatewayPaymentUrl, buildModeHostedGatewayPaymentUrl as buildModeHostedGatewayPaymentUrl, createGatewayExecutionModule, createHostReferenceModule, createReferenceSurfaceModule, createHostProxyService, activateXappPurchaseReference, consumeXappWalletCredits, createPaymentEvidenceHandler, createPaymentRuntime, extractHostedPaymentSessionId, finalizeXappHostedPurchase, findXappHostedPaymentPreset, listXappHostedPaymentPresets, normalizeXappMonetizationScopeKind, normalizeBackendKitOptions, readXappMonetizationSnapshot, registerPaymentPageApiRoutes, registerPaymentPageAssetRoute, resolveXappHostedPaymentDefinition, resolveXappMonetizationScope, resolvePlatformSecretRefFromEnv, startXappHostedPurchase, };
|
|
77
79
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;KACrC,CAAC;CACH,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,kBAAkB,EAAE,CAClB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,KACxE,IAAI,CAAC;CACX,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,2BAA2B,CAAC;IACxE,4BAA4B,CAAC,EAAE,CAAC,KAAK,EAAE;QACrC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAChD,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAClD,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;KACrD,KAAK,WAAW,CAAC;IAClB,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAChD,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAClD,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;QACpD,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5D,gBAAgB,EAAE,OAAO,CAAC;KAC3B,KAAK,WAAW,CAAC;IAClB,4BAA4B,CAAC,EAAE,CAAC,KAAK,EAAE;QACrC,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,eAAe,EAAE,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;QAChE,cAAc,EAAE,OAAO,CAAC;KACzB,KAAK,WAAW,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,2BAA2B,CAAC;IACrC,cAAc,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,oBAAoB,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,iCAAiC,GACzC;IACE,EAAE,EAAE,IAAI,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,sBAAsB,GAAG,yBAAyB,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAcN,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,MAAM,EAAE,CAMV;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,gCAAgC,GACtC,iCAAiC,CA0BnC;AAED,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE;IACb,0BAA0B,EAAE,CAC1B,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvC,EACD,KAAK,EAAE,+BAA+B,oCAGvC;AAED,wBAAsB,gBAAgB,CACpC,KAAK,GAAE,YAAiB,EACxB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,UAAU,CAAC,CA+DrB;AAED,OAAO,EACL,4BAA4B,IAAI,4BAA4B,EAC5D,gCAAgC,IAAI,gCAAgC,EACpE,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,18 @@ import {
|
|
|
13
13
|
registerPaymentPageApiRoutes,
|
|
14
14
|
registerPaymentPageAssetRoute
|
|
15
15
|
} from "./backend/paymentRuntime.js";
|
|
16
|
+
import {
|
|
17
|
+
activateXappPurchaseReference,
|
|
18
|
+
consumeXappWalletCredits,
|
|
19
|
+
finalizeXappHostedPurchase,
|
|
20
|
+
findXappHostedPaymentPreset,
|
|
21
|
+
listXappHostedPaymentPresets,
|
|
22
|
+
normalizeXappMonetizationScopeKind,
|
|
23
|
+
readXappMonetizationSnapshot,
|
|
24
|
+
resolveXappHostedPaymentDefinition,
|
|
25
|
+
resolveXappMonetizationScope,
|
|
26
|
+
startXappHostedPurchase
|
|
27
|
+
} from "./backend/xms.js";
|
|
16
28
|
import {
|
|
17
29
|
normalizeBackendKitOptions,
|
|
18
30
|
resolvePlatformSecretRefFromEnv
|
|
@@ -112,8 +124,10 @@ async function createBackendKit(input = {}, deps = {}) {
|
|
|
112
124
|
};
|
|
113
125
|
}
|
|
114
126
|
export {
|
|
127
|
+
activateXappPurchaseReference,
|
|
115
128
|
buildHostedGatewayPaymentUrl,
|
|
116
129
|
buildModeHostedGatewayPaymentUrl,
|
|
130
|
+
consumeXappWalletCredits,
|
|
117
131
|
createBackendKit,
|
|
118
132
|
createGatewayExecutionModule,
|
|
119
133
|
createHostProxyService,
|
|
@@ -123,11 +137,19 @@ export {
|
|
|
123
137
|
createReferenceSurfaceModule,
|
|
124
138
|
evaluateWidgetBootstrapOriginPolicy,
|
|
125
139
|
extractHostedPaymentSessionId,
|
|
140
|
+
finalizeXappHostedPurchase,
|
|
141
|
+
findXappHostedPaymentPreset,
|
|
142
|
+
listXappHostedPaymentPresets,
|
|
126
143
|
normalizeBackendKitOptions,
|
|
127
144
|
normalizeWidgetBootstrapAllowedOrigins,
|
|
145
|
+
normalizeXappMonetizationScopeKind,
|
|
146
|
+
readXappMonetizationSnapshot,
|
|
128
147
|
registerPaymentPageApiRoutes,
|
|
129
148
|
registerPaymentPageAssetRoute,
|
|
130
149
|
resolvePlatformSecretRefFromEnv,
|
|
150
|
+
resolveXappHostedPaymentDefinition,
|
|
151
|
+
resolveXappMonetizationScope,
|
|
152
|
+
startXappHostedPurchase,
|
|
131
153
|
verifyBrowserWidgetContext
|
|
132
154
|
};
|
|
133
155
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n createGatewayExecutionModule,\n createHostReferenceModule,\n createReferenceSurfaceModule,\n createHostProxyService,\n} from \"./backend/modules.js\";\nimport {\n buildHostedGatewayPaymentUrl,\n buildModeHostedGatewayPaymentUrl,\n createPaymentEvidenceHandler,\n createPaymentRuntime,\n extractHostedPaymentSessionId,\n registerPaymentPageApiRoutes,\n registerPaymentPageAssetRoute,\n} from \"./backend/paymentRuntime.js\";\nimport {\n normalizeBackendKitOptions,\n resolvePlatformSecretRefFromEnv,\n type BackendKitNormalizedOptions,\n type StringRecord,\n} from \"./backend/options.js\";\n\ntype ReplyLike = {\n code: (statusCode: number) => {\n send: (payload: unknown) => unknown;\n };\n};\n\ntype RegisterableApp = {\n setNotFoundHandler: (\n handler: (request: unknown, reply: ReplyLike) => Promise<unknown> | unknown,\n ) => void;\n};\n\ntype RouteModule = {\n registerRoutes: (app: RegisterableApp) => Promise<void> | void;\n};\n\ntype BackendKitDeps = {\n normalizeOptions?: (input: StringRecord) => BackendKitNormalizedOptions;\n createReferenceSurfaceModule?: (input: {\n gateway: BackendKitNormalizedOptions[\"gateway\"];\n branding: BackendKitNormalizedOptions[\"branding\"];\n enableReference: boolean;\n enableLifecycle: boolean;\n enableBridge: boolean;\n enabledModes: string[];\n reference: BackendKitNormalizedOptions[\"reference\"];\n }) => RouteModule;\n createHostReferenceModule?: (input: {\n gateway: BackendKitNormalizedOptions[\"gateway\"];\n branding: BackendKitNormalizedOptions[\"branding\"];\n reference: BackendKitNormalizedOptions[\"reference\"];\n enableLifecycle: boolean;\n enableBridge: boolean;\n allowedOrigins: string[];\n bootstrap: BackendKitNormalizedOptions[\"host\"][\"bootstrap\"];\n hostProxyService: unknown;\n }) => RouteModule;\n createGatewayExecutionModule?: (input: {\n enabledModes: string[];\n subjectProfiles: BackendKitNormalizedOptions[\"subjectProfiles\"];\n paymentRuntime: unknown;\n }) => RouteModule;\n};\n\nexport type BackendKit = {\n options: BackendKitNormalizedOptions;\n registerRoutes: (app: RegisterableApp) => Promise<void>;\n applyNotFoundHandler: (app: RegisterableApp) => void;\n};\n\nexport type VerifyBrowserWidgetContextInput = {\n hostOrigin: string;\n bootstrapTicket?: string | null;\n installationId?: string | null;\n bindToolName?: string | null;\n toolName?: string | null;\n subjectId?: string | null;\n};\n\nexport type WidgetBootstrapOriginPolicyInput = {\n hostOrigin: string | null | undefined;\n allowedOrigins?: string[] | string | null | undefined;\n};\n\nexport type WidgetBootstrapOriginPolicyResult =\n | {\n ok: true;\n hostOrigin: string;\n allowedOrigins: string[];\n }\n | {\n ok: false;\n code: \"HOST_ORIGIN_REQUIRED\" | \"HOST_ORIGIN_NOT_ALLOWED\";\n message: string;\n hostOrigin: string | null;\n allowedOrigins: string[];\n };\n\nfunction normalizeOrigin(value: string | null | undefined) {\n const raw = String(value || \"\").trim();\n if (!raw) return null;\n try {\n const parsed = new URL(raw);\n if (!parsed.protocol || !parsed.host) return null;\n return parsed.origin;\n } catch {\n return null;\n }\n}\n\nexport function normalizeWidgetBootstrapAllowedOrigins(\n value: string[] | string | null | undefined,\n): string[] {\n const entries = Array.isArray(value) ? value : String(value || \"\").split(/[,\\n]/);\n const normalized = entries\n .map((entry) => normalizeOrigin(entry))\n .filter((entry): entry is string => Boolean(entry));\n return Array.from(new Set(normalized));\n}\n\nexport function evaluateWidgetBootstrapOriginPolicy(\n input: WidgetBootstrapOriginPolicyInput,\n): WidgetBootstrapOriginPolicyResult {\n const hostOrigin = normalizeOrigin(input.hostOrigin);\n const allowedOrigins = normalizeWidgetBootstrapAllowedOrigins(input.allowedOrigins);\n if (!hostOrigin) {\n return {\n ok: false,\n code: \"HOST_ORIGIN_REQUIRED\",\n message: \"Host origin is required to verify browser widget context\",\n hostOrigin: null,\n allowedOrigins,\n };\n }\n if (allowedOrigins.length > 0 && !allowedOrigins.includes(hostOrigin)) {\n return {\n ok: false,\n code: \"HOST_ORIGIN_NOT_ALLOWED\",\n message: \"Host origin is not allowed for widget bootstrap verification\",\n hostOrigin,\n allowedOrigins,\n };\n }\n return {\n ok: true,\n hostOrigin,\n allowedOrigins,\n };\n}\n\nexport async function verifyBrowserWidgetContext(\n gatewayClient: {\n verifyBrowserWidgetContext: (\n input: VerifyBrowserWidgetContextInput,\n ) => Promise<Record<string, unknown>>;\n },\n input: VerifyBrowserWidgetContextInput,\n) {\n return gatewayClient.verifyBrowserWidgetContext(input);\n}\n\nexport async function createBackendKit(\n input: StringRecord = {},\n deps: BackendKitDeps = {},\n): Promise<BackendKit> {\n const normalizeOptions =\n typeof deps.normalizeOptions === \"function\" ? deps.normalizeOptions : null;\n const createReferenceSurfaceModuleDep =\n typeof deps.createReferenceSurfaceModule === \"function\"\n ? deps.createReferenceSurfaceModule\n : null;\n const createHostReferenceModuleDep =\n typeof deps.createHostReferenceModule === \"function\" ? deps.createHostReferenceModule : null;\n const createGatewayExecutionModuleDep =\n typeof deps.createGatewayExecutionModule === \"function\"\n ? deps.createGatewayExecutionModule\n : null;\n if (\n !normalizeOptions ||\n !createReferenceSurfaceModuleDep ||\n !createHostReferenceModuleDep ||\n !createGatewayExecutionModuleDep\n ) {\n throw new TypeError(\"backend kit dependencies are incomplete\");\n }\n\n const options = normalizeOptions(input);\n const paymentRuntime = await createPaymentRuntime(options, deps);\n\n const referenceSurfaceModule = createReferenceSurfaceModuleDep({\n gateway: options.gateway,\n branding: options.branding,\n enableReference: options.host.enableReference,\n enableLifecycle: options.host.enableLifecycle,\n enableBridge: options.host.enableBridge,\n enabledModes: options.payments.enabledModes,\n reference: options.reference,\n });\n const hostReferenceModule = createHostReferenceModuleDep({\n gateway: options.gateway,\n branding: options.branding,\n reference: options.reference,\n enableLifecycle: options.host.enableLifecycle,\n enableBridge: options.host.enableBridge,\n allowedOrigins: options.host.allowedOrigins,\n bootstrap: options.host.bootstrap,\n hostProxyService: options.overrides.hostProxyService,\n });\n const gatewayExecutionModule = createGatewayExecutionModuleDep({\n enabledModes: options.payments.enabledModes,\n subjectProfiles: options.subjectProfiles,\n paymentRuntime,\n });\n\n return {\n options,\n async registerRoutes(app) {\n await referenceSurfaceModule.registerRoutes(app);\n await hostReferenceModule.registerRoutes(app);\n await gatewayExecutionModule.registerRoutes(app);\n },\n applyNotFoundHandler(app) {\n app.setNotFoundHandler(async (_request, reply) =>\n reply.code(404).send({ message: \"Not found\" }),\n );\n },\n };\n}\n\nexport {\n buildHostedGatewayPaymentUrl as buildHostedGatewayPaymentUrl,\n buildModeHostedGatewayPaymentUrl as buildModeHostedGatewayPaymentUrl,\n createGatewayExecutionModule,\n createHostReferenceModule,\n createReferenceSurfaceModule,\n createHostProxyService,\n createPaymentEvidenceHandler,\n createPaymentRuntime,\n extractHostedPaymentSessionId,\n normalizeBackendKitOptions,\n registerPaymentPageApiRoutes,\n registerPaymentPageAssetRoute,\n resolvePlatformSecretRefFromEnv,\n};\n"],
|
|
5
|
-
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;
|
|
4
|
+
"sourcesContent": ["import {\n createGatewayExecutionModule,\n createHostReferenceModule,\n createReferenceSurfaceModule,\n createHostProxyService,\n} from \"./backend/modules.js\";\nimport {\n buildHostedGatewayPaymentUrl,\n buildModeHostedGatewayPaymentUrl,\n createPaymentEvidenceHandler,\n createPaymentRuntime,\n extractHostedPaymentSessionId,\n registerPaymentPageApiRoutes,\n registerPaymentPageAssetRoute,\n} from \"./backend/paymentRuntime.js\";\nimport {\n activateXappPurchaseReference,\n consumeXappWalletCredits,\n finalizeXappHostedPurchase,\n findXappHostedPaymentPreset,\n listXappHostedPaymentPresets,\n normalizeXappMonetizationScopeKind,\n readXappMonetizationSnapshot,\n resolveXappHostedPaymentDefinition,\n resolveXappMonetizationScope,\n startXappHostedPurchase,\n type ActivateXappPurchaseReferenceInput,\n type ConsumeXappWalletCreditsInput,\n type FinalizeXappHostedPurchaseInput,\n type ListXappHostedPaymentPresetsInput,\n type ReadXappMonetizationSnapshotInput,\n type ResolveXappHostedPaymentDefinitionInput,\n type ResolveXappMonetizationScopeInput,\n type StartXappHostedPurchaseInput,\n} from \"./backend/xms.js\";\nimport {\n normalizeBackendKitOptions,\n resolvePlatformSecretRefFromEnv,\n type BackendKitNormalizedOptions,\n type StringRecord,\n} from \"./backend/options.js\";\n\ntype ReplyLike = {\n code: (statusCode: number) => {\n send: (payload: unknown) => unknown;\n };\n};\n\ntype RegisterableApp = {\n setNotFoundHandler: (\n handler: (request: unknown, reply: ReplyLike) => Promise<unknown> | unknown,\n ) => void;\n};\n\ntype RouteModule = {\n registerRoutes: (app: RegisterableApp) => Promise<void> | void;\n};\n\ntype BackendKitDeps = {\n normalizeOptions?: (input: StringRecord) => BackendKitNormalizedOptions;\n createReferenceSurfaceModule?: (input: {\n gateway: BackendKitNormalizedOptions[\"gateway\"];\n branding: BackendKitNormalizedOptions[\"branding\"];\n enableReference: boolean;\n enableLifecycle: boolean;\n enableBridge: boolean;\n enabledModes: string[];\n reference: BackendKitNormalizedOptions[\"reference\"];\n }) => RouteModule;\n createHostReferenceModule?: (input: {\n gateway: BackendKitNormalizedOptions[\"gateway\"];\n branding: BackendKitNormalizedOptions[\"branding\"];\n reference: BackendKitNormalizedOptions[\"reference\"];\n enableLifecycle: boolean;\n enableBridge: boolean;\n allowedOrigins: string[];\n bootstrap: BackendKitNormalizedOptions[\"host\"][\"bootstrap\"];\n hostProxyService: unknown;\n }) => RouteModule;\n createGatewayExecutionModule?: (input: {\n enabledModes: string[];\n subjectProfiles: BackendKitNormalizedOptions[\"subjectProfiles\"];\n paymentRuntime: unknown;\n }) => RouteModule;\n};\n\nexport type BackendKit = {\n options: BackendKitNormalizedOptions;\n registerRoutes: (app: RegisterableApp) => Promise<void>;\n applyNotFoundHandler: (app: RegisterableApp) => void;\n};\n\nexport type {\n ActivateXappPurchaseReferenceInput,\n ConsumeXappWalletCreditsInput,\n FinalizeXappHostedPurchaseInput,\n ListXappHostedPaymentPresetsInput,\n ReadXappMonetizationSnapshotInput,\n ResolveXappHostedPaymentDefinitionInput,\n ResolveXappMonetizationScopeInput,\n StartXappHostedPurchaseInput,\n};\n\nexport type VerifyBrowserWidgetContextInput = {\n hostOrigin: string;\n bootstrapTicket?: string | null;\n installationId?: string | null;\n bindToolName?: string | null;\n toolName?: string | null;\n subjectId?: string | null;\n};\n\nexport type WidgetBootstrapOriginPolicyInput = {\n hostOrigin: string | null | undefined;\n allowedOrigins?: string[] | string | null | undefined;\n};\n\nexport type WidgetBootstrapOriginPolicyResult =\n | {\n ok: true;\n hostOrigin: string;\n allowedOrigins: string[];\n }\n | {\n ok: false;\n code: \"HOST_ORIGIN_REQUIRED\" | \"HOST_ORIGIN_NOT_ALLOWED\";\n message: string;\n hostOrigin: string | null;\n allowedOrigins: string[];\n };\n\nfunction normalizeOrigin(value: string | null | undefined) {\n const raw = String(value || \"\").trim();\n if (!raw) return null;\n try {\n const parsed = new URL(raw);\n if (!parsed.protocol || !parsed.host) return null;\n return parsed.origin;\n } catch {\n return null;\n }\n}\n\nexport function normalizeWidgetBootstrapAllowedOrigins(\n value: string[] | string | null | undefined,\n): string[] {\n const entries = Array.isArray(value) ? value : String(value || \"\").split(/[,\\n]/);\n const normalized = entries\n .map((entry) => normalizeOrigin(entry))\n .filter((entry): entry is string => Boolean(entry));\n return Array.from(new Set(normalized));\n}\n\nexport function evaluateWidgetBootstrapOriginPolicy(\n input: WidgetBootstrapOriginPolicyInput,\n): WidgetBootstrapOriginPolicyResult {\n const hostOrigin = normalizeOrigin(input.hostOrigin);\n const allowedOrigins = normalizeWidgetBootstrapAllowedOrigins(input.allowedOrigins);\n if (!hostOrigin) {\n return {\n ok: false,\n code: \"HOST_ORIGIN_REQUIRED\",\n message: \"Host origin is required to verify browser widget context\",\n hostOrigin: null,\n allowedOrigins,\n };\n }\n if (allowedOrigins.length > 0 && !allowedOrigins.includes(hostOrigin)) {\n return {\n ok: false,\n code: \"HOST_ORIGIN_NOT_ALLOWED\",\n message: \"Host origin is not allowed for widget bootstrap verification\",\n hostOrigin,\n allowedOrigins,\n };\n }\n return {\n ok: true,\n hostOrigin,\n allowedOrigins,\n };\n}\n\nexport async function verifyBrowserWidgetContext(\n gatewayClient: {\n verifyBrowserWidgetContext: (\n input: VerifyBrowserWidgetContextInput,\n ) => Promise<Record<string, unknown>>;\n },\n input: VerifyBrowserWidgetContextInput,\n) {\n return gatewayClient.verifyBrowserWidgetContext(input);\n}\n\nexport async function createBackendKit(\n input: StringRecord = {},\n deps: BackendKitDeps = {},\n): Promise<BackendKit> {\n const normalizeOptions =\n typeof deps.normalizeOptions === \"function\" ? deps.normalizeOptions : null;\n const createReferenceSurfaceModuleDep =\n typeof deps.createReferenceSurfaceModule === \"function\"\n ? deps.createReferenceSurfaceModule\n : null;\n const createHostReferenceModuleDep =\n typeof deps.createHostReferenceModule === \"function\" ? deps.createHostReferenceModule : null;\n const createGatewayExecutionModuleDep =\n typeof deps.createGatewayExecutionModule === \"function\"\n ? deps.createGatewayExecutionModule\n : null;\n if (\n !normalizeOptions ||\n !createReferenceSurfaceModuleDep ||\n !createHostReferenceModuleDep ||\n !createGatewayExecutionModuleDep\n ) {\n throw new TypeError(\"backend kit dependencies are incomplete\");\n }\n\n const options = normalizeOptions(input);\n const paymentRuntime = await createPaymentRuntime(options, deps);\n\n const referenceSurfaceModule = createReferenceSurfaceModuleDep({\n gateway: options.gateway,\n branding: options.branding,\n enableReference: options.host.enableReference,\n enableLifecycle: options.host.enableLifecycle,\n enableBridge: options.host.enableBridge,\n enabledModes: options.payments.enabledModes,\n reference: options.reference,\n });\n const hostReferenceModule = createHostReferenceModuleDep({\n gateway: options.gateway,\n branding: options.branding,\n reference: options.reference,\n enableLifecycle: options.host.enableLifecycle,\n enableBridge: options.host.enableBridge,\n allowedOrigins: options.host.allowedOrigins,\n bootstrap: options.host.bootstrap,\n hostProxyService: options.overrides.hostProxyService,\n });\n const gatewayExecutionModule = createGatewayExecutionModuleDep({\n enabledModes: options.payments.enabledModes,\n subjectProfiles: options.subjectProfiles,\n paymentRuntime,\n });\n\n return {\n options,\n async registerRoutes(app) {\n await referenceSurfaceModule.registerRoutes(app);\n await hostReferenceModule.registerRoutes(app);\n await gatewayExecutionModule.registerRoutes(app);\n },\n applyNotFoundHandler(app) {\n app.setNotFoundHandler(async (_request, reply) =>\n reply.code(404).send({ message: \"Not found\" }),\n );\n },\n };\n}\n\nexport {\n buildHostedGatewayPaymentUrl as buildHostedGatewayPaymentUrl,\n buildModeHostedGatewayPaymentUrl as buildModeHostedGatewayPaymentUrl,\n createGatewayExecutionModule,\n createHostReferenceModule,\n createReferenceSurfaceModule,\n createHostProxyService,\n activateXappPurchaseReference,\n consumeXappWalletCredits,\n createPaymentEvidenceHandler,\n createPaymentRuntime,\n extractHostedPaymentSessionId,\n finalizeXappHostedPurchase,\n findXappHostedPaymentPreset,\n listXappHostedPaymentPresets,\n normalizeXappMonetizationScopeKind,\n normalizeBackendKitOptions,\n readXappMonetizationSnapshot,\n registerPaymentPageApiRoutes,\n registerPaymentPageAssetRoute,\n resolveXappHostedPaymentDefinition,\n resolveXappMonetizationScope,\n resolvePlatformSecretRefFromEnv,\n startXappHostedPurchase,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xapps-platform/backend-kit",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Daniel Vladescu <daniel.vladescu@gmail.com>",
|
|
6
6
|
"description": "Modular Node backend kit for the current Xapps backend contract (tenant surface today, shared actor-adapter direction later)",
|
|
@@ -37,6 +37,6 @@
|
|
|
37
37
|
"smoke": "npm run build && node examples/smoke/smoke.mjs"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@xapps-platform/server-sdk": "^0.2.
|
|
40
|
+
"@xapps-platform/server-sdk": "^0.2.1"
|
|
41
41
|
}
|
|
42
42
|
}
|