@xapps-platform/backend-kit 0.1.1
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 +196 -0
- package/dist/backend/modes/gateway-managed/payment.d.ts +23 -0
- package/dist/backend/modes/gateway-managed/payment.d.ts.map +1 -0
- package/dist/backend/modes/gateway-managed/payment.js +49 -0
- package/dist/backend/modes/gateway-managed/payment.js.map +7 -0
- package/dist/backend/modes/gateway-managed/paymentSession.d.ts +4 -0
- package/dist/backend/modes/gateway-managed/paymentSession.d.ts.map +1 -0
- package/dist/backend/modes/gateway-managed/paymentSession.js +16 -0
- package/dist/backend/modes/gateway-managed/paymentSession.js.map +7 -0
- package/dist/backend/modes/gateway-managed/policy.d.ts +68 -0
- package/dist/backend/modes/gateway-managed/policy.d.ts.map +1 -0
- package/dist/backend/modes/gateway-managed/policy.js +53 -0
- package/dist/backend/modes/gateway-managed/policy.js.map +7 -0
- package/dist/backend/modes/gateway-managed/policyContext.d.ts +5 -0
- package/dist/backend/modes/gateway-managed/policyContext.d.ts.map +1 -0
- package/dist/backend/modes/gateway-managed/policyContext.js +22 -0
- package/dist/backend/modes/gateway-managed/policyContext.js.map +7 -0
- package/dist/backend/modes/index.d.ts +72 -0
- package/dist/backend/modes/index.d.ts.map +1 -0
- package/dist/backend/modes/index.js +159 -0
- package/dist/backend/modes/index.js.map +7 -0
- package/dist/backend/modes/owner-managed/payment.d.ts +34 -0
- package/dist/backend/modes/owner-managed/payment.d.ts.map +1 -0
- package/dist/backend/modes/owner-managed/payment.js +75 -0
- package/dist/backend/modes/owner-managed/payment.js.map +7 -0
- package/dist/backend/modes/owner-managed/paymentAssets.d.ts +4 -0
- package/dist/backend/modes/owner-managed/paymentAssets.d.ts.map +1 -0
- package/dist/backend/modes/owner-managed/paymentAssets.js +11 -0
- package/dist/backend/modes/owner-managed/paymentAssets.js.map +7 -0
- package/dist/backend/modes/owner-managed/paymentPageApi.d.ts +4 -0
- package/dist/backend/modes/owner-managed/paymentPageApi.d.ts.map +1 -0
- package/dist/backend/modes/owner-managed/paymentPageApi.js +11 -0
- package/dist/backend/modes/owner-managed/paymentPageApi.js.map +7 -0
- package/dist/backend/modes/owner-managed/paymentSession.d.ts +4 -0
- package/dist/backend/modes/owner-managed/paymentSession.d.ts.map +1 -0
- package/dist/backend/modes/owner-managed/paymentSession.js +18 -0
- package/dist/backend/modes/owner-managed/paymentSession.js.map +7 -0
- package/dist/backend/modes/owner-managed/policy.d.ts +68 -0
- package/dist/backend/modes/owner-managed/policy.d.ts.map +1 -0
- package/dist/backend/modes/owner-managed/policy.js +53 -0
- package/dist/backend/modes/owner-managed/policy.js.map +7 -0
- package/dist/backend/modes/owner-managed/policyContext.d.ts +5 -0
- package/dist/backend/modes/owner-managed/policyContext.d.ts.map +1 -0
- package/dist/backend/modes/owner-managed/policyContext.js +26 -0
- package/dist/backend/modes/owner-managed/policyContext.js.map +7 -0
- package/dist/backend/modes/publisher-delegated/payment.d.ts +23 -0
- package/dist/backend/modes/publisher-delegated/payment.d.ts.map +1 -0
- package/dist/backend/modes/publisher-delegated/payment.js +50 -0
- package/dist/backend/modes/publisher-delegated/payment.js.map +7 -0
- package/dist/backend/modes/publisher-delegated/paymentSession.d.ts +4 -0
- package/dist/backend/modes/publisher-delegated/paymentSession.d.ts.map +1 -0
- package/dist/backend/modes/publisher-delegated/paymentSession.js +16 -0
- package/dist/backend/modes/publisher-delegated/paymentSession.js.map +7 -0
- package/dist/backend/modes/publisher-delegated/policy.d.ts +68 -0
- package/dist/backend/modes/publisher-delegated/policy.d.ts.map +1 -0
- package/dist/backend/modes/publisher-delegated/policy.js +53 -0
- package/dist/backend/modes/publisher-delegated/policy.js.map +7 -0
- package/dist/backend/modes/publisher-delegated/policyContext.d.ts +5 -0
- package/dist/backend/modes/publisher-delegated/policyContext.d.ts.map +1 -0
- package/dist/backend/modes/publisher-delegated/policyContext.js +22 -0
- package/dist/backend/modes/publisher-delegated/policyContext.js.map +7 -0
- package/dist/backend/modes/tenant-delegated/payment.d.ts +23 -0
- package/dist/backend/modes/tenant-delegated/payment.d.ts.map +1 -0
- package/dist/backend/modes/tenant-delegated/payment.js +50 -0
- package/dist/backend/modes/tenant-delegated/payment.js.map +7 -0
- package/dist/backend/modes/tenant-delegated/paymentSession.d.ts +4 -0
- package/dist/backend/modes/tenant-delegated/paymentSession.d.ts.map +1 -0
- package/dist/backend/modes/tenant-delegated/paymentSession.js +16 -0
- package/dist/backend/modes/tenant-delegated/paymentSession.js.map +7 -0
- package/dist/backend/modes/tenant-delegated/policy.d.ts +68 -0
- package/dist/backend/modes/tenant-delegated/policy.d.ts.map +1 -0
- package/dist/backend/modes/tenant-delegated/policy.js +53 -0
- package/dist/backend/modes/tenant-delegated/policy.js.map +7 -0
- package/dist/backend/modes/tenant-delegated/policyContext.d.ts +5 -0
- package/dist/backend/modes/tenant-delegated/policyContext.d.ts.map +1 -0
- package/dist/backend/modes/tenant-delegated/policyContext.js +22 -0
- package/dist/backend/modes/tenant-delegated/policyContext.js.map +7 -0
- package/dist/backend/modules.d.ts +33 -0
- package/dist/backend/modules.d.ts.map +1 -0
- package/dist/backend/modules.js +100 -0
- package/dist/backend/modules.js.map +7 -0
- package/dist/backend/options.d.ts +78 -0
- package/dist/backend/options.d.ts.map +1 -0
- package/dist/backend/options.js +153 -0
- package/dist/backend/options.js.map +7 -0
- package/dist/backend/paymentRuntime.d.ts +31 -0
- package/dist/backend/paymentRuntime.d.ts.map +1 -0
- package/dist/backend/paymentRuntime.js +231 -0
- package/dist/backend/paymentRuntime.js.map +7 -0
- package/dist/backend/policies/common.d.ts +102 -0
- package/dist/backend/policies/common.d.ts.map +1 -0
- package/dist/backend/policies/common.js +226 -0
- package/dist/backend/policies/common.js.map +7 -0
- package/dist/backend/routes/gateway/guard.d.ts +7 -0
- package/dist/backend/routes/gateway/guard.d.ts.map +1 -0
- package/dist/backend/routes/gateway/guard.js +89 -0
- package/dist/backend/routes/gateway/guard.js.map +7 -0
- package/dist/backend/routes/gateway/hostApi.d.ts +8 -0
- package/dist/backend/routes/gateway/hostApi.d.ts.map +1 -0
- package/dist/backend/routes/gateway/hostApi.js +45 -0
- package/dist/backend/routes/gateway/hostApi.js.map +7 -0
- package/dist/backend/routes/gateway/hostApiBridge.d.ts +5 -0
- package/dist/backend/routes/gateway/hostApiBridge.d.ts.map +1 -0
- package/dist/backend/routes/gateway/hostApiBridge.js +61 -0
- package/dist/backend/routes/gateway/hostApiBridge.js.map +7 -0
- package/dist/backend/routes/gateway/hostApiCore.d.ts +5 -0
- package/dist/backend/routes/gateway/hostApiCore.d.ts.map +1 -0
- package/dist/backend/routes/gateway/hostApiCore.js +95 -0
- package/dist/backend/routes/gateway/hostApiCore.js.map +7 -0
- package/dist/backend/routes/gateway/hostApiLifecycle.d.ts +5 -0
- package/dist/backend/routes/gateway/hostApiLifecycle.d.ts.map +1 -0
- package/dist/backend/routes/gateway/hostApiLifecycle.js +80 -0
- package/dist/backend/routes/gateway/hostApiLifecycle.js.map +7 -0
- package/dist/backend/routes/gateway/hostContractBoundary.d.ts +25 -0
- package/dist/backend/routes/gateway/hostContractBoundary.d.ts.map +1 -0
- package/dist/backend/routes/gateway/hostContractBoundary.js +43 -0
- package/dist/backend/routes/gateway/hostContractBoundary.js.map +7 -0
- package/dist/backend/routes/gateway/payment.d.ts +4 -0
- package/dist/backend/routes/gateway/payment.d.ts.map +1 -0
- package/dist/backend/routes/gateway/payment.js +10 -0
- package/dist/backend/routes/gateway/payment.js.map +7 -0
- package/dist/backend/routes/gateway/shared.d.ts +36 -0
- package/dist/backend/routes/gateway/shared.d.ts.map +1 -0
- package/dist/backend/routes/gateway/shared.js +208 -0
- package/dist/backend/routes/gateway/shared.js.map +7 -0
- package/dist/backend/routes/gateway/subjectProfiles.d.ts +2 -0
- package/dist/backend/routes/gateway/subjectProfiles.d.ts.map +1 -0
- package/dist/backend/routes/gateway/subjectProfiles.js +150 -0
- package/dist/backend/routes/gateway/subjectProfiles.js.map +7 -0
- package/dist/backend/routes/health.d.ts +2 -0
- package/dist/backend/routes/health.d.ts.map +1 -0
- package/dist/backend/routes/health.js +20 -0
- package/dist/backend/routes/health.js.map +7 -0
- package/dist/backend/routes/reference.d.ts +2 -0
- package/dist/backend/routes/reference.d.ts.map +1 -0
- package/dist/backend/routes/reference.js +414 -0
- package/dist/backend/routes/reference.js.map +7 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +7 -0
- package/package.json +42 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { normalizeHostModes, readString } from "./options.js";
|
|
2
|
+
function createHostReferenceModule({
|
|
3
|
+
gateway = {},
|
|
4
|
+
branding = {},
|
|
5
|
+
reference = {},
|
|
6
|
+
enableLifecycle = true,
|
|
7
|
+
enableBridge = true,
|
|
8
|
+
allowedOrigins = [],
|
|
9
|
+
bootstrap = {},
|
|
10
|
+
hostProxyService = null
|
|
11
|
+
} = {}, deps = {}) {
|
|
12
|
+
const createHostProxyService2 = typeof deps.createHostProxyService === "function" ? deps.createHostProxyService : null;
|
|
13
|
+
const registerHostRoutes = typeof deps.registerHostRoutes === "function" ? deps.registerHostRoutes : null;
|
|
14
|
+
if (!createHostProxyService2 || !registerHostRoutes) {
|
|
15
|
+
throw new TypeError("host reference module dependencies are incomplete");
|
|
16
|
+
}
|
|
17
|
+
const resolvedHostProxyService = hostProxyService || createHostProxyService2({
|
|
18
|
+
gateway,
|
|
19
|
+
branding,
|
|
20
|
+
reference
|
|
21
|
+
});
|
|
22
|
+
const hostOptions = {
|
|
23
|
+
enableLifecycle,
|
|
24
|
+
enableBridge,
|
|
25
|
+
allowedOrigins,
|
|
26
|
+
bootstrap,
|
|
27
|
+
branding,
|
|
28
|
+
hostProxyService: resolvedHostProxyService
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
async registerRoutes(app) {
|
|
32
|
+
await registerHostRoutes(app, hostOptions);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function createHostProxyService({ gateway = {}, reference = {} } = {}, deps = {}) {
|
|
37
|
+
const createGatewayClient = typeof deps.createGatewayClient === "function" ? deps.createGatewayClient : null;
|
|
38
|
+
const createEmbedHostProxyService = typeof deps.createEmbedHostProxyService === "function" ? deps.createEmbedHostProxyService : null;
|
|
39
|
+
if (!createGatewayClient || !createEmbedHostProxyService) {
|
|
40
|
+
throw new TypeError("backend host proxy dependencies are incomplete");
|
|
41
|
+
}
|
|
42
|
+
const gatewayUrl = readString(gateway.baseUrl).trim();
|
|
43
|
+
const apiKey = readString(gateway.apiKey).trim();
|
|
44
|
+
const hostModes = normalizeHostModes(reference.hostSurfaces);
|
|
45
|
+
return createEmbedHostProxyService({
|
|
46
|
+
gatewayClient: createGatewayClient({ baseUrl: gatewayUrl, apiKey }),
|
|
47
|
+
gatewayUrl,
|
|
48
|
+
hostModes: hostModes.length > 0 ? hostModes : void 0
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function createGatewayExecutionModule({ enabledModes, subjectProfiles = {}, paymentRuntime = {} } = {}, deps = {}) {
|
|
52
|
+
const registerPaymentRoutes = typeof deps.registerPaymentRoutes === "function" ? deps.registerPaymentRoutes : null;
|
|
53
|
+
const registerGuardRoutes = typeof deps.registerGuardRoutes === "function" ? deps.registerGuardRoutes : null;
|
|
54
|
+
const registerSubjectProfileRoutes = typeof deps.registerSubjectProfileRoutes === "function" ? deps.registerSubjectProfileRoutes : null;
|
|
55
|
+
if (!registerPaymentRoutes || !registerGuardRoutes || !registerSubjectProfileRoutes) {
|
|
56
|
+
throw new TypeError("gateway execution module dependencies are incomplete");
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
async registerRoutes(app) {
|
|
60
|
+
await registerPaymentRoutes(app, { enabledModes, paymentRuntime });
|
|
61
|
+
await registerGuardRoutes(app, { enabledModes, paymentRuntime });
|
|
62
|
+
await registerSubjectProfileRoutes(app, subjectProfiles);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function createReferenceSurfaceModule({
|
|
67
|
+
gateway = {},
|
|
68
|
+
branding = {},
|
|
69
|
+
enableReference = true,
|
|
70
|
+
enableLifecycle = true,
|
|
71
|
+
enableBridge = true,
|
|
72
|
+
enabledModes,
|
|
73
|
+
reference = {}
|
|
74
|
+
} = {}, deps = {}) {
|
|
75
|
+
const registerReferenceRoutes = typeof deps.registerReferenceRoutes === "function" ? deps.registerReferenceRoutes : null;
|
|
76
|
+
if (!registerReferenceRoutes) {
|
|
77
|
+
throw new TypeError("reference surface module dependencies are incomplete");
|
|
78
|
+
}
|
|
79
|
+
const referenceOptions = {
|
|
80
|
+
enableReference,
|
|
81
|
+
enableLifecycle,
|
|
82
|
+
enableBridge,
|
|
83
|
+
enabledModes,
|
|
84
|
+
gateway,
|
|
85
|
+
branding,
|
|
86
|
+
reference
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
async registerRoutes(app) {
|
|
90
|
+
await registerReferenceRoutes(app, referenceOptions);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
createGatewayExecutionModule,
|
|
96
|
+
createHostProxyService,
|
|
97
|
+
createHostReferenceModule,
|
|
98
|
+
createReferenceSurfaceModule
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=modules.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/backend/modules.ts"],
|
|
4
|
+
"sourcesContent": ["// @ts-nocheck\nimport { normalizeHostModes, readString } from \"./options.js\";\n\nexport function createHostReferenceModule(\n {\n gateway = {},\n branding = {},\n reference = {},\n enableLifecycle = true,\n enableBridge = true,\n allowedOrigins = [],\n bootstrap = {},\n hostProxyService = null,\n } = {},\n deps = {},\n) {\n const createHostProxyService =\n typeof deps.createHostProxyService === \"function\" ? deps.createHostProxyService : null;\n const registerHostRoutes =\n typeof deps.registerHostRoutes === \"function\" ? deps.registerHostRoutes : null;\n if (!createHostProxyService || !registerHostRoutes) {\n throw new TypeError(\"host reference module dependencies are incomplete\");\n }\n\n const resolvedHostProxyService =\n hostProxyService ||\n createHostProxyService({\n gateway,\n branding,\n reference,\n });\n const hostOptions = {\n enableLifecycle,\n enableBridge,\n allowedOrigins,\n bootstrap,\n branding,\n hostProxyService: resolvedHostProxyService,\n };\n\n return {\n async registerRoutes(app) {\n await registerHostRoutes(app, hostOptions);\n },\n };\n}\n\nexport function createHostProxyService({ gateway = {}, reference = {} } = {}, deps = {}) {\n const createGatewayClient =\n typeof deps.createGatewayClient === \"function\" ? deps.createGatewayClient : null;\n const createEmbedHostProxyService =\n typeof deps.createEmbedHostProxyService === \"function\"\n ? deps.createEmbedHostProxyService\n : null;\n if (!createGatewayClient || !createEmbedHostProxyService) {\n throw new TypeError(\"backend host proxy dependencies are incomplete\");\n }\n\n const gatewayUrl = readString(gateway.baseUrl).trim();\n const apiKey = readString(gateway.apiKey).trim();\n const hostModes = normalizeHostModes(reference.hostSurfaces);\n\n return createEmbedHostProxyService({\n gatewayClient: createGatewayClient({ baseUrl: gatewayUrl, apiKey }),\n gatewayUrl,\n hostModes: hostModes.length > 0 ? hostModes : undefined,\n });\n}\n\nexport function createGatewayExecutionModule(\n { enabledModes, subjectProfiles = {}, paymentRuntime = {} } = {},\n deps = {},\n) {\n const registerPaymentRoutes =\n typeof deps.registerPaymentRoutes === \"function\" ? deps.registerPaymentRoutes : null;\n const registerGuardRoutes =\n typeof deps.registerGuardRoutes === \"function\" ? deps.registerGuardRoutes : null;\n const registerSubjectProfileRoutes =\n typeof deps.registerSubjectProfileRoutes === \"function\"\n ? deps.registerSubjectProfileRoutes\n : null;\n if (!registerPaymentRoutes || !registerGuardRoutes || !registerSubjectProfileRoutes) {\n throw new TypeError(\"gateway execution module dependencies are incomplete\");\n }\n\n return {\n async registerRoutes(app) {\n await registerPaymentRoutes(app, { enabledModes, paymentRuntime });\n await registerGuardRoutes(app, { enabledModes, paymentRuntime });\n await registerSubjectProfileRoutes(app, subjectProfiles);\n },\n };\n}\n\nexport function createReferenceSurfaceModule(\n {\n gateway = {},\n branding = {},\n enableReference = true,\n enableLifecycle = true,\n enableBridge = true,\n enabledModes,\n reference = {},\n } = {},\n deps = {},\n) {\n const registerReferenceRoutes =\n typeof deps.registerReferenceRoutes === \"function\" ? deps.registerReferenceRoutes : null;\n if (!registerReferenceRoutes) {\n throw new TypeError(\"reference surface module dependencies are incomplete\");\n }\n\n const referenceOptions = {\n enableReference,\n enableLifecycle,\n enableBridge,\n enabledModes,\n gateway,\n branding,\n reference,\n };\n\n return {\n async registerRoutes(app) {\n await registerReferenceRoutes(app, referenceOptions);\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["createHostProxyService"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export declare function readRecord(value: any): any;
|
|
2
|
+
export declare function readString(value: any, fallback?: string): string;
|
|
3
|
+
export declare function readList(value: any): any[];
|
|
4
|
+
export declare function normalizeAllowedOrigins(value: any): string[];
|
|
5
|
+
export declare function normalizeApiKeys(value: any): string[];
|
|
6
|
+
export declare function normalizeOwnerIssuer(value: any, fallback?: string): "tenant" | "publisher";
|
|
7
|
+
export declare function normalizeHostModes(hostSurfaces: any): {
|
|
8
|
+
key: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}[];
|
|
11
|
+
export declare function resolvePlatformSecretRefFromEnv(input?: {}): string;
|
|
12
|
+
export declare function normalizeBackendKitOptions(input?: {}, deps?: {}): {
|
|
13
|
+
host: {
|
|
14
|
+
enableReference: boolean;
|
|
15
|
+
enableLifecycle: boolean;
|
|
16
|
+
enableBridge: boolean;
|
|
17
|
+
allowedOrigins: string[];
|
|
18
|
+
bootstrap: {
|
|
19
|
+
apiKeys: string[];
|
|
20
|
+
signingSecret: string;
|
|
21
|
+
ttlSeconds: number;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
payments: {
|
|
25
|
+
enabledModes: any;
|
|
26
|
+
ownerIssuer: string;
|
|
27
|
+
paymentUrl: string;
|
|
28
|
+
returnSecret: any;
|
|
29
|
+
returnSecretRef: any;
|
|
30
|
+
returnUrlAllowlist: any;
|
|
31
|
+
};
|
|
32
|
+
assets: {
|
|
33
|
+
seedLogo: {
|
|
34
|
+
filePath: string;
|
|
35
|
+
routePath: string;
|
|
36
|
+
contentType: string;
|
|
37
|
+
};
|
|
38
|
+
paymentPage: {
|
|
39
|
+
filePath: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
gateway: {
|
|
43
|
+
baseUrl: string;
|
|
44
|
+
apiKey: string;
|
|
45
|
+
};
|
|
46
|
+
branding: {
|
|
47
|
+
tenantName: string;
|
|
48
|
+
serviceName: string;
|
|
49
|
+
stackLabel: string;
|
|
50
|
+
};
|
|
51
|
+
reference: {
|
|
52
|
+
tenant: string;
|
|
53
|
+
workspace: string;
|
|
54
|
+
stack: string;
|
|
55
|
+
mode: string;
|
|
56
|
+
tenantPolicySlugs: any[];
|
|
57
|
+
proofSources: any[];
|
|
58
|
+
sdkPaths: any;
|
|
59
|
+
hostSurfaces: any[];
|
|
60
|
+
notes: any[];
|
|
61
|
+
embedSdkCandidateFiles: any[];
|
|
62
|
+
referenceAssets: any;
|
|
63
|
+
};
|
|
64
|
+
subjectProfiles: {
|
|
65
|
+
workspace: string;
|
|
66
|
+
source: string;
|
|
67
|
+
catalogJson: string;
|
|
68
|
+
defaultProfiles: any[];
|
|
69
|
+
resolveCandidates: any;
|
|
70
|
+
};
|
|
71
|
+
overrides: {
|
|
72
|
+
hostProxyService: any;
|
|
73
|
+
gatewayClient: any;
|
|
74
|
+
paymentHandler: any;
|
|
75
|
+
resolvePolicyRequest: any;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/backend/options.ts"],"names":[],"mappings":"AACA,wBAAgB,UAAU,CAAC,KAAK,KAAA,OAE/B;AAED,wBAAgB,UAAU,CAAC,KAAK,KAAA,EAAE,QAAQ,SAAK,UAE9C;AAED,wBAAgB,QAAQ,CAAC,KAAK,KAAA,SAE7B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,KAAA,YAU5C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,KAAA,YAUrC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,KAAA,EAAE,QAAQ,SAAW,0BAG9D;AAED,wBAAgB,kBAAkB,CAAC,YAAY,KAAA;;;IAW9C;AAED,wBAAgB,+BAA+B,CAAC,KAAK,KAAK,UAuBzD;AAED,wBAAgB,0BAA0B,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwH/D"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
function readRecord(value) {
|
|
2
|
+
return value && typeof value === "object" ? value : {};
|
|
3
|
+
}
|
|
4
|
+
function readString(value, fallback = "") {
|
|
5
|
+
return typeof value === "string" ? value : fallback;
|
|
6
|
+
}
|
|
7
|
+
function readList(value) {
|
|
8
|
+
return Array.isArray(value) ? value : [];
|
|
9
|
+
}
|
|
10
|
+
function normalizeAllowedOrigins(value) {
|
|
11
|
+
if (Array.isArray(value)) {
|
|
12
|
+
return value.map((entry) => readString(entry).trim().replace(/\/+$/, "")).filter(Boolean);
|
|
13
|
+
}
|
|
14
|
+
const raw = readString(value).trim();
|
|
15
|
+
if (!raw) return [];
|
|
16
|
+
return raw.split(/[,\n]/).map((entry) => readString(entry).trim().replace(/\/+$/, "")).filter(Boolean);
|
|
17
|
+
}
|
|
18
|
+
function normalizeApiKeys(value) {
|
|
19
|
+
if (Array.isArray(value)) {
|
|
20
|
+
return value.map((entry) => readString(entry).trim()).filter(Boolean);
|
|
21
|
+
}
|
|
22
|
+
const raw = readString(value).trim();
|
|
23
|
+
if (!raw) return [];
|
|
24
|
+
return raw.split(/[,\n]/).map((entry) => readString(entry).trim()).filter(Boolean);
|
|
25
|
+
}
|
|
26
|
+
function normalizeOwnerIssuer(value, fallback = "tenant") {
|
|
27
|
+
const normalized = readString(value, fallback).trim().toLowerCase();
|
|
28
|
+
return normalized === "publisher" ? "publisher" : "tenant";
|
|
29
|
+
}
|
|
30
|
+
function normalizeHostModes(hostSurfaces) {
|
|
31
|
+
return readList(hostSurfaces).map(
|
|
32
|
+
(entry) => entry && typeof entry === "object" ? {
|
|
33
|
+
key: readString(entry.key).trim(),
|
|
34
|
+
label: readString(entry.label).trim()
|
|
35
|
+
} : null
|
|
36
|
+
).filter((entry) => entry && entry.key && entry.label);
|
|
37
|
+
}
|
|
38
|
+
function resolvePlatformSecretRefFromEnv(input = {}) {
|
|
39
|
+
const name = String(input?.name || "").trim().replace(/[^A-Za-z0-9_]+/g, "_").toUpperCase();
|
|
40
|
+
const scope = String(input?.scope || "").trim().replace(/[^A-Za-z0-9_]+/g, "_").toUpperCase();
|
|
41
|
+
const scopeId = String(input?.scopeId || "").trim().replace(/[^A-Za-z0-9_]+/g, "_").toUpperCase();
|
|
42
|
+
const candidates = [
|
|
43
|
+
scope && scopeId && name ? `PLATFORM_SECRET__${scope}__${scopeId}__${name}` : "",
|
|
44
|
+
scope && name ? `PLATFORM_SECRET__${scope}__${name}` : "",
|
|
45
|
+
name ? `PLATFORM_SECRET__${name}` : ""
|
|
46
|
+
].filter(Boolean);
|
|
47
|
+
for (const key of candidates) {
|
|
48
|
+
const value = String(process.env[key] || "").trim();
|
|
49
|
+
if (value) return value;
|
|
50
|
+
}
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
53
|
+
function normalizeBackendKitOptions(input = {}, deps = {}) {
|
|
54
|
+
const defaults = readRecord(deps.defaults);
|
|
55
|
+
const normalizeEnabledModes = typeof deps.normalizeEnabledModes === "function" ? deps.normalizeEnabledModes : null;
|
|
56
|
+
if (!normalizeEnabledModes) {
|
|
57
|
+
throw new TypeError("normalizeEnabledModes is required");
|
|
58
|
+
}
|
|
59
|
+
const host = readRecord(input.host);
|
|
60
|
+
const payments = readRecord(input.payments);
|
|
61
|
+
const assets = readRecord(input.assets);
|
|
62
|
+
const seedLogo = readRecord(assets.seedLogo);
|
|
63
|
+
const gateway = readRecord(input.gateway);
|
|
64
|
+
const branding = readRecord(input.branding);
|
|
65
|
+
const reference = readRecord(input.reference);
|
|
66
|
+
const subjectProfiles = readRecord(input.subjectProfiles);
|
|
67
|
+
const overrides = readRecord(input.overrides);
|
|
68
|
+
const defaultHost = readRecord(defaults.host);
|
|
69
|
+
const defaultPayments = readRecord(defaults.payments);
|
|
70
|
+
const defaultGateway = readRecord(defaults.gateway);
|
|
71
|
+
return {
|
|
72
|
+
host: {
|
|
73
|
+
enableReference: host.enableReference !== false && defaultHost.enableReference !== false,
|
|
74
|
+
enableLifecycle: host.enableLifecycle !== false && defaultHost.enableLifecycle !== false,
|
|
75
|
+
enableBridge: host.enableBridge !== false && defaultHost.enableBridge !== false,
|
|
76
|
+
allowedOrigins: normalizeAllowedOrigins(host.allowedOrigins ?? defaultHost.allowedOrigins),
|
|
77
|
+
bootstrap: {
|
|
78
|
+
apiKeys: normalizeApiKeys(
|
|
79
|
+
readRecord(host.bootstrap).apiKeys ?? defaultHost.bootstrap?.apiKeys
|
|
80
|
+
),
|
|
81
|
+
signingSecret: readString(readRecord(host.bootstrap).signingSecret).trim() || readString(defaultHost.bootstrap?.signingSecret).trim(),
|
|
82
|
+
ttlSeconds: Number(readRecord(host.bootstrap).ttlSeconds ?? defaultHost.bootstrap?.ttlSeconds) > 0 ? Math.floor(
|
|
83
|
+
Number(readRecord(host.bootstrap).ttlSeconds ?? defaultHost.bootstrap?.ttlSeconds)
|
|
84
|
+
) : 300
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
payments: {
|
|
88
|
+
enabledModes: normalizeEnabledModes(payments.enabledModes),
|
|
89
|
+
ownerIssuer: normalizeOwnerIssuer(payments.ownerIssuer, defaultPayments.ownerIssuer),
|
|
90
|
+
paymentUrl: readString(payments.paymentUrl).trim() || readString(defaultPayments.paymentUrl),
|
|
91
|
+
returnSecret: typeof payments.returnSecret === "string" ? payments.returnSecret : readString(defaultPayments.returnSecret),
|
|
92
|
+
returnSecretRef: typeof payments.returnSecretRef === "string" ? payments.returnSecretRef : readString(defaultPayments.returnSecretRef),
|
|
93
|
+
returnUrlAllowlist: typeof payments.returnUrlAllowlist === "string" ? payments.returnUrlAllowlist : readString(defaultPayments.returnUrlAllowlist)
|
|
94
|
+
},
|
|
95
|
+
assets: {
|
|
96
|
+
seedLogo: {
|
|
97
|
+
filePath: readString(seedLogo.filePath),
|
|
98
|
+
routePath: readString(seedLogo.routePath),
|
|
99
|
+
contentType: readString(seedLogo.contentType, "image/svg+xml").trim() || "image/svg+xml"
|
|
100
|
+
},
|
|
101
|
+
paymentPage: {
|
|
102
|
+
filePath: readString(readRecord(assets.paymentPage).filePath)
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
gateway: {
|
|
106
|
+
baseUrl: readString(gateway.baseUrl).trim() || readString(defaultGateway.baseUrl),
|
|
107
|
+
apiKey: readString(gateway.apiKey).trim() || readString(defaultGateway.apiKey)
|
|
108
|
+
},
|
|
109
|
+
branding: {
|
|
110
|
+
tenantName: readString(branding.tenantName),
|
|
111
|
+
serviceName: readString(branding.serviceName),
|
|
112
|
+
stackLabel: readString(branding.stackLabel)
|
|
113
|
+
},
|
|
114
|
+
reference: {
|
|
115
|
+
tenant: readString(reference.tenant),
|
|
116
|
+
workspace: readString(reference.workspace),
|
|
117
|
+
stack: readString(reference.stack),
|
|
118
|
+
mode: readString(reference.mode),
|
|
119
|
+
tenantPolicySlugs: readList(reference.tenantPolicySlugs),
|
|
120
|
+
proofSources: readList(reference.proofSources),
|
|
121
|
+
sdkPaths: readRecord(reference.sdkPaths),
|
|
122
|
+
hostSurfaces: readList(reference.hostSurfaces),
|
|
123
|
+
notes: readList(reference.notes),
|
|
124
|
+
embedSdkCandidateFiles: readList(reference.embedSdkCandidateFiles),
|
|
125
|
+
referenceAssets: readRecord(reference.referenceAssets)
|
|
126
|
+
},
|
|
127
|
+
subjectProfiles: {
|
|
128
|
+
workspace: readString(subjectProfiles.workspace),
|
|
129
|
+
source: readString(subjectProfiles.source),
|
|
130
|
+
catalogJson: readString(subjectProfiles.catalogJson),
|
|
131
|
+
defaultProfiles: readList(subjectProfiles.defaultProfiles),
|
|
132
|
+
resolveCandidates: typeof subjectProfiles.resolveCandidates === "function" ? subjectProfiles.resolveCandidates : null
|
|
133
|
+
},
|
|
134
|
+
overrides: {
|
|
135
|
+
hostProxyService: overrides.hostProxyService && typeof overrides.hostProxyService === "object" ? overrides.hostProxyService : null,
|
|
136
|
+
gatewayClient: overrides.gatewayClient && typeof overrides.gatewayClient === "object" ? overrides.gatewayClient : null,
|
|
137
|
+
paymentHandler: overrides.paymentHandler && typeof overrides.paymentHandler === "object" ? overrides.paymentHandler : null,
|
|
138
|
+
resolvePolicyRequest: typeof overrides.resolvePolicyRequest === "function" ? overrides.resolvePolicyRequest : null
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export {
|
|
143
|
+
normalizeAllowedOrigins,
|
|
144
|
+
normalizeApiKeys,
|
|
145
|
+
normalizeBackendKitOptions,
|
|
146
|
+
normalizeHostModes,
|
|
147
|
+
normalizeOwnerIssuer,
|
|
148
|
+
readList,
|
|
149
|
+
readRecord,
|
|
150
|
+
readString,
|
|
151
|
+
resolvePlatformSecretRefFromEnv
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/backend/options.ts"],
|
|
4
|
+
"sourcesContent": ["// @ts-nocheck\nexport function readRecord(value) {\n return value && typeof value === \"object\" ? value : {};\n}\n\nexport function readString(value, fallback = \"\") {\n return typeof value === \"string\" ? value : fallback;\n}\n\nexport function readList(value) {\n return Array.isArray(value) ? value : [];\n}\n\nexport function normalizeAllowedOrigins(value) {\n if (Array.isArray(value)) {\n return value.map((entry) => readString(entry).trim().replace(/\\/+$/, \"\")).filter(Boolean);\n }\n const raw = readString(value).trim();\n if (!raw) return [];\n return raw\n .split(/[,\\n]/)\n .map((entry) => readString(entry).trim().replace(/\\/+$/, \"\"))\n .filter(Boolean);\n}\n\nexport function normalizeApiKeys(value) {\n if (Array.isArray(value)) {\n return value.map((entry) => readString(entry).trim()).filter(Boolean);\n }\n const raw = readString(value).trim();\n if (!raw) return [];\n return raw\n .split(/[,\\n]/)\n .map((entry) => readString(entry).trim())\n .filter(Boolean);\n}\n\nexport function normalizeOwnerIssuer(value, fallback = \"tenant\") {\n const normalized = readString(value, fallback).trim().toLowerCase();\n return normalized === \"publisher\" ? \"publisher\" : \"tenant\";\n}\n\nexport function normalizeHostModes(hostSurfaces) {\n return readList(hostSurfaces)\n .map((entry) =>\n entry && typeof entry === \"object\"\n ? {\n key: readString(entry.key).trim(),\n label: readString(entry.label).trim(),\n }\n : null,\n )\n .filter((entry) => entry && entry.key && entry.label);\n}\n\nexport function resolvePlatformSecretRefFromEnv(input = {}) {\n const name = String(input?.name || \"\")\n .trim()\n .replace(/[^A-Za-z0-9_]+/g, \"_\")\n .toUpperCase();\n const scope = String(input?.scope || \"\")\n .trim()\n .replace(/[^A-Za-z0-9_]+/g, \"_\")\n .toUpperCase();\n const scopeId = String(input?.scopeId || \"\")\n .trim()\n .replace(/[^A-Za-z0-9_]+/g, \"_\")\n .toUpperCase();\n const candidates = [\n scope && scopeId && name ? `PLATFORM_SECRET__${scope}__${scopeId}__${name}` : \"\",\n scope && name ? `PLATFORM_SECRET__${scope}__${name}` : \"\",\n name ? `PLATFORM_SECRET__${name}` : \"\",\n ].filter(Boolean);\n for (const key of candidates) {\n const value = String(process.env[key] || \"\").trim();\n if (value) return value;\n }\n return \"\";\n}\n\nexport function normalizeBackendKitOptions(input = {}, deps = {}) {\n const defaults = readRecord(deps.defaults);\n const normalizeEnabledModes =\n typeof deps.normalizeEnabledModes === \"function\" ? deps.normalizeEnabledModes : null;\n if (!normalizeEnabledModes) {\n throw new TypeError(\"normalizeEnabledModes is required\");\n }\n\n const host = readRecord(input.host);\n const payments = readRecord(input.payments);\n const assets = readRecord(input.assets);\n const seedLogo = readRecord(assets.seedLogo);\n const gateway = readRecord(input.gateway);\n const branding = readRecord(input.branding);\n const reference = readRecord(input.reference);\n const subjectProfiles = readRecord(input.subjectProfiles);\n const overrides = readRecord(input.overrides);\n const defaultHost = readRecord(defaults.host);\n const defaultPayments = readRecord(defaults.payments);\n const defaultGateway = readRecord(defaults.gateway);\n\n return {\n host: {\n enableReference: host.enableReference !== false && defaultHost.enableReference !== false,\n enableLifecycle: host.enableLifecycle !== false && defaultHost.enableLifecycle !== false,\n enableBridge: host.enableBridge !== false && defaultHost.enableBridge !== false,\n allowedOrigins: normalizeAllowedOrigins(host.allowedOrigins ?? defaultHost.allowedOrigins),\n bootstrap: {\n apiKeys: normalizeApiKeys(\n readRecord(host.bootstrap).apiKeys ?? defaultHost.bootstrap?.apiKeys,\n ),\n signingSecret:\n readString(readRecord(host.bootstrap).signingSecret).trim() ||\n readString(defaultHost.bootstrap?.signingSecret).trim(),\n ttlSeconds:\n Number(readRecord(host.bootstrap).ttlSeconds ?? defaultHost.bootstrap?.ttlSeconds) > 0\n ? Math.floor(\n Number(readRecord(host.bootstrap).ttlSeconds ?? defaultHost.bootstrap?.ttlSeconds),\n )\n : 300,\n },\n },\n payments: {\n enabledModes: normalizeEnabledModes(payments.enabledModes),\n ownerIssuer: normalizeOwnerIssuer(payments.ownerIssuer, defaultPayments.ownerIssuer),\n paymentUrl: readString(payments.paymentUrl).trim() || readString(defaultPayments.paymentUrl),\n returnSecret:\n typeof payments.returnSecret === \"string\"\n ? payments.returnSecret\n : readString(defaultPayments.returnSecret),\n returnSecretRef:\n typeof payments.returnSecretRef === \"string\"\n ? payments.returnSecretRef\n : readString(defaultPayments.returnSecretRef),\n returnUrlAllowlist:\n typeof payments.returnUrlAllowlist === \"string\"\n ? payments.returnUrlAllowlist\n : readString(defaultPayments.returnUrlAllowlist),\n },\n assets: {\n seedLogo: {\n filePath: readString(seedLogo.filePath),\n routePath: readString(seedLogo.routePath),\n contentType: readString(seedLogo.contentType, \"image/svg+xml\").trim() || \"image/svg+xml\",\n },\n paymentPage: {\n filePath: readString(readRecord(assets.paymentPage).filePath),\n },\n },\n gateway: {\n baseUrl: readString(gateway.baseUrl).trim() || readString(defaultGateway.baseUrl),\n apiKey: readString(gateway.apiKey).trim() || readString(defaultGateway.apiKey),\n },\n branding: {\n tenantName: readString(branding.tenantName),\n serviceName: readString(branding.serviceName),\n stackLabel: readString(branding.stackLabel),\n },\n reference: {\n tenant: readString(reference.tenant),\n workspace: readString(reference.workspace),\n stack: readString(reference.stack),\n mode: readString(reference.mode),\n tenantPolicySlugs: readList(reference.tenantPolicySlugs),\n proofSources: readList(reference.proofSources),\n sdkPaths: readRecord(reference.sdkPaths),\n hostSurfaces: readList(reference.hostSurfaces),\n notes: readList(reference.notes),\n embedSdkCandidateFiles: readList(reference.embedSdkCandidateFiles),\n referenceAssets: readRecord(reference.referenceAssets),\n },\n subjectProfiles: {\n workspace: readString(subjectProfiles.workspace),\n source: readString(subjectProfiles.source),\n catalogJson: readString(subjectProfiles.catalogJson),\n defaultProfiles: readList(subjectProfiles.defaultProfiles),\n resolveCandidates:\n typeof subjectProfiles.resolveCandidates === \"function\"\n ? subjectProfiles.resolveCandidates\n : null,\n },\n overrides: {\n hostProxyService:\n overrides.hostProxyService && typeof overrides.hostProxyService === \"object\"\n ? overrides.hostProxyService\n : null,\n gatewayClient:\n overrides.gatewayClient && typeof overrides.gatewayClient === \"object\"\n ? overrides.gatewayClient\n : null,\n paymentHandler:\n overrides.paymentHandler && typeof overrides.paymentHandler === \"object\"\n ? overrides.paymentHandler\n : null,\n resolvePolicyRequest:\n typeof overrides.resolvePolicyRequest === \"function\"\n ? overrides.resolvePolicyRequest\n : null,\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { extractHostedPaymentSessionId } from "@xapps/server-sdk";
|
|
2
|
+
export declare function createPaymentRuntime(options?: {}, deps?: {}): Promise<{
|
|
3
|
+
gatewayClient: any;
|
|
4
|
+
paymentHandler: any;
|
|
5
|
+
paymentSettings: {
|
|
6
|
+
ownerIssuer: string;
|
|
7
|
+
paymentUrl: any;
|
|
8
|
+
returnSecret: any;
|
|
9
|
+
returnSecretRef: any;
|
|
10
|
+
returnUrlAllowlist: any;
|
|
11
|
+
};
|
|
12
|
+
paymentPageFile: any;
|
|
13
|
+
resolvePolicyRequest: any;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function createPaymentEvidenceHandler({ payments, gatewayClient, issuer, resolvePlatformSecretRef, }?: {
|
|
16
|
+
payments?: {};
|
|
17
|
+
gatewayClient?: any;
|
|
18
|
+
issuer?: string;
|
|
19
|
+
}): Promise<import("@xapps/server-sdk").PaymentHandler>;
|
|
20
|
+
export declare function buildHostedGatewayPaymentUrl(input?: {}, runtime?: {}): Promise<string>;
|
|
21
|
+
export declare function buildModeHostedGatewayPaymentUrl(input?: {}, defaults?: {}, runtime?: {}): Promise<string>;
|
|
22
|
+
export declare function registerPaymentPageAssetRoute(fastify: any, { pagePath, pageFile }?: {
|
|
23
|
+
pagePath?: string;
|
|
24
|
+
pageFile?: string;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
export declare function registerPaymentPageApiRoutes(fastify: any, { gatewayClient, pathPrefix }?: {
|
|
27
|
+
gatewayClient?: any;
|
|
28
|
+
pathPrefix?: string;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
export { extractHostedPaymentSessionId };
|
|
31
|
+
//# sourceMappingURL=paymentRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymentRuntime.d.ts","sourceRoot":"","sources":["../../src/backend/paymentRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AA6C3B,wBAAsB,oBAAoB,CAAC,OAAO,KAAK,EAAE,IAAI,KAAK;;;;;;;;;;;;GAoCjE;AAED,wBAAsB,4BAA4B,CAAC,EACjD,QAAa,EACb,aAAoB,EACpB,MAAW,EACX,wBAAwB,GACzB;;;;CAAK,uDAeL;AAED,wBAAsB,4BAA4B,CAAC,KAAK,KAAK,EAAE,OAAO,KAAK,mBAmC1E;AAED,wBAAsB,gCAAgC,CAAC,KAAK,KAAK,EAAE,QAAQ,KAAK,EAAE,OAAO,KAAK,mBA+B7F;AAED,wBAAsB,6BAA6B,CACjD,OAAO,KAAA,EACP,EAAE,QAAiC,EAAE,QAAa,EAAE;;;CAAK,iBAM1D;AAED,wBAAsB,4BAA4B,CAChD,OAAO,KAAA,EACP,EAAE,aAAoB,EAAE,UAAkC,EAAE;;;CAAK,iBAuElE;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import {
|
|
3
|
+
buildHostedGatewayPaymentUrlFromGuardContext,
|
|
4
|
+
createPaymentHandlerAsync,
|
|
5
|
+
extractHostedPaymentSessionId
|
|
6
|
+
} from "@xapps/server-sdk";
|
|
7
|
+
import { normalizeOwnerIssuer, readRecord, readString } from "./options.js";
|
|
8
|
+
function mapHostedSessionResult(input = {}) {
|
|
9
|
+
return {
|
|
10
|
+
...input?.redirectUrl ? { redirect_url: input.redirectUrl } : {},
|
|
11
|
+
...input?.flow ? { flow: input.flow } : {},
|
|
12
|
+
...input?.paymentSessionId ? { payment_session_id: input.paymentSessionId } : {},
|
|
13
|
+
...input?.clientSettleUrl ? { client_settle_url: input.clientSettleUrl } : {},
|
|
14
|
+
...input?.providerReference !== void 0 ? { provider_reference: input.providerReference } : {},
|
|
15
|
+
...input?.scheme ? { scheme: input.scheme } : {},
|
|
16
|
+
...input?.metadata ? { metadata: input.metadata } : {}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function readPaymentRequestParams(source = {}) {
|
|
20
|
+
const input = readRecord(source);
|
|
21
|
+
return {
|
|
22
|
+
paymentSessionId: readString(input.payment_session_id, input.paymentSessionId).trim(),
|
|
23
|
+
returnUrl: readString(input.return_url, input.returnUrl).trim(),
|
|
24
|
+
cancelUrl: readString(input.cancel_url, input.cancelUrl).trim(),
|
|
25
|
+
xappsResume: readString(input.xapps_resume, input.xappsResume).trim()
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function readClientSettleInput(source = {}) {
|
|
29
|
+
const input = readRecord(source);
|
|
30
|
+
const status = readString(input.status).trim();
|
|
31
|
+
return {
|
|
32
|
+
...readPaymentRequestParams(input),
|
|
33
|
+
status: status === "failed" || status === "cancelled" ? status : "paid",
|
|
34
|
+
clientToken: readString(input.client_token, input.clientToken).trim() || void 0,
|
|
35
|
+
metadata: input.metadata && typeof input.metadata === "object" && !Array.isArray(input.metadata) ? input.metadata : void 0
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function sendGatewayUnavailable(reply, message, statusCode = 500) {
|
|
39
|
+
return reply.code(statusCode).send({ message });
|
|
40
|
+
}
|
|
41
|
+
async function createPaymentRuntime(options = {}, deps = {}) {
|
|
42
|
+
const createPaymentHandler = typeof deps.createPaymentHandler === "function" ? deps.createPaymentHandler : createPaymentEvidenceHandler;
|
|
43
|
+
const createGatewayClient = typeof deps.createGatewayClient === "function" ? deps.createGatewayClient : null;
|
|
44
|
+
const resolvedGatewayClient = options?.overrides?.gatewayClient || (createGatewayClient ? createGatewayClient({
|
|
45
|
+
baseUrl: options?.gateway?.baseUrl,
|
|
46
|
+
apiKey: options?.gateway?.apiKey
|
|
47
|
+
}) : null);
|
|
48
|
+
const resolvedPaymentHandler = options?.overrides?.paymentHandler || await createPaymentHandler({
|
|
49
|
+
payments: options?.payments || {},
|
|
50
|
+
gatewayClient: resolvedGatewayClient
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
gatewayClient: resolvedGatewayClient,
|
|
54
|
+
paymentHandler: resolvedPaymentHandler,
|
|
55
|
+
paymentSettings: {
|
|
56
|
+
ownerIssuer: normalizeOwnerIssuer(options?.payments?.ownerIssuer),
|
|
57
|
+
paymentUrl: options?.payments?.paymentUrl,
|
|
58
|
+
returnSecret: options?.payments?.returnSecret,
|
|
59
|
+
returnSecretRef: options?.payments?.returnSecretRef,
|
|
60
|
+
returnUrlAllowlist: options?.payments?.returnUrlAllowlist
|
|
61
|
+
},
|
|
62
|
+
paymentPageFile: options?.assets?.paymentPage?.filePath || "",
|
|
63
|
+
resolvePolicyRequest: options?.overrides?.resolvePolicyRequest || null
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function createPaymentEvidenceHandler({
|
|
67
|
+
payments = {},
|
|
68
|
+
gatewayClient = null,
|
|
69
|
+
issuer = "",
|
|
70
|
+
resolvePlatformSecretRef
|
|
71
|
+
} = {}) {
|
|
72
|
+
const paymentSettings = readRecord(payments);
|
|
73
|
+
return createPaymentHandlerAsync({
|
|
74
|
+
secret: readString(paymentSettings.returnSecret).trim() || void 0,
|
|
75
|
+
secretRef: readString(paymentSettings.returnSecretRef).trim() || void 0,
|
|
76
|
+
secretRefResolverOptions: {
|
|
77
|
+
resolvePlatformSecretRef: async (input) => resolvePlatformSecretRef(input)
|
|
78
|
+
},
|
|
79
|
+
issuer: normalizeOwnerIssuer(readString(issuer).trim() || readString(paymentSettings.ownerIssuer)) || "tenant",
|
|
80
|
+
returnUrlAllowlist: readString(paymentSettings.returnUrlAllowlist),
|
|
81
|
+
gatewayClient: gatewayClient || void 0,
|
|
82
|
+
requirePersistentStoreInProduction: false
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async function buildHostedGatewayPaymentUrl(input = {}, runtime = {}) {
|
|
86
|
+
const payloadInput = readRecord(input);
|
|
87
|
+
const paymentRuntime = readRecord(runtime);
|
|
88
|
+
const paymentSettings = readRecord(paymentRuntime.paymentSettings);
|
|
89
|
+
const ownerIssuer = normalizeOwnerIssuer(paymentSettings.ownerIssuer);
|
|
90
|
+
const gatewayClient = paymentRuntime.gatewayClient || null;
|
|
91
|
+
const paymentHandler = paymentRuntime.paymentHandler || null;
|
|
92
|
+
if (!gatewayClient) {
|
|
93
|
+
throw new Error("gateway payment session client not configured");
|
|
94
|
+
}
|
|
95
|
+
if (!paymentHandler || typeof paymentHandler.upsertSession !== "function") {
|
|
96
|
+
throw new Error("payment evidence handler not configured");
|
|
97
|
+
}
|
|
98
|
+
const result = await buildHostedGatewayPaymentUrlFromGuardContext({
|
|
99
|
+
deps: {
|
|
100
|
+
createPaymentSession: (payload) => gatewayClient.createPaymentSession(payload),
|
|
101
|
+
upsertSession: (payload) => paymentHandler.upsertSession(payload)
|
|
102
|
+
},
|
|
103
|
+
payload: payloadInput.payload,
|
|
104
|
+
context: payloadInput.context,
|
|
105
|
+
guard: payloadInput.guard,
|
|
106
|
+
guardConfig: payloadInput.guardConfig,
|
|
107
|
+
amount: payloadInput.amount,
|
|
108
|
+
currency: payloadInput.currency,
|
|
109
|
+
defaultPaymentUrl: readString(paymentSettings.paymentUrl),
|
|
110
|
+
fallbackIssuer: readString(payloadInput.fallbackIssuer, ownerIssuer) || ownerIssuer,
|
|
111
|
+
storedIssuer: readString(payloadInput.storedIssuer, readString(payloadInput.fallbackIssuer, ownerIssuer)) || ownerIssuer,
|
|
112
|
+
defaultSecret: readString(paymentSettings.returnSecret),
|
|
113
|
+
defaultSecretRef: readString(paymentSettings.returnSecretRef),
|
|
114
|
+
allowDefaultSecretFallback: Boolean(payloadInput.allowDefaultSecretFallback)
|
|
115
|
+
});
|
|
116
|
+
return result.paymentUrl;
|
|
117
|
+
}
|
|
118
|
+
async function buildModeHostedGatewayPaymentUrl(input = {}, defaults = {}, runtime = {}) {
|
|
119
|
+
const payloadInput = readRecord(input);
|
|
120
|
+
const modeDefaults = readRecord(defaults);
|
|
121
|
+
const paymentRuntime = readRecord(runtime);
|
|
122
|
+
const paymentSettings = readRecord(paymentRuntime.paymentSettings);
|
|
123
|
+
const ownerIssuer = normalizeOwnerIssuer(paymentSettings.ownerIssuer);
|
|
124
|
+
return buildHostedGatewayPaymentUrl(
|
|
125
|
+
{
|
|
126
|
+
...payloadInput,
|
|
127
|
+
fallbackIssuer: readString(
|
|
128
|
+
modeDefaults.fallbackIssuer,
|
|
129
|
+
readString(payloadInput.fallbackIssuer, ownerIssuer)
|
|
130
|
+
) || ownerIssuer,
|
|
131
|
+
storedIssuer: readString(
|
|
132
|
+
modeDefaults.storedIssuer,
|
|
133
|
+
readString(
|
|
134
|
+
payloadInput.storedIssuer,
|
|
135
|
+
readString(
|
|
136
|
+
modeDefaults.fallbackIssuer,
|
|
137
|
+
readString(payloadInput.fallbackIssuer, ownerIssuer)
|
|
138
|
+
)
|
|
139
|
+
)
|
|
140
|
+
) || ownerIssuer,
|
|
141
|
+
allowDefaultSecretFallback: Boolean(
|
|
142
|
+
modeDefaults.allowDefaultSecretFallback ?? payloadInput.allowDefaultSecretFallback
|
|
143
|
+
)
|
|
144
|
+
},
|
|
145
|
+
runtime
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
async function registerPaymentPageAssetRoute(fastify, { pagePath = "/tenant-payment.html", pageFile = "" } = {}) {
|
|
149
|
+
fastify.get(pagePath, async (_request, reply) => {
|
|
150
|
+
const html = fs.readFileSync(pageFile, "utf8");
|
|
151
|
+
return reply.code(200).type("text/html; charset=utf-8").send(html);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
async function registerPaymentPageApiRoutes(fastify, { gatewayClient = null, pathPrefix = "/api/tenant-payment" } = {}) {
|
|
155
|
+
fastify.get(`${pathPrefix}/session`, async (request, reply) => {
|
|
156
|
+
const { paymentSessionId, returnUrl, cancelUrl, xappsResume } = readPaymentRequestParams(
|
|
157
|
+
request.query
|
|
158
|
+
);
|
|
159
|
+
if (!gatewayClient || typeof gatewayClient.getGatewayPaymentSession !== "function") {
|
|
160
|
+
return sendGatewayUnavailable(reply, "gateway payment client is not configured");
|
|
161
|
+
}
|
|
162
|
+
if (!paymentSessionId) {
|
|
163
|
+
return reply.code(400).send({ message: "payment_session_id is required" });
|
|
164
|
+
}
|
|
165
|
+
const hosted = await gatewayClient.getGatewayPaymentSession({
|
|
166
|
+
paymentSessionId,
|
|
167
|
+
...returnUrl ? { returnUrl } : {},
|
|
168
|
+
...cancelUrl ? { cancelUrl } : {},
|
|
169
|
+
...xappsResume ? { xappsResume } : {}
|
|
170
|
+
});
|
|
171
|
+
return reply.code(200).send({ status: "success", result: hosted.session });
|
|
172
|
+
});
|
|
173
|
+
fastify.post(`${pathPrefix}/complete`, async (request, reply) => {
|
|
174
|
+
const { paymentSessionId, returnUrl, cancelUrl, xappsResume } = readPaymentRequestParams(
|
|
175
|
+
request.body
|
|
176
|
+
);
|
|
177
|
+
if (!gatewayClient || typeof gatewayClient.completeGatewayPayment !== "function") {
|
|
178
|
+
return sendGatewayUnavailable(reply, "gateway payment client is not configured");
|
|
179
|
+
}
|
|
180
|
+
if (!paymentSessionId) {
|
|
181
|
+
return reply.code(400).send({ message: "payment_session_id is required" });
|
|
182
|
+
}
|
|
183
|
+
const hosted = await gatewayClient.completeGatewayPayment({
|
|
184
|
+
paymentSessionId,
|
|
185
|
+
...returnUrl ? { returnUrl } : {},
|
|
186
|
+
...cancelUrl ? { cancelUrl } : {},
|
|
187
|
+
...xappsResume ? { xappsResume } : {}
|
|
188
|
+
});
|
|
189
|
+
return reply.code(200).send({ status: "success", result: mapHostedSessionResult(hosted) });
|
|
190
|
+
});
|
|
191
|
+
fastify.post(`${pathPrefix}/client-settle`, async (request, reply) => {
|
|
192
|
+
const { paymentSessionId, returnUrl, xappsResume, status, clientToken, metadata } = readClientSettleInput(request.body);
|
|
193
|
+
if (!paymentSessionId) {
|
|
194
|
+
return reply.code(400).send({ message: "payment_session_id is required" });
|
|
195
|
+
}
|
|
196
|
+
if (!gatewayClient || typeof gatewayClient.clientSettleGatewayPayment !== "function") {
|
|
197
|
+
return sendGatewayUnavailable(
|
|
198
|
+
reply,
|
|
199
|
+
"client-settle is not available for this payment mode",
|
|
200
|
+
409
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
const settled = await gatewayClient.clientSettleGatewayPayment({
|
|
205
|
+
paymentSessionId,
|
|
206
|
+
returnUrl: returnUrl || void 0,
|
|
207
|
+
xappsResume: xappsResume || void 0,
|
|
208
|
+
status,
|
|
209
|
+
clientToken,
|
|
210
|
+
metadata
|
|
211
|
+
});
|
|
212
|
+
return reply.code(200).send({ status: "success", result: mapHostedSessionResult(settled) });
|
|
213
|
+
} catch (err) {
|
|
214
|
+
request.log.error(
|
|
215
|
+
{ err: err instanceof Error ? err.message : String(err) },
|
|
216
|
+
"client-settle failed"
|
|
217
|
+
);
|
|
218
|
+
return reply.code(502).send({ message: "client_settle_failed" });
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
export {
|
|
223
|
+
buildHostedGatewayPaymentUrl,
|
|
224
|
+
buildModeHostedGatewayPaymentUrl,
|
|
225
|
+
createPaymentEvidenceHandler,
|
|
226
|
+
createPaymentRuntime,
|
|
227
|
+
extractHostedPaymentSessionId,
|
|
228
|
+
registerPaymentPageApiRoutes,
|
|
229
|
+
registerPaymentPageAssetRoute
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=paymentRuntime.js.map
|