@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.
Files changed (142) hide show
  1. package/README.md +196 -0
  2. package/dist/backend/modes/gateway-managed/payment.d.ts +23 -0
  3. package/dist/backend/modes/gateway-managed/payment.d.ts.map +1 -0
  4. package/dist/backend/modes/gateway-managed/payment.js +49 -0
  5. package/dist/backend/modes/gateway-managed/payment.js.map +7 -0
  6. package/dist/backend/modes/gateway-managed/paymentSession.d.ts +4 -0
  7. package/dist/backend/modes/gateway-managed/paymentSession.d.ts.map +1 -0
  8. package/dist/backend/modes/gateway-managed/paymentSession.js +16 -0
  9. package/dist/backend/modes/gateway-managed/paymentSession.js.map +7 -0
  10. package/dist/backend/modes/gateway-managed/policy.d.ts +68 -0
  11. package/dist/backend/modes/gateway-managed/policy.d.ts.map +1 -0
  12. package/dist/backend/modes/gateway-managed/policy.js +53 -0
  13. package/dist/backend/modes/gateway-managed/policy.js.map +7 -0
  14. package/dist/backend/modes/gateway-managed/policyContext.d.ts +5 -0
  15. package/dist/backend/modes/gateway-managed/policyContext.d.ts.map +1 -0
  16. package/dist/backend/modes/gateway-managed/policyContext.js +22 -0
  17. package/dist/backend/modes/gateway-managed/policyContext.js.map +7 -0
  18. package/dist/backend/modes/index.d.ts +72 -0
  19. package/dist/backend/modes/index.d.ts.map +1 -0
  20. package/dist/backend/modes/index.js +159 -0
  21. package/dist/backend/modes/index.js.map +7 -0
  22. package/dist/backend/modes/owner-managed/payment.d.ts +34 -0
  23. package/dist/backend/modes/owner-managed/payment.d.ts.map +1 -0
  24. package/dist/backend/modes/owner-managed/payment.js +75 -0
  25. package/dist/backend/modes/owner-managed/payment.js.map +7 -0
  26. package/dist/backend/modes/owner-managed/paymentAssets.d.ts +4 -0
  27. package/dist/backend/modes/owner-managed/paymentAssets.d.ts.map +1 -0
  28. package/dist/backend/modes/owner-managed/paymentAssets.js +11 -0
  29. package/dist/backend/modes/owner-managed/paymentAssets.js.map +7 -0
  30. package/dist/backend/modes/owner-managed/paymentPageApi.d.ts +4 -0
  31. package/dist/backend/modes/owner-managed/paymentPageApi.d.ts.map +1 -0
  32. package/dist/backend/modes/owner-managed/paymentPageApi.js +11 -0
  33. package/dist/backend/modes/owner-managed/paymentPageApi.js.map +7 -0
  34. package/dist/backend/modes/owner-managed/paymentSession.d.ts +4 -0
  35. package/dist/backend/modes/owner-managed/paymentSession.d.ts.map +1 -0
  36. package/dist/backend/modes/owner-managed/paymentSession.js +18 -0
  37. package/dist/backend/modes/owner-managed/paymentSession.js.map +7 -0
  38. package/dist/backend/modes/owner-managed/policy.d.ts +68 -0
  39. package/dist/backend/modes/owner-managed/policy.d.ts.map +1 -0
  40. package/dist/backend/modes/owner-managed/policy.js +53 -0
  41. package/dist/backend/modes/owner-managed/policy.js.map +7 -0
  42. package/dist/backend/modes/owner-managed/policyContext.d.ts +5 -0
  43. package/dist/backend/modes/owner-managed/policyContext.d.ts.map +1 -0
  44. package/dist/backend/modes/owner-managed/policyContext.js +26 -0
  45. package/dist/backend/modes/owner-managed/policyContext.js.map +7 -0
  46. package/dist/backend/modes/publisher-delegated/payment.d.ts +23 -0
  47. package/dist/backend/modes/publisher-delegated/payment.d.ts.map +1 -0
  48. package/dist/backend/modes/publisher-delegated/payment.js +50 -0
  49. package/dist/backend/modes/publisher-delegated/payment.js.map +7 -0
  50. package/dist/backend/modes/publisher-delegated/paymentSession.d.ts +4 -0
  51. package/dist/backend/modes/publisher-delegated/paymentSession.d.ts.map +1 -0
  52. package/dist/backend/modes/publisher-delegated/paymentSession.js +16 -0
  53. package/dist/backend/modes/publisher-delegated/paymentSession.js.map +7 -0
  54. package/dist/backend/modes/publisher-delegated/policy.d.ts +68 -0
  55. package/dist/backend/modes/publisher-delegated/policy.d.ts.map +1 -0
  56. package/dist/backend/modes/publisher-delegated/policy.js +53 -0
  57. package/dist/backend/modes/publisher-delegated/policy.js.map +7 -0
  58. package/dist/backend/modes/publisher-delegated/policyContext.d.ts +5 -0
  59. package/dist/backend/modes/publisher-delegated/policyContext.d.ts.map +1 -0
  60. package/dist/backend/modes/publisher-delegated/policyContext.js +22 -0
  61. package/dist/backend/modes/publisher-delegated/policyContext.js.map +7 -0
  62. package/dist/backend/modes/tenant-delegated/payment.d.ts +23 -0
  63. package/dist/backend/modes/tenant-delegated/payment.d.ts.map +1 -0
  64. package/dist/backend/modes/tenant-delegated/payment.js +50 -0
  65. package/dist/backend/modes/tenant-delegated/payment.js.map +7 -0
  66. package/dist/backend/modes/tenant-delegated/paymentSession.d.ts +4 -0
  67. package/dist/backend/modes/tenant-delegated/paymentSession.d.ts.map +1 -0
  68. package/dist/backend/modes/tenant-delegated/paymentSession.js +16 -0
  69. package/dist/backend/modes/tenant-delegated/paymentSession.js.map +7 -0
  70. package/dist/backend/modes/tenant-delegated/policy.d.ts +68 -0
  71. package/dist/backend/modes/tenant-delegated/policy.d.ts.map +1 -0
  72. package/dist/backend/modes/tenant-delegated/policy.js +53 -0
  73. package/dist/backend/modes/tenant-delegated/policy.js.map +7 -0
  74. package/dist/backend/modes/tenant-delegated/policyContext.d.ts +5 -0
  75. package/dist/backend/modes/tenant-delegated/policyContext.d.ts.map +1 -0
  76. package/dist/backend/modes/tenant-delegated/policyContext.js +22 -0
  77. package/dist/backend/modes/tenant-delegated/policyContext.js.map +7 -0
  78. package/dist/backend/modules.d.ts +33 -0
  79. package/dist/backend/modules.d.ts.map +1 -0
  80. package/dist/backend/modules.js +100 -0
  81. package/dist/backend/modules.js.map +7 -0
  82. package/dist/backend/options.d.ts +78 -0
  83. package/dist/backend/options.d.ts.map +1 -0
  84. package/dist/backend/options.js +153 -0
  85. package/dist/backend/options.js.map +7 -0
  86. package/dist/backend/paymentRuntime.d.ts +31 -0
  87. package/dist/backend/paymentRuntime.d.ts.map +1 -0
  88. package/dist/backend/paymentRuntime.js +231 -0
  89. package/dist/backend/paymentRuntime.js.map +7 -0
  90. package/dist/backend/policies/common.d.ts +102 -0
  91. package/dist/backend/policies/common.d.ts.map +1 -0
  92. package/dist/backend/policies/common.js +226 -0
  93. package/dist/backend/policies/common.js.map +7 -0
  94. package/dist/backend/routes/gateway/guard.d.ts +7 -0
  95. package/dist/backend/routes/gateway/guard.d.ts.map +1 -0
  96. package/dist/backend/routes/gateway/guard.js +89 -0
  97. package/dist/backend/routes/gateway/guard.js.map +7 -0
  98. package/dist/backend/routes/gateway/hostApi.d.ts +8 -0
  99. package/dist/backend/routes/gateway/hostApi.d.ts.map +1 -0
  100. package/dist/backend/routes/gateway/hostApi.js +45 -0
  101. package/dist/backend/routes/gateway/hostApi.js.map +7 -0
  102. package/dist/backend/routes/gateway/hostApiBridge.d.ts +5 -0
  103. package/dist/backend/routes/gateway/hostApiBridge.d.ts.map +1 -0
  104. package/dist/backend/routes/gateway/hostApiBridge.js +61 -0
  105. package/dist/backend/routes/gateway/hostApiBridge.js.map +7 -0
  106. package/dist/backend/routes/gateway/hostApiCore.d.ts +5 -0
  107. package/dist/backend/routes/gateway/hostApiCore.d.ts.map +1 -0
  108. package/dist/backend/routes/gateway/hostApiCore.js +95 -0
  109. package/dist/backend/routes/gateway/hostApiCore.js.map +7 -0
  110. package/dist/backend/routes/gateway/hostApiLifecycle.d.ts +5 -0
  111. package/dist/backend/routes/gateway/hostApiLifecycle.d.ts.map +1 -0
  112. package/dist/backend/routes/gateway/hostApiLifecycle.js +80 -0
  113. package/dist/backend/routes/gateway/hostApiLifecycle.js.map +7 -0
  114. package/dist/backend/routes/gateway/hostContractBoundary.d.ts +25 -0
  115. package/dist/backend/routes/gateway/hostContractBoundary.d.ts.map +1 -0
  116. package/dist/backend/routes/gateway/hostContractBoundary.js +43 -0
  117. package/dist/backend/routes/gateway/hostContractBoundary.js.map +7 -0
  118. package/dist/backend/routes/gateway/payment.d.ts +4 -0
  119. package/dist/backend/routes/gateway/payment.d.ts.map +1 -0
  120. package/dist/backend/routes/gateway/payment.js +10 -0
  121. package/dist/backend/routes/gateway/payment.js.map +7 -0
  122. package/dist/backend/routes/gateway/shared.d.ts +36 -0
  123. package/dist/backend/routes/gateway/shared.d.ts.map +1 -0
  124. package/dist/backend/routes/gateway/shared.js +208 -0
  125. package/dist/backend/routes/gateway/shared.js.map +7 -0
  126. package/dist/backend/routes/gateway/subjectProfiles.d.ts +2 -0
  127. package/dist/backend/routes/gateway/subjectProfiles.d.ts.map +1 -0
  128. package/dist/backend/routes/gateway/subjectProfiles.js +150 -0
  129. package/dist/backend/routes/gateway/subjectProfiles.js.map +7 -0
  130. package/dist/backend/routes/health.d.ts +2 -0
  131. package/dist/backend/routes/health.d.ts.map +1 -0
  132. package/dist/backend/routes/health.js +20 -0
  133. package/dist/backend/routes/health.js.map +7 -0
  134. package/dist/backend/routes/reference.d.ts +2 -0
  135. package/dist/backend/routes/reference.d.ts.map +1 -0
  136. package/dist/backend/routes/reference.js +414 -0
  137. package/dist/backend/routes/reference.js.map +7 -0
  138. package/dist/index.d.ts +10 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +81 -0
  141. package/dist/index.js.map +7 -0
  142. 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