@xapps-platform/backend-kit 0.1.2 → 0.1.4
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 +35 -0
- package/dist/backend/modules.d.ts +75 -24
- package/dist/backend/modules.d.ts.map +1 -1
- package/dist/backend/modules.js +6 -2
- package/dist/backend/modules.js.map +2 -2
- package/dist/backend/options.d.ts +40 -28
- package/dist/backend/options.d.ts.map +1 -1
- package/dist/backend/options.js +14 -12
- package/dist/backend/options.js.map +2 -2
- package/dist/backend/paymentRuntime.d.ts +1 -1
- package/dist/backend/policies/common.d.ts.map +1 -1
- package/dist/backend/policies/common.js +3 -1
- package/dist/backend/policies/common.js.map +2 -2
- package/dist/backend/routes/health.d.ts +23 -1
- package/dist/backend/routes/health.d.ts.map +1 -1
- package/dist/backend/routes/health.js.map +2 -2
- package/dist/index.d.ts +45 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -8
- package/dist/index.js.map +3 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Modular Node backend kit for the current Xapps backend contract.
|
|
4
4
|
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @xapps-platform/backend-kit
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## When to use it
|
|
12
|
+
|
|
13
|
+
Use `@xapps-platform/backend-kit` when you want a higher-level backend assembly with default routes, payment runtime composition, and override seams.
|
|
14
|
+
|
|
15
|
+
Use `@xapps-platform/server-sdk` directly only when you need lower-level primitives that the backend kit intentionally does not own.
|
|
16
|
+
|
|
5
17
|
Current public surface:
|
|
6
18
|
|
|
7
19
|
- backend composition for the shipped integrator contract
|
|
@@ -38,6 +50,22 @@ Consumer rule:
|
|
|
38
50
|
- import package entry surfaces such as `@xapps-platform/backend-kit/backend/...`
|
|
39
51
|
- do not consume raw `src/...` files directly from apps
|
|
40
52
|
|
|
53
|
+
## Minimal usage
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { createBackendKit } from "@xapps-platform/backend-kit";
|
|
57
|
+
|
|
58
|
+
const backendKit = await createBackendKit(
|
|
59
|
+
{
|
|
60
|
+
gateway: { baseUrl: "https://gateway.example.test", apiKey: "gateway_key" },
|
|
61
|
+
host: { allowedOrigins: ["https://tenant.example.test"] },
|
|
62
|
+
payments: { enabledModes: ["gateway_managed"] },
|
|
63
|
+
reference: { hostSurfaces: [{ key: "single-panel", label: "Single Panel" }] },
|
|
64
|
+
},
|
|
65
|
+
deps,
|
|
66
|
+
);
|
|
67
|
+
```
|
|
68
|
+
|
|
41
69
|
## What It Gives You
|
|
42
70
|
|
|
43
71
|
The current package surface provides:
|
|
@@ -194,3 +222,10 @@ Keep internals:
|
|
|
194
222
|
|
|
195
223
|
Node and PHP should keep the same backend behavior in the end. Differences
|
|
196
224
|
should be runtime-adapter concerns, not separate platform feature lines.
|
|
225
|
+
|
|
226
|
+
## Verify locally
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
npm run build --workspace packages/backend-kit
|
|
230
|
+
npm run smoke --workspace packages/backend-kit
|
|
231
|
+
```
|
|
@@ -1,33 +1,84 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { BackendKitNormalizedOptions, HostSurface, StringRecord } from "./options.js";
|
|
2
|
+
type RegisterableApp = unknown;
|
|
3
|
+
type RouteModule = {
|
|
4
|
+
registerRoutes: (app: RegisterableApp) => Promise<void> | void;
|
|
5
|
+
};
|
|
6
|
+
type HostReferenceModuleInput = {
|
|
7
|
+
gateway?: StringRecord;
|
|
8
|
+
branding?: StringRecord;
|
|
9
|
+
reference?: StringRecord;
|
|
5
10
|
enableLifecycle?: boolean;
|
|
6
11
|
enableBridge?: boolean;
|
|
7
|
-
allowedOrigins?:
|
|
8
|
-
bootstrap?:
|
|
9
|
-
hostProxyService?:
|
|
10
|
-
}, deps?: {}): {
|
|
11
|
-
registerRoutes(app: any): Promise<void>;
|
|
12
|
+
allowedOrigins?: string[];
|
|
13
|
+
bootstrap?: BackendKitNormalizedOptions["host"]["bootstrap"];
|
|
14
|
+
hostProxyService?: unknown;
|
|
12
15
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
type HostReferenceModuleDeps = {
|
|
17
|
+
createHostProxyService?: (input: {
|
|
18
|
+
gateway?: StringRecord;
|
|
19
|
+
branding?: StringRecord;
|
|
20
|
+
reference?: StringRecord;
|
|
21
|
+
}) => unknown;
|
|
22
|
+
registerHostRoutes?: (app: RegisterableApp, options: {
|
|
23
|
+
enableLifecycle: boolean;
|
|
24
|
+
enableBridge: boolean;
|
|
25
|
+
allowedOrigins: string[];
|
|
26
|
+
bootstrap: BackendKitNormalizedOptions["host"]["bootstrap"];
|
|
27
|
+
branding: StringRecord;
|
|
28
|
+
hostProxyService: unknown;
|
|
29
|
+
}) => Promise<void> | void;
|
|
30
|
+
};
|
|
31
|
+
type HostProxyServiceDeps = {
|
|
32
|
+
createGatewayClient?: (input: {
|
|
33
|
+
baseUrl: string;
|
|
34
|
+
apiKey: string;
|
|
35
|
+
}) => unknown;
|
|
36
|
+
createEmbedHostProxyService?: (input: {
|
|
37
|
+
gatewayClient: unknown;
|
|
38
|
+
gatewayUrl: string;
|
|
39
|
+
hostModes?: HostSurface[];
|
|
40
|
+
}) => unknown;
|
|
41
|
+
};
|
|
42
|
+
type GatewayExecutionModuleDeps = {
|
|
43
|
+
registerPaymentRoutes?: (app: RegisterableApp, options: {
|
|
44
|
+
enabledModes: string[];
|
|
45
|
+
paymentRuntime: unknown;
|
|
46
|
+
}) => Promise<void> | void;
|
|
47
|
+
registerGuardRoutes?: (app: RegisterableApp, options: {
|
|
48
|
+
enabledModes: string[];
|
|
49
|
+
paymentRuntime: unknown;
|
|
50
|
+
}) => Promise<void> | void;
|
|
51
|
+
registerSubjectProfileRoutes?: (app: RegisterableApp, subjectProfiles: StringRecord) => Promise<void> | void;
|
|
22
52
|
};
|
|
53
|
+
type ReferenceSurfaceModuleDeps = {
|
|
54
|
+
registerReferenceRoutes?: (app: RegisterableApp, options: {
|
|
55
|
+
enableReference: boolean;
|
|
56
|
+
enableLifecycle: boolean;
|
|
57
|
+
enableBridge: boolean;
|
|
58
|
+
enabledModes?: string[];
|
|
59
|
+
gateway: StringRecord;
|
|
60
|
+
branding: StringRecord;
|
|
61
|
+
reference: StringRecord;
|
|
62
|
+
}) => Promise<void> | void;
|
|
63
|
+
};
|
|
64
|
+
export declare function createHostReferenceModule({ gateway, branding, reference, enableLifecycle, enableBridge, allowedOrigins, bootstrap, hostProxyService, }?: HostReferenceModuleInput, deps?: HostReferenceModuleDeps): RouteModule;
|
|
65
|
+
export declare function createHostProxyService({ gateway, reference }?: {
|
|
66
|
+
gateway?: StringRecord;
|
|
67
|
+
reference?: StringRecord;
|
|
68
|
+
}, deps?: HostProxyServiceDeps): unknown;
|
|
69
|
+
export declare function createGatewayExecutionModule({ enabledModes, subjectProfiles, paymentRuntime, }?: {
|
|
70
|
+
enabledModes?: string[];
|
|
71
|
+
subjectProfiles?: StringRecord;
|
|
72
|
+
paymentRuntime?: unknown;
|
|
73
|
+
}, deps?: GatewayExecutionModuleDeps): RouteModule;
|
|
23
74
|
export declare function createReferenceSurfaceModule({ gateway, branding, enableReference, enableLifecycle, enableBridge, enabledModes, reference, }?: {
|
|
24
|
-
gateway?:
|
|
25
|
-
branding?:
|
|
75
|
+
gateway?: StringRecord;
|
|
76
|
+
branding?: StringRecord;
|
|
26
77
|
enableReference?: boolean;
|
|
27
78
|
enableLifecycle?: boolean;
|
|
28
79
|
enableBridge?: boolean;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
80
|
+
enabledModes?: string[];
|
|
81
|
+
reference?: StringRecord;
|
|
82
|
+
}, deps?: ReferenceSurfaceModuleDeps): RouteModule;
|
|
83
|
+
export {};
|
|
33
84
|
//# sourceMappingURL=modules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/backend/modules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/backend/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG3F,KAAK,eAAe,GAAG,OAAO,CAAC;AAE/B,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC/B,OAAO,CAAC,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,SAAS,CAAC,EAAE,YAAY,CAAC;KAC1B,KAAK,OAAO,CAAC;IACd,kBAAkB,CAAC,EAAE,CACnB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE;QACP,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5D,QAAQ,EAAE,YAAY,CAAC;QACvB,gBAAgB,EAAE,OAAO,CAAC;KAC3B,KACE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IAC9E,2BAA2B,CAAC,EAAE,CAAC,KAAK,EAAE;QACpC,aAAa,EAAE,OAAO,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;KAC3B,KAAK,OAAO,CAAC;CACf,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,qBAAqB,CAAC,EAAE,CACtB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,KACzD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,mBAAmB,CAAC,EAAE,CACpB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,KACzD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,4BAA4B,CAAC,EAAE,CAC7B,GAAG,EAAE,eAAe,EACpB,eAAe,EAAE,YAAY,KAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,uBAAuB,CAAC,EAAE,CACxB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE;QACP,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,OAAO,EAAE,YAAY,CAAC;QACtB,QAAQ,EAAE,YAAY,CAAC;QACvB,SAAS,EAAE,YAAY,CAAC;KACzB,KACE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,EACE,OAAY,EACZ,QAAa,EACb,SAAc,EACd,eAAsB,EACtB,YAAmB,EACnB,cAAmB,EACnB,SAA+D,EAC/D,gBAAuB,GACxB,GAAE,wBAA6B,EAChC,IAAI,GAAE,uBAA4B,GACjC,WAAW,CA8Bb;AAED,wBAAgB,sBAAsB,CACpC,EAAE,OAAY,EAAE,SAAc,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,YAAY,CAAA;CAAO,EAC3F,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAoBT;AAED,wBAAgB,4BAA4B,CAC1C,EACE,YAAiB,EACjB,eAAoB,EACpB,cAAmB,GACpB,GAAE;IACD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CACrB,EACN,IAAI,GAAE,0BAA+B,GACpC,WAAW,CAoBb;AAED,wBAAgB,4BAA4B,CAC1C,EACE,OAAY,EACZ,QAAa,EACb,eAAsB,EACtB,eAAsB,EACtB,YAAmB,EACnB,YAAY,EACZ,SAAc,GACf,GAAE;IACD,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;CACrB,EACN,IAAI,GAAE,0BAA+B,GACpC,WAAW,CAsBb"}
|
package/dist/backend/modules.js
CHANGED
|
@@ -6,7 +6,7 @@ function createHostReferenceModule({
|
|
|
6
6
|
enableLifecycle = true,
|
|
7
7
|
enableBridge = true,
|
|
8
8
|
allowedOrigins = [],
|
|
9
|
-
bootstrap = {},
|
|
9
|
+
bootstrap = { apiKeys: [], signingSecret: "", ttlSeconds: 300 },
|
|
10
10
|
hostProxyService = null
|
|
11
11
|
} = {}, deps = {}) {
|
|
12
12
|
const createHostProxyService2 = typeof deps.createHostProxyService === "function" ? deps.createHostProxyService : null;
|
|
@@ -48,7 +48,11 @@ function createHostProxyService({ gateway = {}, reference = {} } = {}, deps = {}
|
|
|
48
48
|
hostModes: hostModes.length > 0 ? hostModes : void 0
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
function createGatewayExecutionModule({
|
|
51
|
+
function createGatewayExecutionModule({
|
|
52
|
+
enabledModes = [],
|
|
53
|
+
subjectProfiles = {},
|
|
54
|
+
paymentRuntime = {}
|
|
55
|
+
} = {}, deps = {}) {
|
|
52
56
|
const registerPaymentRoutes = typeof deps.registerPaymentRoutes === "function" ? deps.registerPaymentRoutes : null;
|
|
53
57
|
const registerGuardRoutes = typeof deps.registerGuardRoutes === "function" ? deps.registerGuardRoutes : null;
|
|
54
58
|
const registerSubjectProfileRoutes = typeof deps.registerSubjectProfileRoutes === "function" ? deps.registerSubjectProfileRoutes : null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/backend/modules.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "AACA,SAAS,oBAAoB,kBAAkB;
|
|
4
|
+
"sourcesContent": ["import type { BackendKitNormalizedOptions, HostSurface, StringRecord } from \"./options.js\";\nimport { normalizeHostModes, readString } from \"./options.js\";\n\ntype RegisterableApp = unknown;\n\ntype RouteModule = {\n registerRoutes: (app: RegisterableApp) => Promise<void> | void;\n};\n\ntype HostReferenceModuleInput = {\n gateway?: StringRecord;\n branding?: StringRecord;\n reference?: StringRecord;\n enableLifecycle?: boolean;\n enableBridge?: boolean;\n allowedOrigins?: string[];\n bootstrap?: BackendKitNormalizedOptions[\"host\"][\"bootstrap\"];\n hostProxyService?: unknown;\n};\n\ntype HostReferenceModuleDeps = {\n createHostProxyService?: (input: {\n gateway?: StringRecord;\n branding?: StringRecord;\n reference?: StringRecord;\n }) => unknown;\n registerHostRoutes?: (\n app: RegisterableApp,\n options: {\n enableLifecycle: boolean;\n enableBridge: boolean;\n allowedOrigins: string[];\n bootstrap: BackendKitNormalizedOptions[\"host\"][\"bootstrap\"];\n branding: StringRecord;\n hostProxyService: unknown;\n },\n ) => Promise<void> | void;\n};\n\ntype HostProxyServiceDeps = {\n createGatewayClient?: (input: { baseUrl: string; apiKey: string }) => unknown;\n createEmbedHostProxyService?: (input: {\n gatewayClient: unknown;\n gatewayUrl: string;\n hostModes?: HostSurface[];\n }) => unknown;\n};\n\ntype GatewayExecutionModuleDeps = {\n registerPaymentRoutes?: (\n app: RegisterableApp,\n options: { enabledModes: string[]; paymentRuntime: unknown },\n ) => Promise<void> | void;\n registerGuardRoutes?: (\n app: RegisterableApp,\n options: { enabledModes: string[]; paymentRuntime: unknown },\n ) => Promise<void> | void;\n registerSubjectProfileRoutes?: (\n app: RegisterableApp,\n subjectProfiles: StringRecord,\n ) => Promise<void> | void;\n};\n\ntype ReferenceSurfaceModuleDeps = {\n registerReferenceRoutes?: (\n app: RegisterableApp,\n options: {\n enableReference: boolean;\n enableLifecycle: boolean;\n enableBridge: boolean;\n enabledModes?: string[];\n gateway: StringRecord;\n branding: StringRecord;\n reference: StringRecord;\n },\n ) => Promise<void> | void;\n};\n\nexport function createHostReferenceModule(\n {\n gateway = {},\n branding = {},\n reference = {},\n enableLifecycle = true,\n enableBridge = true,\n allowedOrigins = [],\n bootstrap = { apiKeys: [], signingSecret: \"\", ttlSeconds: 300 },\n hostProxyService = null,\n }: HostReferenceModuleInput = {},\n deps: HostReferenceModuleDeps = {},\n): RouteModule {\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(\n { gateway = {}, reference = {} }: { gateway?: StringRecord; reference?: StringRecord } = {},\n deps: HostProxyServiceDeps = {},\n): unknown {\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 {\n enabledModes = [],\n subjectProfiles = {},\n paymentRuntime = {},\n }: {\n enabledModes?: string[];\n subjectProfiles?: StringRecord;\n paymentRuntime?: unknown;\n } = {},\n deps: GatewayExecutionModuleDeps = {},\n): RouteModule {\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 gateway?: StringRecord;\n branding?: StringRecord;\n enableReference?: boolean;\n enableLifecycle?: boolean;\n enableBridge?: boolean;\n enabledModes?: string[];\n reference?: StringRecord;\n } = {},\n deps: ReferenceSurfaceModuleDeps = {},\n): RouteModule {\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
6
|
"names": ["createHostProxyService"]
|
|
7
7
|
}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
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): {
|
|
1
|
+
export type StringRecord = Record<string, unknown>;
|
|
2
|
+
export type HostSurface = {
|
|
8
3
|
key: string;
|
|
9
4
|
label: string;
|
|
10
|
-
}
|
|
11
|
-
export
|
|
12
|
-
export declare function normalizeBackendKitOptions(input?: {}, deps?: {}): {
|
|
5
|
+
};
|
|
6
|
+
export type BackendKitNormalizedOptions = {
|
|
13
7
|
host: {
|
|
14
8
|
enableReference: boolean;
|
|
15
9
|
enableLifecycle: boolean;
|
|
@@ -22,12 +16,12 @@ export declare function normalizeBackendKitOptions(input?: {}, deps?: {}): {
|
|
|
22
16
|
};
|
|
23
17
|
};
|
|
24
18
|
payments: {
|
|
25
|
-
enabledModes:
|
|
26
|
-
ownerIssuer:
|
|
19
|
+
enabledModes: string[];
|
|
20
|
+
ownerIssuer: "tenant" | "publisher";
|
|
27
21
|
paymentUrl: string;
|
|
28
|
-
returnSecret:
|
|
29
|
-
returnSecretRef:
|
|
30
|
-
returnUrlAllowlist:
|
|
22
|
+
returnSecret: string;
|
|
23
|
+
returnSecretRef: string;
|
|
24
|
+
returnUrlAllowlist: string;
|
|
31
25
|
};
|
|
32
26
|
assets: {
|
|
33
27
|
seedLogo: {
|
|
@@ -53,26 +47,44 @@ export declare function normalizeBackendKitOptions(input?: {}, deps?: {}): {
|
|
|
53
47
|
workspace: string;
|
|
54
48
|
stack: string;
|
|
55
49
|
mode: string;
|
|
56
|
-
tenantPolicySlugs:
|
|
57
|
-
proofSources:
|
|
58
|
-
sdkPaths:
|
|
59
|
-
hostSurfaces:
|
|
60
|
-
notes:
|
|
61
|
-
embedSdkCandidateFiles:
|
|
62
|
-
referenceAssets:
|
|
50
|
+
tenantPolicySlugs: unknown[];
|
|
51
|
+
proofSources: unknown[];
|
|
52
|
+
sdkPaths: StringRecord;
|
|
53
|
+
hostSurfaces: unknown[];
|
|
54
|
+
notes: unknown[];
|
|
55
|
+
embedSdkCandidateFiles: unknown[];
|
|
56
|
+
referenceAssets: StringRecord;
|
|
63
57
|
};
|
|
64
58
|
subjectProfiles: {
|
|
65
59
|
workspace: string;
|
|
66
60
|
source: string;
|
|
67
61
|
catalogJson: string;
|
|
68
|
-
defaultProfiles:
|
|
69
|
-
resolveCandidates:
|
|
62
|
+
defaultProfiles: unknown[];
|
|
63
|
+
resolveCandidates: ((...args: unknown[]) => unknown) | null;
|
|
70
64
|
};
|
|
71
65
|
overrides: {
|
|
72
|
-
hostProxyService:
|
|
73
|
-
gatewayClient:
|
|
74
|
-
paymentHandler:
|
|
75
|
-
resolvePolicyRequest:
|
|
66
|
+
hostProxyService: StringRecord | null;
|
|
67
|
+
gatewayClient: StringRecord | null;
|
|
68
|
+
paymentHandler: StringRecord | null;
|
|
69
|
+
resolvePolicyRequest: ((...args: unknown[]) => unknown) | null;
|
|
76
70
|
};
|
|
77
71
|
};
|
|
72
|
+
type NormalizeOptionsDeps = {
|
|
73
|
+
defaults?: StringRecord;
|
|
74
|
+
normalizeEnabledModes?: (value: unknown) => string[];
|
|
75
|
+
};
|
|
76
|
+
export declare function readRecord(value: unknown): StringRecord;
|
|
77
|
+
export declare function readString(value: unknown, fallback?: string): string;
|
|
78
|
+
export declare function readList(value: unknown): unknown[];
|
|
79
|
+
export declare function normalizeAllowedOrigins(value: unknown): string[];
|
|
80
|
+
export declare function normalizeApiKeys(value: unknown): string[];
|
|
81
|
+
export declare function normalizeOwnerIssuer(value: unknown, fallback?: "tenant" | "publisher"): "tenant" | "publisher";
|
|
82
|
+
export declare function normalizeHostModes(hostSurfaces: unknown): HostSurface[];
|
|
83
|
+
export declare function resolvePlatformSecretRefFromEnv(input?: {
|
|
84
|
+
name?: string | null;
|
|
85
|
+
scope?: string | null;
|
|
86
|
+
scopeId?: string | null;
|
|
87
|
+
}): string;
|
|
88
|
+
export declare function normalizeBackendKitOptions(input?: StringRecord, deps?: NormalizeOptionsDeps): BackendKitNormalizedOptions;
|
|
89
|
+
export {};
|
|
78
90
|
//# sourceMappingURL=options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/backend/options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/backend/options.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/options.js
CHANGED
|
@@ -33,7 +33,7 @@ function normalizeHostModes(hostSurfaces) {
|
|
|
33
33
|
key: readString(entry.key).trim(),
|
|
34
34
|
label: readString(entry.label).trim()
|
|
35
35
|
} : null
|
|
36
|
-
).filter((entry) => entry && entry.key && entry.label);
|
|
36
|
+
).filter((entry) => Boolean(entry && entry.key && entry.label));
|
|
37
37
|
}
|
|
38
38
|
function resolvePlatformSecretRefFromEnv(input = {}) {
|
|
39
39
|
const name = String(input?.name || "").trim().replace(/[^A-Za-z0-9_]+/g, "_").toUpperCase();
|
|
@@ -60,6 +60,7 @@ function normalizeBackendKitOptions(input = {}, deps = {}) {
|
|
|
60
60
|
const payments = readRecord(input.payments);
|
|
61
61
|
const assets = readRecord(input.assets);
|
|
62
62
|
const seedLogo = readRecord(assets.seedLogo);
|
|
63
|
+
const paymentPage = readRecord(assets.paymentPage);
|
|
63
64
|
const gateway = readRecord(input.gateway);
|
|
64
65
|
const branding = readRecord(input.branding);
|
|
65
66
|
const reference = readRecord(input.reference);
|
|
@@ -68,6 +69,8 @@ function normalizeBackendKitOptions(input = {}, deps = {}) {
|
|
|
68
69
|
const defaultHost = readRecord(defaults.host);
|
|
69
70
|
const defaultPayments = readRecord(defaults.payments);
|
|
70
71
|
const defaultGateway = readRecord(defaults.gateway);
|
|
72
|
+
const hostBootstrap = readRecord(host.bootstrap);
|
|
73
|
+
const defaultHostBootstrap = readRecord(defaultHost.bootstrap);
|
|
71
74
|
return {
|
|
72
75
|
host: {
|
|
73
76
|
enableReference: host.enableReference !== false && defaultHost.enableReference !== false,
|
|
@@ -75,18 +78,17 @@ function normalizeBackendKitOptions(input = {}, deps = {}) {
|
|
|
75
78
|
enableBridge: host.enableBridge !== false && defaultHost.enableBridge !== false,
|
|
76
79
|
allowedOrigins: normalizeAllowedOrigins(host.allowedOrigins ?? defaultHost.allowedOrigins),
|
|
77
80
|
bootstrap: {
|
|
78
|
-
apiKeys: normalizeApiKeys(
|
|
79
|
-
|
|
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
|
|
81
|
+
apiKeys: normalizeApiKeys(hostBootstrap.apiKeys ?? defaultHostBootstrap.apiKeys),
|
|
82
|
+
signingSecret: readString(hostBootstrap.signingSecret).trim() || readString(defaultHostBootstrap.signingSecret).trim(),
|
|
83
|
+
ttlSeconds: Number(hostBootstrap.ttlSeconds ?? defaultHostBootstrap.ttlSeconds) > 0 ? Math.floor(Number(hostBootstrap.ttlSeconds ?? defaultHostBootstrap.ttlSeconds)) : 300
|
|
85
84
|
}
|
|
86
85
|
},
|
|
87
86
|
payments: {
|
|
88
87
|
enabledModes: normalizeEnabledModes(payments.enabledModes),
|
|
89
|
-
ownerIssuer: normalizeOwnerIssuer(
|
|
88
|
+
ownerIssuer: normalizeOwnerIssuer(
|
|
89
|
+
payments.ownerIssuer,
|
|
90
|
+
normalizeOwnerIssuer(defaultPayments.ownerIssuer)
|
|
91
|
+
),
|
|
90
92
|
paymentUrl: readString(payments.paymentUrl).trim() || readString(defaultPayments.paymentUrl),
|
|
91
93
|
returnSecret: typeof payments.returnSecret === "string" ? payments.returnSecret : readString(defaultPayments.returnSecret),
|
|
92
94
|
returnSecretRef: typeof payments.returnSecretRef === "string" ? payments.returnSecretRef : readString(defaultPayments.returnSecretRef),
|
|
@@ -99,7 +101,7 @@ function normalizeBackendKitOptions(input = {}, deps = {}) {
|
|
|
99
101
|
contentType: readString(seedLogo.contentType, "image/svg+xml").trim() || "image/svg+xml"
|
|
100
102
|
},
|
|
101
103
|
paymentPage: {
|
|
102
|
-
filePath: readString(
|
|
104
|
+
filePath: readString(paymentPage.filePath)
|
|
103
105
|
}
|
|
104
106
|
},
|
|
105
107
|
gateway: {
|
|
@@ -129,13 +131,13 @@ function normalizeBackendKitOptions(input = {}, deps = {}) {
|
|
|
129
131
|
source: readString(subjectProfiles.source),
|
|
130
132
|
catalogJson: readString(subjectProfiles.catalogJson),
|
|
131
133
|
defaultProfiles: readList(subjectProfiles.defaultProfiles),
|
|
132
|
-
resolveCandidates: typeof subjectProfiles.resolveCandidates === "function" ? subjectProfiles.resolveCandidates : null
|
|
134
|
+
resolveCandidates: typeof subjectProfiles.resolveCandidates === "function" ? (...args) => subjectProfiles.resolveCandidates(...args) : null
|
|
133
135
|
},
|
|
134
136
|
overrides: {
|
|
135
137
|
hostProxyService: overrides.hostProxyService && typeof overrides.hostProxyService === "object" ? overrides.hostProxyService : null,
|
|
136
138
|
gatewayClient: overrides.gatewayClient && typeof overrides.gatewayClient === "object" ? overrides.gatewayClient : null,
|
|
137
139
|
paymentHandler: overrides.paymentHandler && typeof overrides.paymentHandler === "object" ? overrides.paymentHandler : null,
|
|
138
|
-
resolvePolicyRequest: typeof overrides.resolvePolicyRequest === "function" ? overrides.resolvePolicyRequest : null
|
|
140
|
+
resolvePolicyRequest: typeof overrides.resolvePolicyRequest === "function" ? (...args) => overrides.resolvePolicyRequest(...args) : null
|
|
139
141
|
}
|
|
140
142
|
};
|
|
141
143
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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": "
|
|
4
|
+
"sourcesContent": ["export type StringRecord = Record<string, unknown>;\n\nexport type HostSurface = {\n key: string;\n label: string;\n};\n\nexport type BackendKitNormalizedOptions = {\n host: {\n enableReference: boolean;\n enableLifecycle: boolean;\n enableBridge: boolean;\n allowedOrigins: string[];\n bootstrap: {\n apiKeys: string[];\n signingSecret: string;\n ttlSeconds: number;\n };\n };\n payments: {\n enabledModes: string[];\n ownerIssuer: \"tenant\" | \"publisher\";\n paymentUrl: string;\n returnSecret: string;\n returnSecretRef: string;\n returnUrlAllowlist: string;\n };\n assets: {\n seedLogo: {\n filePath: string;\n routePath: string;\n contentType: string;\n };\n paymentPage: {\n filePath: string;\n };\n };\n gateway: {\n baseUrl: string;\n apiKey: string;\n };\n branding: {\n tenantName: string;\n serviceName: string;\n stackLabel: string;\n };\n reference: {\n tenant: string;\n workspace: string;\n stack: string;\n mode: string;\n tenantPolicySlugs: unknown[];\n proofSources: unknown[];\n sdkPaths: StringRecord;\n hostSurfaces: unknown[];\n notes: unknown[];\n embedSdkCandidateFiles: unknown[];\n referenceAssets: StringRecord;\n };\n subjectProfiles: {\n workspace: string;\n source: string;\n catalogJson: string;\n defaultProfiles: unknown[];\n resolveCandidates: ((...args: unknown[]) => unknown) | null;\n };\n overrides: {\n hostProxyService: StringRecord | null;\n gatewayClient: StringRecord | null;\n paymentHandler: StringRecord | null;\n resolvePolicyRequest: ((...args: unknown[]) => unknown) | null;\n };\n};\n\ntype NormalizeOptionsDeps = {\n defaults?: StringRecord;\n normalizeEnabledModes?: (value: unknown) => string[];\n};\n\nexport function readRecord(value: unknown): StringRecord {\n return value && typeof value === \"object\" ? (value as StringRecord) : {};\n}\n\nexport function readString(value: unknown, fallback = \"\"): string {\n return typeof value === \"string\" ? value : fallback;\n}\n\nexport function readList(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function normalizeAllowedOrigins(value: unknown): string[] {\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: unknown): string[] {\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(\n value: unknown,\n fallback: \"tenant\" | \"publisher\" = \"tenant\",\n): \"tenant\" | \"publisher\" {\n const normalized = readString(value, fallback).trim().toLowerCase();\n return normalized === \"publisher\" ? \"publisher\" : \"tenant\";\n}\n\nexport function normalizeHostModes(hostSurfaces: unknown): HostSurface[] {\n return readList(hostSurfaces)\n .map((entry) =>\n entry && typeof entry === \"object\"\n ? {\n key: readString((entry as StringRecord).key).trim(),\n label: readString((entry as StringRecord).label).trim(),\n }\n : null,\n )\n .filter((entry): entry is HostSurface => Boolean(entry && entry.key && entry.label));\n}\n\nexport function resolvePlatformSecretRefFromEnv(\n input: { name?: string | null; scope?: string | null; scopeId?: string | null } = {},\n): string {\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(\n input: StringRecord = {},\n deps: NormalizeOptionsDeps = {},\n): BackendKitNormalizedOptions {\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 paymentPage = readRecord(assets.paymentPage);\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 const hostBootstrap = readRecord(host.bootstrap);\n const defaultHostBootstrap = readRecord(defaultHost.bootstrap);\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(hostBootstrap.apiKeys ?? defaultHostBootstrap.apiKeys),\n signingSecret:\n readString(hostBootstrap.signingSecret).trim() ||\n readString(defaultHostBootstrap.signingSecret).trim(),\n ttlSeconds:\n Number(hostBootstrap.ttlSeconds ?? defaultHostBootstrap.ttlSeconds) > 0\n ? Math.floor(Number(hostBootstrap.ttlSeconds ?? defaultHostBootstrap.ttlSeconds))\n : 300,\n },\n },\n payments: {\n enabledModes: normalizeEnabledModes(payments.enabledModes),\n ownerIssuer: normalizeOwnerIssuer(\n payments.ownerIssuer,\n normalizeOwnerIssuer(defaultPayments.ownerIssuer),\n ),\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(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 ? (...args: unknown[]) =>\n (subjectProfiles.resolveCandidates as (...args: unknown[]) => unknown)(...args)\n : null,\n },\n overrides: {\n hostProxyService:\n overrides.hostProxyService && typeof overrides.hostProxyService === \"object\"\n ? (overrides.hostProxyService as StringRecord)\n : null,\n gatewayClient:\n overrides.gatewayClient && typeof overrides.gatewayClient === \"object\"\n ? (overrides.gatewayClient as StringRecord)\n : null,\n paymentHandler:\n overrides.paymentHandler && typeof overrides.paymentHandler === \"object\"\n ? (overrides.paymentHandler as StringRecord)\n : null,\n resolvePolicyRequest:\n typeof overrides.resolvePolicyRequest === \"function\"\n ? (...args: unknown[]) =>\n (overrides.resolvePolicyRequest as (...args: unknown[]) => unknown)(...args)\n : null,\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,7 @@ export declare function createPaymentRuntime(options?: {}, deps?: {}): Promise<{
|
|
|
3
3
|
gatewayClient: any;
|
|
4
4
|
paymentHandler: any;
|
|
5
5
|
paymentSettings: {
|
|
6
|
-
ownerIssuer:
|
|
6
|
+
ownerIssuer: "tenant" | "publisher";
|
|
7
7
|
paymentUrl: any;
|
|
8
8
|
returnSecret: any;
|
|
9
9
|
returnSecretRef: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/backend/policies/common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/backend/policies/common.ts"],"names":[],"mappings":"AAsBA,wBAAgB,0BAA0B,CAAC,KAAK,KAAA,WAE/C;AAED,wBAAgB,oBAAoB,CAAC,YAAY,KAAA,2BAEhD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,KAAA,EAAE,OAAO,KAAA,WAEtD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,KAAA,2DAExC;AAED,wBAAgB,uBAAuB,CAAC,WAAW,KAAA,EAAE,cAAc,KAAA,YAElE;AAED,wBAAgB,+BAA+B,CAAC,KAAK,KAAA,EAAE,QAAQ,KAAK;;;;;;;;;;;;;;;EAiBnE;AAED,wBAAgB,iCAAiC,CAAC,cAAc,KAAA;;;;;;;;;;;;;;;;;;EAoB/D;AAED,wBAAsB,+BAA+B,CACnD,KAAK,KAAA,EACL,EAAE,eAAe,EAAE,6BAA6B,EAAE,QAAa,EAAE;;;;CAAA;;;;;;;;;;;;;;;;;;;;GAgClE;AAED,wBAAsB,uBAAuB,CAAC,EAC5C,YAAY,EACZ,GAAG,EACH,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACd,cAAmB,EACnB,eAAoB,EACpB,gBAA0C,GAC3C;;;;;;;;;CAAA;;;;;;;;;;;;;;;;;GAyHA;AAED,wBAAsB,0BAA0B,CAAC,EAC/C,YAAY,EACZ,GAAG,EACH,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,cAAmB,EACnB,gBAAgB,GACjB;;;;;;;;CAAA,gBAYA"}
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
buildPaymentGuardAction,
|
|
3
3
|
hasUpstreamPaymentVerified as hasUpstreamPaymentVerifiedFromSdk,
|
|
4
4
|
normalizePaymentAllowedIssuers as normalizePaymentAllowedIssuersFromSdk,
|
|
5
|
+
resolveManifestLocalizedText,
|
|
5
6
|
resolveMergedPaymentGuardContext,
|
|
6
7
|
resolvePaymentGuardPriceAmount
|
|
7
8
|
} from "@xapps-platform/server-sdk";
|
|
@@ -169,7 +170,8 @@ async function buildPaymentPolicyInput({
|
|
|
169
170
|
);
|
|
170
171
|
}
|
|
171
172
|
const baseReason = String(policy.reason || "payment_required").trim() || "payment_required";
|
|
172
|
-
const
|
|
173
|
+
const locale = String(context.locale || payload.locale || "en").trim() || "en";
|
|
174
|
+
const baseMessage = resolveManifestLocalizedText(policy.message, locale) || "Payment is required before continuing.";
|
|
173
175
|
const failReason = verificationFailure?.ok === false ? verificationFailure.reason : baseReason;
|
|
174
176
|
return {
|
|
175
177
|
payload: payloadWithContext,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/backend/policies/common.ts"],
|
|
4
|
-
"sourcesContent": ["// @ts-nocheck\nimport {\n buildPaymentGuardAction,\n hasUpstreamPaymentVerified as hasUpstreamPaymentVerifiedFromSdk,\n normalizePaymentAllowedIssuers as normalizePaymentAllowedIssuersFromSdk,\n resolveMergedPaymentGuardContext,\n resolvePaymentGuardPriceAmount,\n} from \"@xapps-platform/server-sdk\";\n\nfunction asObject(value) {\n return value && typeof value === \"object\" && !Array.isArray(value) ? value : {};\n}\n\nfunction toNumericAmount(amount) {\n if (typeof amount === \"number\") return amount;\n if (typeof amount === \"string\" && amount.trim() && Number.isFinite(Number(amount))) {\n return Number(amount);\n }\n return amount;\n}\n\nexport function hasUpstreamPaymentVerified(value) {\n return hasUpstreamPaymentVerifiedFromSdk(value);\n}\n\nexport function resolveMergedContext(payloadInput) {\n return resolveMergedPaymentGuardContext(asObject(payloadInput));\n}\n\nexport function resolvePriceAmount(guardConfig, context) {\n return resolvePaymentGuardPriceAmount(asObject(guardConfig), asObject(context));\n}\n\nexport function buildPaymentAction(action) {\n return buildPaymentGuardAction(asObject(action));\n}\n\nexport function normalizeAllowedIssuers(guardConfig, fallbackIssuer) {\n return normalizePaymentAllowedIssuersFromSdk(asObject(guardConfig), String(fallbackIssuer || \"\"));\n}\n\nexport function buildPaymentPolicyAllowedResult(input, modeMeta = {}) {\n return {\n allowed: true,\n reason: String(input.policy?.reason || \"tenant_payment_passed\"),\n message: \"Tenant payment policy satisfied\",\n details: {\n payment_status: input.verifiedPayment?.status || input.plainStatus || \"paid\",\n orchestrationApproved: input.orchestrationApproved,\n gatewayPaymentVerified: input.gatewayPaymentVerified,\n paidByGatewayHint: false,\n paidByPlainStatusFallback: false,\n paidByVerifiedEvidence: input.paidByVerifiedEvidence,\n verified_contract: input.verifiedPayment?.contract || null,\n payment_mode: modeMeta.paymentMode || null,\n ...(modeMeta.referenceMode ? { reference_mode: modeMeta.referenceMode } : {}),\n },\n };\n}\n\nexport function buildPaymentGuardFailClosedResult(upstreamStatus) {\n return {\n allowed: false,\n reason: \"payment_session_create_failed\",\n message: \"Payment session could not be created at this time\",\n action: {\n kind: \"complete_payment\",\n label: \"Open Payment\",\n title: \"Complete Payment\",\n },\n details: {\n uiRequired: true,\n orchestration: {\n mode: \"blocking\",\n surface: \"redirect\",\n status: \"failed_dependency\",\n },\n upstream_status: Number(upstreamStatus || 500) || 500,\n },\n };\n}\n\nexport async function buildPaymentPolicyBlockedResult(\n input,\n { buildPaymentUrl, extractHostedPaymentSessionId, modeMeta = {} },\n) {\n const paymentUrl = await buildPaymentUrl(input);\n return {\n allowed: false,\n reason: input.failReason,\n message:\n input.verificationFailure?.ok === false ? \"Payment verification failed\" : input.baseMessage,\n action: buildPaymentAction({\n url: paymentUrl,\n label: input.actionCfg?.label,\n title: input.actionCfg?.title,\n target: input.actionCfg?.target,\n }),\n details: {\n uiRequired: true,\n orchestration: {\n mode: \"blocking\",\n surface: String(input.guardConfig?.ui_mode || \"redirect\"),\n status: \"pending_user_action\",\n payment_session_id: extractHostedPaymentSessionId(paymentUrl),\n payment_mode: modeMeta.paymentMode || null,\n ...(modeMeta.referenceMode ? { reference_mode: modeMeta.referenceMode } : {}),\n },\n payment_status: input.plainStatus || null,\n expected_amount: toNumericAmount(input.amount),\n expected_currency: input.currency,\n ...(input.verificationFailure?.ok === false\n ? { verification_failure: input.verificationFailure }\n : {}),\n },\n };\n}\n\nexport async function buildPaymentPolicyInput({\n payloadInput,\n log,\n resolveAllowedIssuers,\n resolveExpectedPaymentIssuer,\n paymentHandler,\n paymentRuntime = {},\n paymentSettings = {},\n guardSlugDefault = \"tenant-payment-policy\",\n}) {\n const payload = payloadInput && typeof payloadInput === \"object\" ? payloadInput : {};\n const context = resolveMergedContext(payload);\n const policyContext = asObject(payload.policyContext);\n const payloadWithContext = { ...payload, context };\n const guard = payload.guard && typeof payload.guard === \"object\" ? payload.guard : {};\n const guardConfig = guard.config && typeof guard.config === \"object\" ? guard.config : {};\n const policy =\n guardConfig.policy && typeof guardConfig.policy === \"object\" ? guardConfig.policy : {};\n const actionCfg =\n guardConfig.action && typeof guardConfig.action === \"object\" ? guardConfig.action : {};\n const guardSlug = String(guard.slug || guardSlugDefault).trim();\n const orchestration =\n context.orchestration && typeof context.orchestration === \"object\" ? context.orchestration : {};\n const orchestrationEntry =\n orchestration[guardSlug] && typeof orchestration[guardSlug] === \"object\"\n ? orchestration[guardSlug]\n : {};\n const orchestrationPayment =\n orchestrationEntry.payment && typeof orchestrationEntry.payment === \"object\"\n ? orchestrationEntry.payment\n : null;\n\n const allowOrchestrationBypassConfigured = Boolean(\n guardConfig.allow_orchestration_bypass ?? guardConfig.allowOrchestrationBypass,\n );\n if (allowOrchestrationBypassConfigured) {\n log.warn(\"Ignoring allow_orchestration_bypass in canonical payment verification mode.\");\n }\n const orchestrationApproved = false;\n\n const amount = resolvePriceAmount(guardConfig, context);\n const currency = String(guardConfig?.pricing?.currency || guardConfig.currency || \"USD\")\n .trim()\n .toUpperCase();\n const settings = asObject(paymentSettings);\n const allowedIssuers = resolveAllowedIssuers(guardConfig, settings, paymentRuntime);\n const expectedIssuer =\n allowedIssuers[0] || resolveExpectedPaymentIssuer(guardConfig, settings, paymentRuntime);\n const plainStatus = String(payload.payment_status || payload?.payment?.status || \"\")\n .trim()\n .toLowerCase();\n const gatewayPaymentVerified =\n hasUpstreamPaymentVerified(payload.payment_verified) ||\n hasUpstreamPaymentVerified(payload.paymentVerified) ||\n hasUpstreamPaymentVerified(policyContext.payment_verified) ||\n hasUpstreamPaymentVerified(policyContext.paymentVerified);\n let verifiedPayment = null;\n let verificationFailure = null;\n\n const hasVerificationSecret =\n String(settings.returnSecret || \"\").trim().length > 0 ||\n String(settings.returnSecretRef || \"\").trim().length > 0 ||\n Boolean(paymentHandler && typeof paymentHandler.handleVerifyEvidence === \"function\");\n\n if (\n gatewayPaymentVerified &&\n orchestrationPayment &&\n String(orchestrationPayment.status || \"\")\n .trim()\n .toLowerCase() === \"paid\"\n ) {\n verifiedPayment = orchestrationPayment;\n } else if (hasVerificationSecret && paymentHandler?.handleVerifyEvidence) {\n const verificationPayload = orchestrationPayment\n ? { ...payloadWithContext, ...(orchestrationPayment || {}) }\n : payloadWithContext;\n const verifyResult = await paymentHandler.handleVerifyEvidence({\n payload: verificationPayload,\n maxAgeSeconds: Number(guardConfig.payment_return_max_age_s || 900) || 900,\n expected: {\n issuer: expectedIssuer,\n issuers: allowedIssuers,\n amount,\n currency,\n xapp_id: String(context.xappId || context.xapp_id || \"\") || undefined,\n tool_name: String(context.toolName || context.tool_name || \"\") || undefined,\n subject_id: String(context.subjectId || context.subject_id || \"\") || undefined,\n installation_id:\n String(context.installationId || context.installation_id || \"\") || undefined,\n client_id: String(context.clientId || context.client_id || \"\") || undefined,\n },\n });\n if (verifyResult.ok) {\n verifiedPayment = verifyResult.evidence;\n } else if (verifyResult.reason !== \"payment_evidence_not_found\") {\n verificationFailure = verifyResult;\n }\n }\n\n const paidByVerifiedEvidence = Boolean(verifiedPayment);\n if (!hasVerificationSecret) {\n log.warn(\n \"Payment guard verification secret/secret_ref is not configured; canonical mode is fail-closed.\",\n );\n }\n\n const baseReason = String(policy.reason || \"payment_required\").trim() || \"payment_required\";\n const baseMessage = String(policy.message || \"Payment is required before continuing.\").trim();\n const failReason = verificationFailure?.ok === false ? verificationFailure.reason : baseReason;\n return {\n payload: payloadWithContext,\n context,\n guard,\n guardConfig,\n policy,\n amount,\n currency,\n plainStatus,\n orchestrationApproved,\n gatewayPaymentVerified,\n verifiedPayment,\n paidByVerifiedEvidence,\n verificationFailure,\n failReason,\n baseMessage,\n actionCfg,\n };\n}\n\nexport async function resolvePolicyRequestCommon({\n payloadInput,\n log,\n resolveAllowedIssuers,\n resolveExpectedPaymentIssuer,\n resolveModeResult,\n paymentRuntime = {},\n guardSlugDefault,\n}) {\n const input = await buildPaymentPolicyInput({\n payloadInput,\n log,\n resolveAllowedIssuers,\n resolveExpectedPaymentIssuer,\n paymentHandler: paymentRuntime.paymentHandler,\n paymentRuntime,\n paymentSettings: paymentRuntime.paymentSettings,\n guardSlugDefault,\n });\n return resolveModeResult(input, paymentRuntime);\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["// @ts-nocheck\nimport {\n buildPaymentGuardAction,\n hasUpstreamPaymentVerified as hasUpstreamPaymentVerifiedFromSdk,\n normalizePaymentAllowedIssuers as normalizePaymentAllowedIssuersFromSdk,\n resolveManifestLocalizedText,\n resolveMergedPaymentGuardContext,\n resolvePaymentGuardPriceAmount,\n} from \"@xapps-platform/server-sdk\";\n\nfunction asObject(value) {\n return value && typeof value === \"object\" && !Array.isArray(value) ? value : {};\n}\n\nfunction toNumericAmount(amount) {\n if (typeof amount === \"number\") return amount;\n if (typeof amount === \"string\" && amount.trim() && Number.isFinite(Number(amount))) {\n return Number(amount);\n }\n return amount;\n}\n\nexport function hasUpstreamPaymentVerified(value) {\n return hasUpstreamPaymentVerifiedFromSdk(value);\n}\n\nexport function resolveMergedContext(payloadInput) {\n return resolveMergedPaymentGuardContext(asObject(payloadInput));\n}\n\nexport function resolvePriceAmount(guardConfig, context) {\n return resolvePaymentGuardPriceAmount(asObject(guardConfig), asObject(context));\n}\n\nexport function buildPaymentAction(action) {\n return buildPaymentGuardAction(asObject(action));\n}\n\nexport function normalizeAllowedIssuers(guardConfig, fallbackIssuer) {\n return normalizePaymentAllowedIssuersFromSdk(asObject(guardConfig), String(fallbackIssuer || \"\"));\n}\n\nexport function buildPaymentPolicyAllowedResult(input, modeMeta = {}) {\n return {\n allowed: true,\n reason: String(input.policy?.reason || \"tenant_payment_passed\"),\n message: \"Tenant payment policy satisfied\",\n details: {\n payment_status: input.verifiedPayment?.status || input.plainStatus || \"paid\",\n orchestrationApproved: input.orchestrationApproved,\n gatewayPaymentVerified: input.gatewayPaymentVerified,\n paidByGatewayHint: false,\n paidByPlainStatusFallback: false,\n paidByVerifiedEvidence: input.paidByVerifiedEvidence,\n verified_contract: input.verifiedPayment?.contract || null,\n payment_mode: modeMeta.paymentMode || null,\n ...(modeMeta.referenceMode ? { reference_mode: modeMeta.referenceMode } : {}),\n },\n };\n}\n\nexport function buildPaymentGuardFailClosedResult(upstreamStatus) {\n return {\n allowed: false,\n reason: \"payment_session_create_failed\",\n message: \"Payment session could not be created at this time\",\n action: {\n kind: \"complete_payment\",\n label: \"Open Payment\",\n title: \"Complete Payment\",\n },\n details: {\n uiRequired: true,\n orchestration: {\n mode: \"blocking\",\n surface: \"redirect\",\n status: \"failed_dependency\",\n },\n upstream_status: Number(upstreamStatus || 500) || 500,\n },\n };\n}\n\nexport async function buildPaymentPolicyBlockedResult(\n input,\n { buildPaymentUrl, extractHostedPaymentSessionId, modeMeta = {} },\n) {\n const paymentUrl = await buildPaymentUrl(input);\n return {\n allowed: false,\n reason: input.failReason,\n message:\n input.verificationFailure?.ok === false ? \"Payment verification failed\" : input.baseMessage,\n action: buildPaymentAction({\n url: paymentUrl,\n label: input.actionCfg?.label,\n title: input.actionCfg?.title,\n target: input.actionCfg?.target,\n }),\n details: {\n uiRequired: true,\n orchestration: {\n mode: \"blocking\",\n surface: String(input.guardConfig?.ui_mode || \"redirect\"),\n status: \"pending_user_action\",\n payment_session_id: extractHostedPaymentSessionId(paymentUrl),\n payment_mode: modeMeta.paymentMode || null,\n ...(modeMeta.referenceMode ? { reference_mode: modeMeta.referenceMode } : {}),\n },\n payment_status: input.plainStatus || null,\n expected_amount: toNumericAmount(input.amount),\n expected_currency: input.currency,\n ...(input.verificationFailure?.ok === false\n ? { verification_failure: input.verificationFailure }\n : {}),\n },\n };\n}\n\nexport async function buildPaymentPolicyInput({\n payloadInput,\n log,\n resolveAllowedIssuers,\n resolveExpectedPaymentIssuer,\n paymentHandler,\n paymentRuntime = {},\n paymentSettings = {},\n guardSlugDefault = \"tenant-payment-policy\",\n}) {\n const payload = payloadInput && typeof payloadInput === \"object\" ? payloadInput : {};\n const context = resolveMergedContext(payload);\n const policyContext = asObject(payload.policyContext);\n const payloadWithContext = { ...payload, context };\n const guard = payload.guard && typeof payload.guard === \"object\" ? payload.guard : {};\n const guardConfig = guard.config && typeof guard.config === \"object\" ? guard.config : {};\n const policy =\n guardConfig.policy && typeof guardConfig.policy === \"object\" ? guardConfig.policy : {};\n const actionCfg =\n guardConfig.action && typeof guardConfig.action === \"object\" ? guardConfig.action : {};\n const guardSlug = String(guard.slug || guardSlugDefault).trim();\n const orchestration =\n context.orchestration && typeof context.orchestration === \"object\" ? context.orchestration : {};\n const orchestrationEntry =\n orchestration[guardSlug] && typeof orchestration[guardSlug] === \"object\"\n ? orchestration[guardSlug]\n : {};\n const orchestrationPayment =\n orchestrationEntry.payment && typeof orchestrationEntry.payment === \"object\"\n ? orchestrationEntry.payment\n : null;\n\n const allowOrchestrationBypassConfigured = Boolean(\n guardConfig.allow_orchestration_bypass ?? guardConfig.allowOrchestrationBypass,\n );\n if (allowOrchestrationBypassConfigured) {\n log.warn(\"Ignoring allow_orchestration_bypass in canonical payment verification mode.\");\n }\n const orchestrationApproved = false;\n\n const amount = resolvePriceAmount(guardConfig, context);\n const currency = String(guardConfig?.pricing?.currency || guardConfig.currency || \"USD\")\n .trim()\n .toUpperCase();\n const settings = asObject(paymentSettings);\n const allowedIssuers = resolveAllowedIssuers(guardConfig, settings, paymentRuntime);\n const expectedIssuer =\n allowedIssuers[0] || resolveExpectedPaymentIssuer(guardConfig, settings, paymentRuntime);\n const plainStatus = String(payload.payment_status || payload?.payment?.status || \"\")\n .trim()\n .toLowerCase();\n const gatewayPaymentVerified =\n hasUpstreamPaymentVerified(payload.payment_verified) ||\n hasUpstreamPaymentVerified(payload.paymentVerified) ||\n hasUpstreamPaymentVerified(policyContext.payment_verified) ||\n hasUpstreamPaymentVerified(policyContext.paymentVerified);\n let verifiedPayment = null;\n let verificationFailure = null;\n\n const hasVerificationSecret =\n String(settings.returnSecret || \"\").trim().length > 0 ||\n String(settings.returnSecretRef || \"\").trim().length > 0 ||\n Boolean(paymentHandler && typeof paymentHandler.handleVerifyEvidence === \"function\");\n\n if (\n gatewayPaymentVerified &&\n orchestrationPayment &&\n String(orchestrationPayment.status || \"\")\n .trim()\n .toLowerCase() === \"paid\"\n ) {\n verifiedPayment = orchestrationPayment;\n } else if (hasVerificationSecret && paymentHandler?.handleVerifyEvidence) {\n const verificationPayload = orchestrationPayment\n ? { ...payloadWithContext, ...(orchestrationPayment || {}) }\n : payloadWithContext;\n const verifyResult = await paymentHandler.handleVerifyEvidence({\n payload: verificationPayload,\n maxAgeSeconds: Number(guardConfig.payment_return_max_age_s || 900) || 900,\n expected: {\n issuer: expectedIssuer,\n issuers: allowedIssuers,\n amount,\n currency,\n xapp_id: String(context.xappId || context.xapp_id || \"\") || undefined,\n tool_name: String(context.toolName || context.tool_name || \"\") || undefined,\n subject_id: String(context.subjectId || context.subject_id || \"\") || undefined,\n installation_id:\n String(context.installationId || context.installation_id || \"\") || undefined,\n client_id: String(context.clientId || context.client_id || \"\") || undefined,\n },\n });\n if (verifyResult.ok) {\n verifiedPayment = verifyResult.evidence;\n } else if (verifyResult.reason !== \"payment_evidence_not_found\") {\n verificationFailure = verifyResult;\n }\n }\n\n const paidByVerifiedEvidence = Boolean(verifiedPayment);\n if (!hasVerificationSecret) {\n log.warn(\n \"Payment guard verification secret/secret_ref is not configured; canonical mode is fail-closed.\",\n );\n }\n\n const baseReason = String(policy.reason || \"payment_required\").trim() || \"payment_required\";\n const locale = String(context.locale || payload.locale || \"en\").trim() || \"en\";\n const baseMessage =\n resolveManifestLocalizedText(policy.message, locale) ||\n \"Payment is required before continuing.\";\n const failReason = verificationFailure?.ok === false ? verificationFailure.reason : baseReason;\n return {\n payload: payloadWithContext,\n context,\n guard,\n guardConfig,\n policy,\n amount,\n currency,\n plainStatus,\n orchestrationApproved,\n gatewayPaymentVerified,\n verifiedPayment,\n paidByVerifiedEvidence,\n verificationFailure,\n failReason,\n baseMessage,\n actionCfg,\n };\n}\n\nexport async function resolvePolicyRequestCommon({\n payloadInput,\n log,\n resolveAllowedIssuers,\n resolveExpectedPaymentIssuer,\n resolveModeResult,\n paymentRuntime = {},\n guardSlugDefault,\n}) {\n const input = await buildPaymentPolicyInput({\n payloadInput,\n log,\n resolveAllowedIssuers,\n resolveExpectedPaymentIssuer,\n paymentHandler: paymentRuntime.paymentHandler,\n paymentRuntime,\n paymentSettings: paymentRuntime.paymentSettings,\n guardSlugDefault,\n });\n return resolveModeResult(input, paymentRuntime);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
type HealthRouteOptions = {
|
|
2
|
+
branding?: {
|
|
3
|
+
serviceName?: string | null;
|
|
4
|
+
stackLabel?: string | null;
|
|
5
|
+
} | null;
|
|
6
|
+
reference?: {
|
|
7
|
+
mode?: string | null;
|
|
8
|
+
} | null;
|
|
9
|
+
tools?: unknown[] | null;
|
|
10
|
+
};
|
|
11
|
+
type HealthRouteResponse = {
|
|
12
|
+
ok: true;
|
|
13
|
+
service: string;
|
|
14
|
+
mode: string;
|
|
15
|
+
stack?: string;
|
|
16
|
+
tools?: unknown[];
|
|
17
|
+
time: string;
|
|
18
|
+
};
|
|
19
|
+
type FastifyLike = {
|
|
20
|
+
get: (path: string, handler: () => Promise<HealthRouteResponse> | HealthRouteResponse) => void;
|
|
21
|
+
};
|
|
22
|
+
export default function healthRoutes(fastify: FastifyLike, options?: HealthRouteOptions): Promise<void>;
|
|
23
|
+
export {};
|
|
2
24
|
//# sourceMappingURL=health.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/backend/routes/health.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/backend/routes/health.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,GAAG,IAAI,CAAC;IACT,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,GAAG,IAAI,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,KAAK,IAAI,CAAC;CAChG,CAAC;AAMF,wBAA8B,YAAY,CACxC,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAef"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/backend/routes/health.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["type HealthRouteOptions = {\n branding?: {\n serviceName?: string | null;\n stackLabel?: string | null;\n } | null;\n reference?: {\n mode?: string | null;\n } | null;\n tools?: unknown[] | null;\n};\n\ntype HealthRouteResponse = {\n ok: true;\n service: string;\n mode: string;\n stack?: string;\n tools?: unknown[];\n time: string;\n};\n\ntype FastifyLike = {\n get: (path: string, handler: () => Promise<HealthRouteResponse> | HealthRouteResponse) => void;\n};\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nexport default async function healthRoutes(\n fastify: FastifyLike,\n options: HealthRouteOptions = {},\n): Promise<void> {\n const branding = options.branding && typeof options.branding === \"object\" ? options.branding : {};\n const reference =\n options.reference && typeof options.reference === \"object\" ? options.reference : {};\n const tools = Array.isArray(options.tools) ? options.tools.filter(Boolean) : [];\n fastify.get(\"/health\", async () => ({\n ok: true,\n service: String(branding.serviceName || \"\").trim() || \"tenant-backend\",\n mode: String(reference.mode || \"\").trim() || \"reference-minimum\",\n ...(String(branding.stackLabel || \"\").trim()\n ? { stack: String(branding.stackLabel).trim() }\n : {}),\n ...(tools.length > 0 ? { tools } : {}),\n time: nowIso(),\n }));\n}\n"],
|
|
5
|
+
"mappings": "AAwBA,SAAS,SAAiB;AACxB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAEA,eAAO,aACL,SACA,UAA8B,CAAC,GAChB;AACf,QAAM,WAAW,QAAQ,YAAY,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,CAAC;AAChG,QAAM,YACJ,QAAQ,aAAa,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY,CAAC;AACpF,QAAM,QAAQ,MAAM,QAAQ,QAAQ,KAAK,IAAI,QAAQ,MAAM,OAAO,OAAO,IAAI,CAAC;AAC9E,UAAQ,IAAI,WAAW,aAAa;AAAA,IAClC,IAAI;AAAA,IACJ,SAAS,OAAO,SAAS,eAAe,EAAE,EAAE,KAAK,KAAK;AAAA,IACtD,MAAM,OAAO,UAAU,QAAQ,EAAE,EAAE,KAAK,KAAK;AAAA,IAC7C,GAAI,OAAO,SAAS,cAAc,EAAE,EAAE,KAAK,IACvC,EAAE,OAAO,OAAO,SAAS,UAAU,EAAE,KAAK,EAAE,IAC5C,CAAC;AAAA,IACL,GAAI,MAAM,SAAS,IAAI,EAAE,MAAM,IAAI,CAAC;AAAA,IACpC,MAAM,OAAO;AAAA,EACf,EAAE;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,49 @@
|
|
|
1
1
|
import { createGatewayExecutionModule, createHostReferenceModule, createReferenceSurfaceModule, createHostProxyService } from "./backend/modules.js";
|
|
2
2
|
import { buildHostedGatewayPaymentUrl, buildModeHostedGatewayPaymentUrl, createPaymentEvidenceHandler, createPaymentRuntime, extractHostedPaymentSessionId, registerPaymentPageApiRoutes, registerPaymentPageAssetRoute } from "./backend/paymentRuntime.js";
|
|
3
|
-
import { normalizeBackendKitOptions, resolvePlatformSecretRefFromEnv } from "./backend/options.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
3
|
+
import { normalizeBackendKitOptions, resolvePlatformSecretRefFromEnv, type BackendKitNormalizedOptions, type StringRecord } from "./backend/options.js";
|
|
4
|
+
type ReplyLike = {
|
|
5
|
+
code: (statusCode: number) => {
|
|
6
|
+
send: (payload: unknown) => unknown;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
type RegisterableApp = {
|
|
10
|
+
setNotFoundHandler: (handler: (request: unknown, reply: ReplyLike) => Promise<unknown> | unknown) => void;
|
|
11
|
+
};
|
|
12
|
+
type RouteModule = {
|
|
13
|
+
registerRoutes: (app: RegisterableApp) => Promise<void> | void;
|
|
14
|
+
};
|
|
15
|
+
type BackendKitDeps = {
|
|
16
|
+
normalizeOptions?: (input: StringRecord) => BackendKitNormalizedOptions;
|
|
17
|
+
createReferenceSurfaceModule?: (input: {
|
|
18
|
+
gateway: BackendKitNormalizedOptions["gateway"];
|
|
19
|
+
branding: BackendKitNormalizedOptions["branding"];
|
|
20
|
+
enableReference: boolean;
|
|
21
|
+
enableLifecycle: boolean;
|
|
22
|
+
enableBridge: boolean;
|
|
23
|
+
enabledModes: string[];
|
|
24
|
+
reference: BackendKitNormalizedOptions["reference"];
|
|
25
|
+
}) => RouteModule;
|
|
26
|
+
createHostReferenceModule?: (input: {
|
|
27
|
+
gateway: BackendKitNormalizedOptions["gateway"];
|
|
28
|
+
branding: BackendKitNormalizedOptions["branding"];
|
|
29
|
+
reference: BackendKitNormalizedOptions["reference"];
|
|
30
|
+
enableLifecycle: boolean;
|
|
31
|
+
enableBridge: boolean;
|
|
32
|
+
allowedOrigins: string[];
|
|
33
|
+
bootstrap: BackendKitNormalizedOptions["host"]["bootstrap"];
|
|
34
|
+
hostProxyService: unknown;
|
|
35
|
+
}) => RouteModule;
|
|
36
|
+
createGatewayExecutionModule?: (input: {
|
|
37
|
+
enabledModes: string[];
|
|
38
|
+
subjectProfiles: BackendKitNormalizedOptions["subjectProfiles"];
|
|
39
|
+
paymentRuntime: unknown;
|
|
40
|
+
}) => RouteModule;
|
|
41
|
+
};
|
|
42
|
+
export type BackendKit = {
|
|
43
|
+
options: BackendKitNormalizedOptions;
|
|
44
|
+
registerRoutes: (app: RegisterableApp) => Promise<void>;
|
|
45
|
+
applyNotFoundHandler: (app: RegisterableApp) => void;
|
|
46
|
+
};
|
|
47
|
+
export declare function createBackendKit(input?: StringRecord, deps?: BackendKitDeps): Promise<BackendKit>;
|
|
9
48
|
export { buildHostedGatewayPaymentUrl as buildHostedGatewayPaymentUrl, buildModeHostedGatewayPaymentUrl as buildModeHostedGatewayPaymentUrl, createGatewayExecutionModule, createHostReferenceModule, createReferenceSurfaceModule, createHostProxyService, createPaymentEvidenceHandler, createPaymentRuntime, extractHostedPaymentSessionId, normalizeBackendKitOptions, registerPaymentPageApiRoutes, registerPaymentPageAssetRoute, resolvePlatformSecretRefFromEnv, };
|
|
10
49
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;KACrC,CAAC;CACH,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,kBAAkB,EAAE,CAClB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,KACxE,IAAI,CAAC;CACX,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,2BAA2B,CAAC;IACxE,4BAA4B,CAAC,EAAE,CAAC,KAAK,EAAE;QACrC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAChD,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAClD,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;KACrD,KAAK,WAAW,CAAC;IAClB,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAChD,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAClD,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;QACpD,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5D,gBAAgB,EAAE,OAAO,CAAC;KAC3B,KAAK,WAAW,CAAC;IAClB,4BAA4B,CAAC,EAAE,CAAC,KAAK,EAAE;QACrC,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,eAAe,EAAE,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;QAChE,cAAc,EAAE,OAAO,CAAC;KACzB,KAAK,WAAW,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,2BAA2B,CAAC;IACrC,cAAc,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,oBAAoB,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,KAAK,GAAE,YAAiB,EACxB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,UAAU,CAAC,CA+DrB;AAED,OAAO,EACL,4BAA4B,IAAI,4BAA4B,EAC5D,gCAAgC,IAAI,gCAAgC,EACpE,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,GAChC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,18 +13,21 @@ import {
|
|
|
13
13
|
registerPaymentPageApiRoutes,
|
|
14
14
|
registerPaymentPageAssetRoute
|
|
15
15
|
} from "./backend/paymentRuntime.js";
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
normalizeBackendKitOptions,
|
|
18
|
+
resolvePlatformSecretRefFromEnv
|
|
19
|
+
} from "./backend/options.js";
|
|
17
20
|
async function createBackendKit(input = {}, deps = {}) {
|
|
18
21
|
const normalizeOptions = typeof deps.normalizeOptions === "function" ? deps.normalizeOptions : null;
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
if (!normalizeOptions || !
|
|
22
|
+
const createReferenceSurfaceModuleDep = typeof deps.createReferenceSurfaceModule === "function" ? deps.createReferenceSurfaceModule : null;
|
|
23
|
+
const createHostReferenceModuleDep = typeof deps.createHostReferenceModule === "function" ? deps.createHostReferenceModule : null;
|
|
24
|
+
const createGatewayExecutionModuleDep = typeof deps.createGatewayExecutionModule === "function" ? deps.createGatewayExecutionModule : null;
|
|
25
|
+
if (!normalizeOptions || !createReferenceSurfaceModuleDep || !createHostReferenceModuleDep || !createGatewayExecutionModuleDep) {
|
|
23
26
|
throw new TypeError("backend kit dependencies are incomplete");
|
|
24
27
|
}
|
|
25
28
|
const options = normalizeOptions(input);
|
|
26
29
|
const paymentRuntime = await createPaymentRuntime(options, deps);
|
|
27
|
-
const referenceSurfaceModule =
|
|
30
|
+
const referenceSurfaceModule = createReferenceSurfaceModuleDep({
|
|
28
31
|
gateway: options.gateway,
|
|
29
32
|
branding: options.branding,
|
|
30
33
|
enableReference: options.host.enableReference,
|
|
@@ -33,7 +36,7 @@ async function createBackendKit(input = {}, deps = {}) {
|
|
|
33
36
|
enabledModes: options.payments.enabledModes,
|
|
34
37
|
reference: options.reference
|
|
35
38
|
});
|
|
36
|
-
const hostReferenceModule =
|
|
39
|
+
const hostReferenceModule = createHostReferenceModuleDep({
|
|
37
40
|
gateway: options.gateway,
|
|
38
41
|
branding: options.branding,
|
|
39
42
|
reference: options.reference,
|
|
@@ -43,7 +46,7 @@ async function createBackendKit(input = {}, deps = {}) {
|
|
|
43
46
|
bootstrap: options.host.bootstrap,
|
|
44
47
|
hostProxyService: options.overrides.hostProxyService
|
|
45
48
|
});
|
|
46
|
-
const gatewayExecutionModule =
|
|
49
|
+
const gatewayExecutionModule = createGatewayExecutionModuleDep({
|
|
47
50
|
enabledModes: options.payments.enabledModes,
|
|
48
51
|
subjectProfiles: options.subjectProfiles,
|
|
49
52
|
paymentRuntime
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import {\n createGatewayExecutionModule,\n createHostReferenceModule,\n createReferenceSurfaceModule,\n createHostProxyService,\n} from \"./backend/modules.js\";\nimport {\n buildHostedGatewayPaymentUrl,\n buildModeHostedGatewayPaymentUrl,\n createPaymentEvidenceHandler,\n createPaymentRuntime,\n extractHostedPaymentSessionId,\n registerPaymentPageApiRoutes,\n registerPaymentPageAssetRoute,\n} from \"./backend/paymentRuntime.js\";\nimport {\n normalizeBackendKitOptions,\n resolvePlatformSecretRefFromEnv,\n type BackendKitNormalizedOptions,\n type StringRecord,\n} from \"./backend/options.js\";\n\ntype ReplyLike = {\n code: (statusCode: number) => {\n send: (payload: unknown) => unknown;\n };\n};\n\ntype RegisterableApp = {\n setNotFoundHandler: (\n handler: (request: unknown, reply: ReplyLike) => Promise<unknown> | unknown,\n ) => void;\n};\n\ntype RouteModule = {\n registerRoutes: (app: RegisterableApp) => Promise<void> | void;\n};\n\ntype BackendKitDeps = {\n normalizeOptions?: (input: StringRecord) => BackendKitNormalizedOptions;\n createReferenceSurfaceModule?: (input: {\n gateway: BackendKitNormalizedOptions[\"gateway\"];\n branding: BackendKitNormalizedOptions[\"branding\"];\n enableReference: boolean;\n enableLifecycle: boolean;\n enableBridge: boolean;\n enabledModes: string[];\n reference: BackendKitNormalizedOptions[\"reference\"];\n }) => RouteModule;\n createHostReferenceModule?: (input: {\n gateway: BackendKitNormalizedOptions[\"gateway\"];\n branding: BackendKitNormalizedOptions[\"branding\"];\n reference: BackendKitNormalizedOptions[\"reference\"];\n enableLifecycle: boolean;\n enableBridge: boolean;\n allowedOrigins: string[];\n bootstrap: BackendKitNormalizedOptions[\"host\"][\"bootstrap\"];\n hostProxyService: unknown;\n }) => RouteModule;\n createGatewayExecutionModule?: (input: {\n enabledModes: string[];\n subjectProfiles: BackendKitNormalizedOptions[\"subjectProfiles\"];\n paymentRuntime: unknown;\n }) => RouteModule;\n};\n\nexport type BackendKit = {\n options: BackendKitNormalizedOptions;\n registerRoutes: (app: RegisterableApp) => Promise<void>;\n applyNotFoundHandler: (app: RegisterableApp) => void;\n};\n\nexport async function createBackendKit(\n input: StringRecord = {},\n deps: BackendKitDeps = {},\n): Promise<BackendKit> {\n const normalizeOptions =\n typeof deps.normalizeOptions === \"function\" ? deps.normalizeOptions : null;\n const createReferenceSurfaceModuleDep =\n typeof deps.createReferenceSurfaceModule === \"function\"\n ? deps.createReferenceSurfaceModule\n : null;\n const createHostReferenceModuleDep =\n typeof deps.createHostReferenceModule === \"function\" ? deps.createHostReferenceModule : null;\n const createGatewayExecutionModuleDep =\n typeof deps.createGatewayExecutionModule === \"function\"\n ? deps.createGatewayExecutionModule\n : null;\n if (\n !normalizeOptions ||\n !createReferenceSurfaceModuleDep ||\n !createHostReferenceModuleDep ||\n !createGatewayExecutionModuleDep\n ) {\n throw new TypeError(\"backend kit dependencies are incomplete\");\n }\n\n const options = normalizeOptions(input);\n const paymentRuntime = await createPaymentRuntime(options, deps);\n\n const referenceSurfaceModule = createReferenceSurfaceModuleDep({\n gateway: options.gateway,\n branding: options.branding,\n enableReference: options.host.enableReference,\n enableLifecycle: options.host.enableLifecycle,\n enableBridge: options.host.enableBridge,\n enabledModes: options.payments.enabledModes,\n reference: options.reference,\n });\n const hostReferenceModule = createHostReferenceModuleDep({\n gateway: options.gateway,\n branding: options.branding,\n reference: options.reference,\n enableLifecycle: options.host.enableLifecycle,\n enableBridge: options.host.enableBridge,\n allowedOrigins: options.host.allowedOrigins,\n bootstrap: options.host.bootstrap,\n hostProxyService: options.overrides.hostProxyService,\n });\n const gatewayExecutionModule = createGatewayExecutionModuleDep({\n enabledModes: options.payments.enabledModes,\n subjectProfiles: options.subjectProfiles,\n paymentRuntime,\n });\n\n return {\n options,\n async registerRoutes(app) {\n await referenceSurfaceModule.registerRoutes(app);\n await hostReferenceModule.registerRoutes(app);\n await gatewayExecutionModule.registerRoutes(app);\n },\n applyNotFoundHandler(app) {\n app.setNotFoundHandler(async (_request, reply) =>\n reply.code(404).send({ message: \"Not found\" }),\n );\n },\n };\n}\n\nexport {\n buildHostedGatewayPaymentUrl as buildHostedGatewayPaymentUrl,\n buildModeHostedGatewayPaymentUrl as buildModeHostedGatewayPaymentUrl,\n createGatewayExecutionModule,\n createHostReferenceModule,\n createReferenceSurfaceModule,\n createHostProxyService,\n createPaymentEvidenceHandler,\n createPaymentRuntime,\n extractHostedPaymentSessionId,\n normalizeBackendKitOptions,\n registerPaymentPageApiRoutes,\n registerPaymentPageAssetRoute,\n resolvePlatformSecretRefFromEnv,\n};\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAoDP,eAAsB,iBACpB,QAAsB,CAAC,GACvB,OAAuB,CAAC,GACH;AACrB,QAAM,mBACJ,OAAO,KAAK,qBAAqB,aAAa,KAAK,mBAAmB;AACxE,QAAM,kCACJ,OAAO,KAAK,iCAAiC,aACzC,KAAK,+BACL;AACN,QAAM,+BACJ,OAAO,KAAK,8BAA8B,aAAa,KAAK,4BAA4B;AAC1F,QAAM,kCACJ,OAAO,KAAK,iCAAiC,aACzC,KAAK,+BACL;AACN,MACE,CAAC,oBACD,CAAC,mCACD,CAAC,gCACD,CAAC,iCACD;AACA,UAAM,IAAI,UAAU,yCAAyC;AAAA,EAC/D;AAEA,QAAM,UAAU,iBAAiB,KAAK;AACtC,QAAM,iBAAiB,MAAM,qBAAqB,SAAS,IAAI;AAE/D,QAAM,yBAAyB,gCAAgC;AAAA,IAC7D,SAAS,QAAQ;AAAA,IACjB,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,KAAK;AAAA,IAC9B,iBAAiB,QAAQ,KAAK;AAAA,IAC9B,cAAc,QAAQ,KAAK;AAAA,IAC3B,cAAc,QAAQ,SAAS;AAAA,IAC/B,WAAW,QAAQ;AAAA,EACrB,CAAC;AACD,QAAM,sBAAsB,6BAA6B;AAAA,IACvD,SAAS,QAAQ;AAAA,IACjB,UAAU,QAAQ;AAAA,IAClB,WAAW,QAAQ;AAAA,IACnB,iBAAiB,QAAQ,KAAK;AAAA,IAC9B,cAAc,QAAQ,KAAK;AAAA,IAC3B,gBAAgB,QAAQ,KAAK;AAAA,IAC7B,WAAW,QAAQ,KAAK;AAAA,IACxB,kBAAkB,QAAQ,UAAU;AAAA,EACtC,CAAC;AACD,QAAM,yBAAyB,gCAAgC;AAAA,IAC7D,cAAc,QAAQ,SAAS;AAAA,IAC/B,iBAAiB,QAAQ;AAAA,IACzB;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,MAAM,eAAe,KAAK;AACxB,YAAM,uBAAuB,eAAe,GAAG;AAC/C,YAAM,oBAAoB,eAAe,GAAG;AAC5C,YAAM,uBAAuB,eAAe,GAAG;AAAA,IACjD;AAAA,IACA,qBAAqB,KAAK;AACxB,UAAI;AAAA,QAAmB,OAAO,UAAU,UACtC,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,YAAY,CAAC;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xapps-platform/backend-kit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Daniel Vladescu <daniel.vladescu@gmail.com>",
|
|
6
6
|
"description": "Modular Node backend kit for the current Xapps backend contract (tenant surface today, shared actor-adapter direction later)",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"url": "https://github.com/0x730/xapps-sdk-js/issues"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
|
-
"build": "node ../../scripts/build-backend-kit.mjs",
|
|
36
|
+
"build": "node ../../scripts/build/build-backend-kit.mjs",
|
|
37
37
|
"smoke": "npm run build && node examples/smoke/smoke.mjs"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|