@baijimu/platform-application-sdk 2.1.1 → 4.0.0
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 +42 -17
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +0 -1
- package/dist/browser.js.map +1 -1
- package/dist/client.d.ts +3 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +44 -4
- package/dist/client.js.map +1 -1
- package/dist/hosted-location.d.ts +5 -0
- package/dist/hosted-location.d.ts.map +1 -0
- package/dist/hosted-location.js +27 -0
- package/dist/hosted-location.js.map +1 -0
- package/dist/hosted.d.ts +6 -0
- package/dist/hosted.d.ts.map +1 -0
- package/dist/hosted.js +102 -0
- package/dist/hosted.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +12 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/urls.d.ts +1 -1
- package/dist/urls.d.ts.map +1 -1
- package/dist/urls.js +2 -2
- package/dist/urls.js.map +1 -1
- package/package.json +2 -2
- package/dist/launch.d.ts +0 -8
- package/dist/launch.d.ts.map +0 -1
- package/dist/launch.js +0 -271
- package/dist/launch.js.map +0 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
百积木 Platform Application 的标准浏览器 SDK。它统一负责:
|
|
4
4
|
|
|
5
5
|
- 读取平台应用启动参数;
|
|
6
|
-
-
|
|
6
|
+
- 从受管应用同源 HTTPS 读取可信环境配置;
|
|
7
7
|
- 生成并校验 Authorization Code + PKCE 会话;
|
|
8
8
|
- 兑换、校验、保存和撤销 App Gateway token;
|
|
9
9
|
- 通过规范的逐方法 Runtime 路由调用已声明能力;
|
|
@@ -20,33 +20,57 @@ npm install @baijimu/platform-application-sdk
|
|
|
20
20
|
|
|
21
21
|
## 初始化
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
验证环境证书,再用证书内的环境公钥验证启动描述,并校验应用、安装记录、页面来源与有效期。
|
|
26
|
-
任一环节失败都会关闭启动,不会回退到公共 SaaS 或猜测地址。
|
|
23
|
+
环境托管应用使用固定同源配置,不读取 URL 中的授权地址,也不需要 Control Plane 启动证书。
|
|
24
|
+
必须与平台托管设施、app-gateway 和应用版本一起升级;只升级 SDK 不会让外部网站获得平台授权或私有化能力。
|
|
27
25
|
|
|
28
26
|
```ts
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
const client = await createPlatformApplicationClientFromLaunch(applicationDefinition.id);
|
|
27
|
+
import { createPlatformApplicationClientFromHostedConfiguration } from "@baijimu/platform-application-sdk";
|
|
32
28
|
|
|
29
|
+
const client = await createPlatformApplicationClientFromHostedConfiguration(applicationDefinition.id);
|
|
33
30
|
const session = await client.bootstrap();
|
|
34
31
|
```
|
|
35
32
|
|
|
36
|
-
|
|
33
|
+
配置只从当前 HTTPS origin 的 `/.well-known/baijimu-platform-application.json` 读取。
|
|
34
|
+
禁止重定向、不缓存配置、不从 URL 参数、旧证书缓存或公共地址恢复。当前闭合合同为:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"contractVersion": "1.0.0",
|
|
39
|
+
"platformAppId": "example-app",
|
|
40
|
+
"applicationOrigin": "https://app-version.example.test",
|
|
41
|
+
"releasePath": "/_releases/release-id/",
|
|
42
|
+
"appGatewayApiBase": "https://api.example.test/app-gateway/api",
|
|
43
|
+
"authorizationUrl": "https://console.example.test/#/platform-app-authorize",
|
|
44
|
+
"managementUrl": "https://console.example.test/"
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`managementUrl` 可选;其余字段必填。地址由目标环境和托管 owner 生成,不写入应用源码。
|
|
49
|
+
共享配置不得包含 `installId`、workspaceId、用户身份、Token 或 Secret;未知字段直接拒绝。
|
|
50
|
+
`releasePath` 是不透明部署目录,不是 SDK 负责解释的应用版本号。
|
|
51
|
+
|
|
52
|
+
`installId` 只从启动 URL 的 query 或 hash 取得,用作安装选择器,不能证明访问权限。
|
|
53
|
+
缺失、空白或相互冲突的重复选择器会拒绝启动;配置本身可供多个工作区安装共享。
|
|
54
|
+
每次 `bootstrap()` 核对当前 origin 和版本路径,然后执行现有授权流程:
|
|
55
|
+
|
|
56
|
+
1. 有有效的当前安装 Token:返回对应会话;
|
|
57
|
+
2. 有授权回跳 code:校验 state,使用原始 PKCE verifier 兑换 Token;
|
|
58
|
+
3. 其他情况:生成 verifier、challenge 和 state,跳转配置中的授权页。
|
|
37
59
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
60
|
+
托管 owner 必须保护固定配置路径,禁止应用归档覆盖,并保证应用的 origin 隔离。
|
|
61
|
+
同源下按安装区分存储键只是命名隔离,不是浏览器安全边界;不能声称同源应用代码无法读取其他键。
|
|
62
|
+
`cache: no-store` 不能防御恶意同源代码或 Service Worker。安装权限、回调地址、Token 作用域与撤销仍由服务端负责。
|
|
41
63
|
|
|
42
|
-
`
|
|
43
|
-
|
|
64
|
+
4.0.0 已删除 `createPlatformApplicationClientFromLaunch`、内置根公钥、环境证书与启动签名解析,
|
|
65
|
+
不保留签名启动兼容分支。旧应用需升级初始化代码并重新发布。
|
|
66
|
+
`createPlatformApplicationClient(config)` 仅供显式受控集成和本机测试;其配置必须由集成方信任,
|
|
67
|
+
不得把未校验的 query 参数作为授权服务地址。外部自托管应用使用自有后台授权,不借该接口绕过平台托管要求。
|
|
44
68
|
|
|
45
69
|
## 调用 Runtime 方法
|
|
46
70
|
|
|
47
71
|
```ts
|
|
48
72
|
const projects = await client.call(
|
|
49
|
-
"
|
|
73
|
+
{ type: "resource", locator: "baijimu/workspace-core/MODULE/2108" },
|
|
50
74
|
"listProjects",
|
|
51
75
|
{ offset: 0, limit: 50 },
|
|
52
76
|
);
|
|
@@ -55,10 +79,11 @@ const projects = await client.call(
|
|
|
55
79
|
SDK 使用以下规范路由,并把第三个参数直接作为方法参数体:
|
|
56
80
|
|
|
57
81
|
```text
|
|
58
|
-
POST {appGatewayApiBase}/workspace-runtime/apps/{installId}/
|
|
82
|
+
POST {appGatewayApiBase}/workspace-runtime/apps/{installId}/call
|
|
59
83
|
```
|
|
60
84
|
|
|
61
|
-
|
|
85
|
+
请求体使用与项目声明一致的 `target`:固定依赖使用 `resource`,只有可替换实现才使用 `interface`。
|
|
86
|
+
SDK 不接收运行时 `service`,也不会访问平台内部 API、拼接 Pod 地址或持有模块凭据。
|
|
62
87
|
|
|
63
88
|
## 会话与错误
|
|
64
89
|
|
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAEpE,eAAO,MAAM,qBAAqB,QAAO,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAEpE,eAAO,MAAM,qBAAqB,QAAO,iCAmBxC,CAAC"}
|
package/dist/browser.js
CHANGED
|
@@ -12,7 +12,6 @@ export const defaultBrowserRuntime = () => {
|
|
|
12
12
|
crypto: window.crypto,
|
|
13
13
|
fetch: window.fetch.bind(window),
|
|
14
14
|
btoa: window.btoa.bind(window),
|
|
15
|
-
atob: window.atob.bind(window),
|
|
16
15
|
open: window.open.bind(window),
|
|
17
16
|
nowEpochSeconds: () => Math.floor(Date.now() / 1000),
|
|
18
17
|
};
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAsC,EAAE;IAC3E,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrE,MAAM,IAAI,2BAA2B,CACnC,kBAAkB,EAClB,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ;QACR,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAsC,EAAE;IAC3E,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrE,MAAM,IAAI,2BAA2B,CACnC,kBAAkB,EAClB,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ;QACR,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;KACrD,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { type NormalizedPlatformApplicationSdkConfig } from "./config.js";
|
|
2
|
-
import type { PlatformApplicationBrowserRuntime, PlatformApplicationClientOptions, PlatformApplicationSdkConfig, PlatformApplicationSession } from "./types.js";
|
|
2
|
+
import type { PlatformApplicationBrowserRuntime, PlatformApplicationClientOptions, PlatformApplicationMethodTarget, PlatformApplicationSdkConfig, PlatformApplicationSession } from "./types.js";
|
|
3
3
|
export declare class PlatformApplicationClient {
|
|
4
4
|
readonly config: NormalizedPlatformApplicationSdkConfig;
|
|
5
5
|
readonly runtime: PlatformApplicationBrowserRuntime;
|
|
6
6
|
private currentSession;
|
|
7
|
+
private readonly hostedLocation;
|
|
7
8
|
constructor(config: PlatformApplicationSdkConfig, options?: PlatformApplicationClientOptions);
|
|
8
9
|
getSession(): PlatformApplicationSession | null;
|
|
9
10
|
bootstrap(): Promise<PlatformApplicationSession>;
|
|
10
11
|
clearSession(): void;
|
|
11
12
|
restartAuthorization(): void;
|
|
12
13
|
revoke(): Promise<void>;
|
|
13
|
-
call<T = unknown>(
|
|
14
|
+
call<T = unknown>(target: PlatformApplicationMethodTarget, method: string, params?: Readonly<Record<string, unknown>>): Promise<T>;
|
|
14
15
|
openManagementRoute(route: string): void;
|
|
15
16
|
private beginAuthorization;
|
|
16
17
|
private completeAuthorization;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,sCAAsC,EAC5C,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,sCAAsC,EAC5C,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EACV,iCAAiC,EACjC,gCAAgC,EAChC,+BAA+B,EAC/B,4BAA4B,EAC5B,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AAcpB,qBAAa,yBAAyB;IACpC,QAAQ,CAAC,MAAM,EAAE,sCAAsC,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC;IACpD,OAAO,CAAC,cAAc,CAA2C;IACjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgD;gBAEnE,MAAM,EAAE,4BAA4B,EAAE,OAAO,GAAE,gCAAqC;IAMhG,UAAU,IAAI,0BAA0B,GAAG,IAAI;IAIzC,SAAS,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAuBtD,YAAY,IAAI,IAAI;IAOpB,oBAAoB,IAAI,IAAI;IAKtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAcvB,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,MAAM,EAAE,+BAA+B,EACvC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAC7C,OAAO,CAAC,CAAC,CAAC;IAsCb,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;YAW1B,kBAAkB;YAelB,qBAAqB;IA+CnC,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;CAGxB;AA0CD,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,4BAA4B,EACpC,UAAS,gCAAqC,KAC7C,yBAA2E,CAAC"}
|
package/dist/client.js
CHANGED
|
@@ -3,6 +3,7 @@ import { requireCModelData, parseJsonResponseBody } from "./cmodel.js";
|
|
|
3
3
|
import { normalizePlatformApplicationSdkConfig, } from "./config.js";
|
|
4
4
|
import { CModelFailureError, PlatformApplicationSdkError } from "./errors.js";
|
|
5
5
|
import { createCodeChallenge, generateCodeVerifier } from "./pkce.js";
|
|
6
|
+
import { readHostedInstallId, validateHostedLocation } from "./hosted-location.js";
|
|
6
7
|
import { parsePlatformApplicationToken, validatePlatformApplicationSession, } from "./session.js";
|
|
7
8
|
import { buildAuthorizationCallbackUrl, buildPlatformAuthorizationUrl, buildPlatformManagementUrl, readPlatformApplicationLaunchParameters, removeAuthorizationParameters, runtimeMethodCallUrl, runtimeTokenExchangeUrl, runtimeTokenRevokeUrl, } from "./urls.js";
|
|
8
9
|
const storagePrefix = "@baijimu/platform-application-sdk";
|
|
@@ -10,16 +11,22 @@ export class PlatformApplicationClient {
|
|
|
10
11
|
config;
|
|
11
12
|
runtime;
|
|
12
13
|
currentSession = null;
|
|
14
|
+
hostedLocation;
|
|
13
15
|
constructor(config, options = {}) {
|
|
14
16
|
this.config = normalizePlatformApplicationSdkConfig(config);
|
|
15
17
|
this.runtime = options.runtime ?? defaultBrowserRuntime();
|
|
18
|
+
this.hostedLocation = options.hostedLocation ? Object.freeze({ ...options.hostedLocation }) : undefined;
|
|
16
19
|
}
|
|
17
20
|
getSession() {
|
|
18
21
|
return this.currentSession;
|
|
19
22
|
}
|
|
20
23
|
async bootstrap() {
|
|
24
|
+
if (this.hostedLocation)
|
|
25
|
+
validateHostedLocation(this.runtime.location.href, this.hostedLocation);
|
|
21
26
|
const parameters = readPlatformApplicationLaunchParameters(this.runtime.location.href);
|
|
22
|
-
const installId =
|
|
27
|
+
const installId = this.hostedLocation
|
|
28
|
+
? readHostedInstallId(this.runtime.location.href)
|
|
29
|
+
: String(parameters.get("installId") ?? "").trim();
|
|
23
30
|
if (!installId) {
|
|
24
31
|
throw new PlatformApplicationSdkError("MISSING_INSTALL_ID", "入口地址缺少installId");
|
|
25
32
|
}
|
|
@@ -54,15 +61,21 @@ export class PlatformApplicationClient {
|
|
|
54
61
|
requireCModelData(response.status, payload, "token revoke", (value) => value);
|
|
55
62
|
this.clearSession();
|
|
56
63
|
}
|
|
57
|
-
async call(
|
|
64
|
+
async call(target, method, params = {}) {
|
|
58
65
|
const session = this.requireSession();
|
|
59
|
-
const
|
|
66
|
+
const normalizedTarget = normalizeMethodTarget(target);
|
|
67
|
+
const normalizedMethod = requiredMethodArgument(method);
|
|
68
|
+
const response = await this.runtime.fetch(runtimeMethodCallUrl(this.config.appGatewayApiBase, session.installId), {
|
|
60
69
|
method: "POST",
|
|
61
70
|
headers: {
|
|
62
71
|
Authorization: `Bearer ${session.token}`,
|
|
63
72
|
"content-type": "application/json",
|
|
64
73
|
},
|
|
65
|
-
body: JSON.stringify(
|
|
74
|
+
body: JSON.stringify({
|
|
75
|
+
target: normalizedTarget,
|
|
76
|
+
method: normalizedMethod,
|
|
77
|
+
params: params ?? {},
|
|
78
|
+
}),
|
|
66
79
|
});
|
|
67
80
|
const payload = await parseJsonResponseBody(response);
|
|
68
81
|
try {
|
|
@@ -156,5 +169,32 @@ export class PlatformApplicationClient {
|
|
|
156
169
|
return `${storagePrefix}:pkce-state:${encodeURIComponent(this.config.platformAppId)}:${encodeURIComponent(installId)}`;
|
|
157
170
|
}
|
|
158
171
|
}
|
|
172
|
+
const requiredMethodArgument = (value) => {
|
|
173
|
+
const normalized = String(value ?? "").trim();
|
|
174
|
+
if (!normalized || normalized !== value) {
|
|
175
|
+
throw new PlatformApplicationSdkError("INVALID_ARGUMENT", "method不能为空或包含首尾空白");
|
|
176
|
+
}
|
|
177
|
+
return normalized;
|
|
178
|
+
};
|
|
179
|
+
const normalizeMethodTarget = (target) => {
|
|
180
|
+
if (!target || typeof target !== "object") {
|
|
181
|
+
throw new PlatformApplicationSdkError("INVALID_ARGUMENT", "target不能为空");
|
|
182
|
+
}
|
|
183
|
+
if (target.type === "resource") {
|
|
184
|
+
const locator = String(target.locator ?? "");
|
|
185
|
+
if (!locator.trim() || locator.trim() !== locator) {
|
|
186
|
+
throw new PlatformApplicationSdkError("INVALID_ARGUMENT", "resource target.locator不能为空或包含首尾空白");
|
|
187
|
+
}
|
|
188
|
+
return { type: "resource", locator };
|
|
189
|
+
}
|
|
190
|
+
if (target.type === "interface") {
|
|
191
|
+
const name = String(target.name ?? "");
|
|
192
|
+
if (!name.trim() || name.trim() !== name) {
|
|
193
|
+
throw new PlatformApplicationSdkError("INVALID_ARGUMENT", "interface target.name不能为空或包含首尾空白");
|
|
194
|
+
}
|
|
195
|
+
return { type: "interface", name };
|
|
196
|
+
}
|
|
197
|
+
throw new PlatformApplicationSdkError("INVALID_ARGUMENT", "target.type只支持resource或interface");
|
|
198
|
+
};
|
|
159
199
|
export const createPlatformApplicationClient = (config, options = {}) => new PlatformApplicationClient(config, options);
|
|
160
200
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,qCAAqC,GAEtC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PlatformApplicationHostedLocation } from "./types.js";
|
|
2
|
+
export declare const validateHostedLocation: (href: string, binding: PlatformApplicationHostedLocation) => void;
|
|
3
|
+
/** Install identity is an untrusted selector, never part of shared deployment configuration. */
|
|
4
|
+
export declare const readHostedInstallId: (href: string) => string;
|
|
5
|
+
//# sourceMappingURL=hosted-location.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-location.d.ts","sourceRoot":"","sources":["../src/hosted-location.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAEpE,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,SAAS,iCAAiC,KACzC,IAQF,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAkBlD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PlatformApplicationSdkError } from "./errors.js";
|
|
2
|
+
export const validateHostedLocation = (href, binding) => {
|
|
3
|
+
const url = new URL(href);
|
|
4
|
+
if (url.protocol !== "https:" || url.username || url.password
|
|
5
|
+
|| url.origin !== binding.applicationOrigin || !url.pathname.startsWith(binding.releasePath)) {
|
|
6
|
+
throw new PlatformApplicationSdkError("INVALID_HOSTED_CONFIGURATION", "当前应用入口与已部署的origin或版本路径不一致");
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
/** Install identity is an untrusted selector, never part of shared deployment configuration. */
|
|
10
|
+
export const readHostedInstallId = (href) => {
|
|
11
|
+
const url = new URL(href);
|
|
12
|
+
const hash = url.hash.slice(1);
|
|
13
|
+
const hashQuery = hash.includes("?") ? hash.slice(hash.indexOf("?") + 1) : hash;
|
|
14
|
+
const selectors = [
|
|
15
|
+
...url.searchParams.getAll("installId"),
|
|
16
|
+
...new URLSearchParams(hashQuery).getAll("installId"),
|
|
17
|
+
];
|
|
18
|
+
const installId = selectors[0];
|
|
19
|
+
if (!installId || !installId.trim()) {
|
|
20
|
+
throw new PlatformApplicationSdkError("MISSING_INSTALL_ID", "入口地址缺少installId");
|
|
21
|
+
}
|
|
22
|
+
if (installId.trim() !== installId || selectors.some((value) => value !== installId)) {
|
|
23
|
+
throw new PlatformApplicationSdkError("INVALID_INSTALL_ID", "入口installId存在空白或相互冲突的选择器");
|
|
24
|
+
}
|
|
25
|
+
return installId;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=hosted-location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-location.js","sourceRoot":"","sources":["../src/hosted-location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAY,EACZ,OAA0C,EACpC,EAAE;IACR,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;WACxD,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,iBAAiB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,2BAA2B,CACnC,8BAA8B,EAAE,2BAA2B,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,gGAAgG;AAChG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,MAAM,SAAS,GAAG;QAChB,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;QACvC,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;KACtD,CAAC;IACF,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,2BAA2B,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,2BAA2B,CACnC,oBAAoB,EAAE,0BAA0B,CACjD,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|
package/dist/hosted.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PlatformApplicationClient } from "./client.js";
|
|
2
|
+
import type { PlatformApplicationClientOptions } from "./types.js";
|
|
3
|
+
export declare const platformApplicationConfigurationPath = "/.well-known/baijimu-platform-application.json";
|
|
4
|
+
/** Reads deployment-owned configuration. No endpoint is accepted from launch parameters. */
|
|
5
|
+
export declare const createPlatformApplicationClientFromHostedConfiguration: (platformAppId: string, options?: PlatformApplicationClientOptions) => Promise<PlatformApplicationClient>;
|
|
6
|
+
//# sourceMappingURL=hosted.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted.d.ts","sourceRoot":"","sources":["../src/hosted.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAIxD,OAAO,KAAK,EACV,gCAAgC,EAEjC,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,oCAAoC,mDAAmD,CAAC;AAsCrG,4FAA4F;AAC5F,eAAO,MAAM,sDAAsD,GACjE,eAAe,MAAM,EACrB,UAAS,gCAAqC,KAC7C,OAAO,CAAC,yBAAyB,CA+CnC,CAAC"}
|
package/dist/hosted.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { defaultBrowserRuntime } from "./browser.js";
|
|
2
|
+
import { PlatformApplicationClient } from "./client.js";
|
|
3
|
+
import { normalizePlatformApplicationSdkConfig } from "./config.js";
|
|
4
|
+
import { PlatformApplicationSdkError } from "./errors.js";
|
|
5
|
+
import { validateHostedLocation } from "./hosted-location.js";
|
|
6
|
+
export const platformApplicationConfigurationPath = "/.well-known/baijimu-platform-application.json";
|
|
7
|
+
const fail = (message) => {
|
|
8
|
+
throw new PlatformApplicationSdkError("INVALID_HOSTED_CONFIGURATION", message);
|
|
9
|
+
};
|
|
10
|
+
const text = (value, field) => {
|
|
11
|
+
if (typeof value !== "string" || !value || value.trim() !== value) {
|
|
12
|
+
return fail(`${field}必须是无首尾空白的非空字符串`);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
};
|
|
16
|
+
const object = (input) => {
|
|
17
|
+
if (typeof input !== "object" || input === null || Array.isArray(input)) {
|
|
18
|
+
return fail("运行时配置必须是JSON对象");
|
|
19
|
+
}
|
|
20
|
+
const value = input;
|
|
21
|
+
const required = [
|
|
22
|
+
"contractVersion", "platformAppId", "applicationOrigin", "releasePath",
|
|
23
|
+
"appGatewayApiBase", "authorizationUrl",
|
|
24
|
+
];
|
|
25
|
+
if (required.some((key) => !(key in value))
|
|
26
|
+
|| Object.keys(value).some((key) => !required.includes(key) && key !== "managementUrl")) {
|
|
27
|
+
return fail("运行时配置存在缺失或未知字段");
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
};
|
|
31
|
+
const secureUrl = (value, field) => {
|
|
32
|
+
let url;
|
|
33
|
+
try {
|
|
34
|
+
url = new URL(value);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return fail(`${field}必须是绝对URL`);
|
|
38
|
+
}
|
|
39
|
+
if (url.protocol !== "https:" || url.username || url.password) {
|
|
40
|
+
return fail(`${field}必须使用不含用户凭据的HTTPS地址`);
|
|
41
|
+
}
|
|
42
|
+
return url;
|
|
43
|
+
};
|
|
44
|
+
/** Reads deployment-owned configuration. No endpoint is accepted from launch parameters. */
|
|
45
|
+
export const createPlatformApplicationClientFromHostedConfiguration = async (platformAppId, options = {}) => {
|
|
46
|
+
const runtime = options.runtime ?? defaultBrowserRuntime();
|
|
47
|
+
const page = secureUrl(runtime.location.href, "当前应用入口");
|
|
48
|
+
if (page.origin !== runtime.location.origin)
|
|
49
|
+
fail("浏览器origin与当前页面不一致");
|
|
50
|
+
const url = new URL(platformApplicationConfigurationPath, page.origin);
|
|
51
|
+
let response;
|
|
52
|
+
try {
|
|
53
|
+
response = await runtime.fetch(url.toString(), {
|
|
54
|
+
method: "GET", mode: "same-origin", redirect: "error", cache: "no-store",
|
|
55
|
+
credentials: "omit", headers: { Accept: "application/json" },
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (cause) {
|
|
59
|
+
throw new PlatformApplicationSdkError("HOSTED_CONFIGURATION_UNAVAILABLE", "无法读取同源运行时配置", { cause });
|
|
60
|
+
}
|
|
61
|
+
if (!response.ok || response.redirected || (response.url && response.url !== url.toString())) {
|
|
62
|
+
fail("同源运行时配置响应失败或地址发生变化");
|
|
63
|
+
}
|
|
64
|
+
if (response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() !== "application/json") {
|
|
65
|
+
fail("运行时配置必须以application/json提供,不能返回应用页面");
|
|
66
|
+
}
|
|
67
|
+
let input;
|
|
68
|
+
try {
|
|
69
|
+
input = await response.json();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return fail("运行时配置不是合法JSON");
|
|
73
|
+
}
|
|
74
|
+
const value = object(input);
|
|
75
|
+
if (value.contractVersion !== "1.0.0")
|
|
76
|
+
fail("不支持的运行时配置contractVersion");
|
|
77
|
+
if (text(value.platformAppId, "platformAppId") !== text(platformAppId, "期望platformAppId")) {
|
|
78
|
+
fail("运行时配置与当前应用身份不一致");
|
|
79
|
+
}
|
|
80
|
+
const binding = {
|
|
81
|
+
applicationOrigin: text(value.applicationOrigin, "applicationOrigin"),
|
|
82
|
+
releasePath: text(value.releasePath, "releasePath"),
|
|
83
|
+
};
|
|
84
|
+
if (!/^\/_releases\/[A-Za-z0-9][A-Za-z0-9._-]*\/$/.test(binding.releasePath)) {
|
|
85
|
+
fail("releasePath必须指向一个明确的不可变版本目录");
|
|
86
|
+
}
|
|
87
|
+
validateHostedLocation(runtime.location.href, binding);
|
|
88
|
+
const api = secureUrl(text(value.appGatewayApiBase, "appGatewayApiBase"), "appGatewayApiBase");
|
|
89
|
+
if (api.search || api.hash)
|
|
90
|
+
fail("appGatewayApiBase不能包含查询参数或fragment");
|
|
91
|
+
const authorizationUrl = secureUrl(text(value.authorizationUrl, "authorizationUrl"), "authorizationUrl");
|
|
92
|
+
const config = normalizePlatformApplicationSdkConfig({
|
|
93
|
+
platformAppId,
|
|
94
|
+
appGatewayApiBase: api.toString(),
|
|
95
|
+
authorizationUrl: authorizationUrl.toString(),
|
|
96
|
+
...(value.managementUrl === undefined ? {} : {
|
|
97
|
+
managementUrl: secureUrl(text(value.managementUrl, "managementUrl"), "managementUrl").toString(),
|
|
98
|
+
}),
|
|
99
|
+
});
|
|
100
|
+
return new PlatformApplicationClient(config, { runtime, hostedLocation: binding });
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=hosted.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted.js","sourceRoot":"","sources":["../src/hosted.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from "./client.js";
|
|
2
2
|
export * from "./config.js";
|
|
3
3
|
export * from "./errors.js";
|
|
4
|
-
export {
|
|
4
|
+
export { createPlatformApplicationClientFromHostedConfiguration, platformApplicationConfigurationPath } from "./hosted.js";
|
|
5
5
|
export * from "./session.js";
|
|
6
6
|
export * from "./types.js";
|
|
7
7
|
export * from "./urls.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,sDAAsD,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAC3H,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from "./client.js";
|
|
2
2
|
export * from "./config.js";
|
|
3
3
|
export * from "./errors.js";
|
|
4
|
-
export {
|
|
4
|
+
export { createPlatformApplicationClientFromHostedConfiguration, platformApplicationConfigurationPath } from "./hosted.js";
|
|
5
5
|
export * from "./session.js";
|
|
6
6
|
export * from "./types.js";
|
|
7
7
|
export * from "./urls.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,sDAAsD,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAC3H,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -24,11 +24,22 @@ export interface PlatformApplicationBrowserRuntime {
|
|
|
24
24
|
readonly crypto: Pick<Crypto, "getRandomValues" | "subtle">;
|
|
25
25
|
readonly fetch: typeof fetch;
|
|
26
26
|
readonly btoa: typeof btoa;
|
|
27
|
-
readonly atob?: typeof atob;
|
|
28
27
|
readonly open: typeof window.open;
|
|
29
28
|
readonly nowEpochSeconds: () => number;
|
|
30
29
|
}
|
|
31
30
|
export interface PlatformApplicationClientOptions {
|
|
32
31
|
readonly runtime?: PlatformApplicationBrowserRuntime;
|
|
32
|
+
readonly hostedLocation?: PlatformApplicationHostedLocation;
|
|
33
33
|
}
|
|
34
|
+
export interface PlatformApplicationHostedLocation {
|
|
35
|
+
readonly applicationOrigin: string;
|
|
36
|
+
readonly releasePath: string;
|
|
37
|
+
}
|
|
38
|
+
export type PlatformApplicationMethodTarget = Readonly<{
|
|
39
|
+
type: "resource";
|
|
40
|
+
locator: string;
|
|
41
|
+
}> | Readonly<{
|
|
42
|
+
type: "interface";
|
|
43
|
+
name: string;
|
|
44
|
+
}>;
|
|
34
45
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IAC1E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC5E,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;IAC3E,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;IAC7E,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,QAAQ,CAAC,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IAC1E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC5E,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;IAC3E,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;IAC7E,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,QAAQ,CAAC,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,iCAAiC,CAAC;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,iCAAiC,CAAC;CAC7D;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,+BAA+B,GACvC,QAAQ,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,QAAQ,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC"}
|
package/dist/urls.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ export declare const removeAuthorizationParameters: (href: string) => string;
|
|
|
4
4
|
export declare const buildAuthorizationCallbackUrl: (href: string) => string;
|
|
5
5
|
export declare const runtimeTokenExchangeUrl: (appGatewayApiBase: string, installId: string) => string;
|
|
6
6
|
export declare const runtimeTokenRevokeUrl: (appGatewayApiBase: string, installId: string) => string;
|
|
7
|
-
export declare const runtimeMethodCallUrl: (appGatewayApiBase: string, installId: string
|
|
7
|
+
export declare const runtimeMethodCallUrl: (appGatewayApiBase: string, installId: string) => string;
|
|
8
8
|
export declare const buildPlatformManagementUrl: (managementUrl: string, route: string) => string;
|
|
9
9
|
//# sourceMappingURL=urls.d.ts.map
|
package/dist/urls.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,uCAAuC,GAAI,MAAM,MAAM,KAAG,eAStE,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,kBAAkB,MAAM,EACxB,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAC3C,MAcF,CAAC;AAcF,eAAO,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAM5D,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAE5D,CAAC;AAUF,eAAO,MAAM,uBAAuB,GAAI,mBAAmB,MAAM,EAAE,WAAW,MAAM,KAAG,MAEtF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,mBAAmB,MAAM,EAAE,WAAW,MAAM,KAAG,MAEpF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,mBAAmB,MAAM,EACzB,WAAW,MAAM,
|
|
1
|
+
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,uCAAuC,GAAI,MAAM,MAAM,KAAG,eAStE,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,kBAAkB,MAAM,EACxB,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAC3C,MAcF,CAAC;AAcF,eAAO,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAM5D,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAE5D,CAAC;AAUF,eAAO,MAAM,uBAAuB,GAAI,mBAAmB,MAAM,EAAE,WAAW,MAAM,KAAG,MAEtF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,mBAAmB,MAAM,EAAE,WAAW,MAAM,KAAG,MAEpF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,mBAAmB,MAAM,EACzB,WAAW,MAAM,KAChB,MAGF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,eAAe,MAAM,EAAE,OAAO,MAAM,KAAG,MAQjF,CAAC"}
|
package/dist/urls.js
CHANGED
|
@@ -60,8 +60,8 @@ const requiredPathSegment = (value, field) => {
|
|
|
60
60
|
};
|
|
61
61
|
export const runtimeTokenExchangeUrl = (appGatewayApiBase, installId) => (`${appGatewayApiBase}/workspace-runtime/apps/${requiredPathSegment(installId, "installId")}/token/exchange`);
|
|
62
62
|
export const runtimeTokenRevokeUrl = (appGatewayApiBase, installId) => (`${appGatewayApiBase}/workspace-runtime/apps/${requiredPathSegment(installId, "installId")}/token/revoke`);
|
|
63
|
-
export const runtimeMethodCallUrl = (appGatewayApiBase, installId
|
|
64
|
-
+
|
|
63
|
+
export const runtimeMethodCallUrl = (appGatewayApiBase, installId) => (`${appGatewayApiBase}/workspace-runtime/apps/${requiredPathSegment(installId, "installId")}`
|
|
64
|
+
+ "/call");
|
|
65
65
|
export const buildPlatformManagementUrl = (managementUrl, route) => {
|
|
66
66
|
const normalizedRoute = String(route ?? "").trim();
|
|
67
67
|
if (!normalizedRoute.startsWith("/")) {
|
package/dist/urls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,eAAe,GAAG,CAAC,MAAuB,EAAE,UAA4C,EAAQ,EAAE;IACtG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,IAAY,EAAmB,EAAE;IACvF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,gBAAwB,EACxB,UAA4C,EACpC,EAAE;IACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAC5C,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,qCAAqC,GAAG,CAAC,GAAQ,EAAQ,EAAE;IAC/D,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO;IAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAY,EAAU,EAAE;IACpE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,qCAAqC,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CACrE,6BAA6B,CAAC,IAAI,CAAC,CACpC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,2BAA2B,CAAC,kBAAkB,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,iBAAyB,EAAE,SAAiB,EAAU,EAAE,CAAC,CAC/F,GAAG,iBAAiB,2BAA2B,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,iBAAiB,CAC5G,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,iBAAyB,EAAE,SAAiB,EAAU,EAAE,CAAC,CAC7F,GAAG,iBAAiB,2BAA2B,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,eAAe,CAC1G,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,iBAAyB,EACzB,SAAiB,
|
|
1
|
+
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@baijimu/platform-application-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Standard browser SDK for Baijimu Platform Application authorization and Runtime method calls",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"LICENSE"
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
|
-
"build": "
|
|
20
|
+
"build": "node scripts/build.mjs",
|
|
21
21
|
"check": "tsc -p tsconfig.json --noEmit",
|
|
22
22
|
"test": "npm run build && node --test test/*.test.mjs",
|
|
23
23
|
"pack:check": "node scripts/validate-package.mjs"
|
package/dist/launch.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { PlatformApplicationClient } from "./client.js";
|
|
2
|
-
import type { PlatformApplicationBrowserRuntime, PlatformApplicationClientOptions, PlatformApplicationSdkConfig } from "./types.js";
|
|
3
|
-
export declare const verifyPlatformApplicationLaunchDescriptor: (encodedEnvelope: string, runtime: PlatformApplicationBrowserRuntime, platformAppId: string, installId: string, origin: string, trustedRootPublicKeys: Readonly<Record<string, string>>) => Promise<{
|
|
4
|
-
config: PlatformApplicationSdkConfig;
|
|
5
|
-
certificateExpiresAt: number;
|
|
6
|
-
}>;
|
|
7
|
-
export declare const createPlatformApplicationClientFromLaunch: (platformAppId: string, options?: PlatformApplicationClientOptions) => Promise<PlatformApplicationClient>;
|
|
8
|
-
//# sourceMappingURL=launch.d.ts.map
|
package/dist/launch.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,KAAK,EACV,iCAAiC,EACjC,gCAAgC,EAChC,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AAmRpB,eAAO,MAAM,yCAAyC,GACpD,iBAAiB,MAAM,EACvB,SAAS,iCAAiC,EAC1C,eAAe,MAAM,EACrB,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,uBAAuB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACtD,OAAO,CAAC;IAAE,MAAM,EAAE,4BAA4B,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,CAqDhF,CAAC;AAEF,eAAO,MAAM,yCAAyC,GACpD,eAAe,MAAM,EACrB,UAAS,gCAAqC,KAC7C,OAAO,CAAC,yBAAyB,CAiCnC,CAAC"}
|
package/dist/launch.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import { defaultBrowserRuntime } from "./browser.js";
|
|
2
|
-
import { PlatformApplicationClient } from "./client.js";
|
|
3
|
-
import { normalizePlatformApplicationSdkConfig } from "./config.js";
|
|
4
|
-
import { PlatformApplicationSdkError } from "./errors.js";
|
|
5
|
-
import { readPlatformApplicationLaunchParameters } from "./urls.js";
|
|
6
|
-
const contractVersion = "1.0.0";
|
|
7
|
-
const launchParameter = "baijimuLaunch";
|
|
8
|
-
const certificateType = "baijimu-environment-launch-certificate+jws";
|
|
9
|
-
const assertionType = "baijimu-platform-application-launch+jws";
|
|
10
|
-
const clockSkewSeconds = 60;
|
|
11
|
-
const certificateTtlSeconds = 30 * 24 * 60 * 60;
|
|
12
|
-
const maximumLaunchTtlSeconds = 5 * 60;
|
|
13
|
-
const rootPublicKeys = Object.freeze({
|
|
14
|
-
"connected-license-2026-07-28-01": "OXm6q6qWHYLv9OJbqqvES/HnAMqSVnFMcPx6X+hS4Po=",
|
|
15
|
-
});
|
|
16
|
-
const fail = (code, message, cause) => {
|
|
17
|
-
throw new PlatformApplicationSdkError(code, message, cause === undefined ? undefined : { cause });
|
|
18
|
-
};
|
|
19
|
-
const exactObject = (value, name, requiredKeys) => {
|
|
20
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
21
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", `${name}必须是对象`);
|
|
22
|
-
}
|
|
23
|
-
const record = value;
|
|
24
|
-
const actual = Object.keys(record).sort();
|
|
25
|
-
const expected = [...requiredKeys].sort();
|
|
26
|
-
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
|
|
27
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", `${name}字段不符合可信启动协议`);
|
|
28
|
-
}
|
|
29
|
-
return record;
|
|
30
|
-
};
|
|
31
|
-
const textField = (record, key, name) => {
|
|
32
|
-
const value = record[key];
|
|
33
|
-
if (typeof value !== "string" || !value.trim()) {
|
|
34
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", `${name}.${key}必须是非空字符串`);
|
|
35
|
-
}
|
|
36
|
-
return value;
|
|
37
|
-
};
|
|
38
|
-
const integerField = (record, key, name) => {
|
|
39
|
-
const value = record[key];
|
|
40
|
-
if (typeof value !== "number" || !Number.isSafeInteger(value)) {
|
|
41
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", `${name}.${key}必须是安全整数`);
|
|
42
|
-
}
|
|
43
|
-
return value;
|
|
44
|
-
};
|
|
45
|
-
const decodeBase64 = (value, runtime, urlSafe) => {
|
|
46
|
-
try {
|
|
47
|
-
const standard = urlSafe ? value.replace(/-/g, "+").replace(/_/g, "/") : value;
|
|
48
|
-
const padded = standard.padEnd(Math.ceil(standard.length / 4) * 4, "=");
|
|
49
|
-
const decoder = runtime.atob ?? globalThis.atob?.bind(globalThis);
|
|
50
|
-
if (typeof decoder !== "function") {
|
|
51
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", "当前运行环境不支持base64解码");
|
|
52
|
-
}
|
|
53
|
-
const binary = decoder(padded);
|
|
54
|
-
return Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
55
|
-
}
|
|
56
|
-
catch (cause) {
|
|
57
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", "可信启动数据不是有效的base64", cause);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
const decodeJson = (value, runtime, name) => {
|
|
61
|
-
try {
|
|
62
|
-
return JSON.parse(new TextDecoder().decode(decodeBase64(value, runtime, true)));
|
|
63
|
-
}
|
|
64
|
-
catch (cause) {
|
|
65
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", `${name}不是有效JSON`, cause);
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
const parseHeader = (value, expectedType) => {
|
|
69
|
-
const record = exactObject(value, "JWS header", ["alg", "kid", "typ"]);
|
|
70
|
-
const header = {
|
|
71
|
-
alg: textField(record, "alg", "JWS header"),
|
|
72
|
-
kid: textField(record, "kid", "JWS header"),
|
|
73
|
-
typ: textField(record, "typ", "JWS header"),
|
|
74
|
-
};
|
|
75
|
-
if (header.alg !== "EdDSA" || header.typ !== expectedType) {
|
|
76
|
-
return fail("INVALID_LAUNCH_SIGNATURE", "JWS算法或类型不符合可信启动协议");
|
|
77
|
-
}
|
|
78
|
-
return header;
|
|
79
|
-
};
|
|
80
|
-
const splitJws = (compact, runtime, expectedType) => {
|
|
81
|
-
const segments = compact.split(".");
|
|
82
|
-
if (segments.length !== 3 || segments.some((segment) => !segment)) {
|
|
83
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", "JWS必须包含三个非空分段");
|
|
84
|
-
}
|
|
85
|
-
const [encodedHeader, encodedPayload, encodedSignature] = segments;
|
|
86
|
-
return {
|
|
87
|
-
header: parseHeader(decodeJson(encodedHeader, runtime, "JWS header"), expectedType),
|
|
88
|
-
payload: decodeJson(encodedPayload, runtime, "JWS payload"),
|
|
89
|
-
signature: decodeBase64(encodedSignature, runtime, true),
|
|
90
|
-
signingInput: new TextEncoder().encode(`${encodedHeader}.${encodedPayload}`),
|
|
91
|
-
};
|
|
92
|
-
};
|
|
93
|
-
const verifyEd25519 = async (runtime, publicKey, jws) => {
|
|
94
|
-
try {
|
|
95
|
-
const keyBytes = Uint8Array.from(publicKey).buffer;
|
|
96
|
-
const signatureBytes = Uint8Array.from(jws.signature).buffer;
|
|
97
|
-
const signingInputBytes = Uint8Array.from(jws.signingInput).buffer;
|
|
98
|
-
const key = await runtime.crypto.subtle.importKey("raw", keyBytes, "Ed25519", false, ["verify"]);
|
|
99
|
-
if (!(await runtime.crypto.subtle.verify("Ed25519", key, signatureBytes, signingInputBytes))) {
|
|
100
|
-
fail("INVALID_LAUNCH_SIGNATURE", "可信启动签名校验失败");
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch (cause) {
|
|
104
|
-
if (cause instanceof PlatformApplicationSdkError)
|
|
105
|
-
throw cause;
|
|
106
|
-
fail("INVALID_LAUNCH_SIGNATURE", "浏览器无法验证可信启动签名", cause);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
const parseCertificateClaims = (value) => {
|
|
110
|
-
const record = exactObject(value, "environment certificate", [
|
|
111
|
-
"contractVersion", "tokenType", "issuer", "subject", "environmentId",
|
|
112
|
-
"environmentKeyId", "publicKey", "usage", "issuedAt", "expiresAt",
|
|
113
|
-
]);
|
|
114
|
-
return {
|
|
115
|
-
contractVersion: textField(record, "contractVersion", "environment certificate"),
|
|
116
|
-
tokenType: textField(record, "tokenType", "environment certificate"),
|
|
117
|
-
issuer: textField(record, "issuer", "environment certificate"),
|
|
118
|
-
subject: textField(record, "subject", "environment certificate"),
|
|
119
|
-
environmentId: textField(record, "environmentId", "environment certificate"),
|
|
120
|
-
environmentKeyId: textField(record, "environmentKeyId", "environment certificate"),
|
|
121
|
-
publicKey: textField(record, "publicKey", "environment certificate"),
|
|
122
|
-
usage: textField(record, "usage", "environment certificate"),
|
|
123
|
-
issuedAt: integerField(record, "issuedAt", "environment certificate"),
|
|
124
|
-
expiresAt: integerField(record, "expiresAt", "environment certificate"),
|
|
125
|
-
};
|
|
126
|
-
};
|
|
127
|
-
const parseEndpoints = (value) => {
|
|
128
|
-
const record = exactObject(value, "launch endpoints", [
|
|
129
|
-
"appGatewayApiBase", "authorizationUrl", "managementUrl",
|
|
130
|
-
]);
|
|
131
|
-
return {
|
|
132
|
-
appGatewayApiBase: textField(record, "appGatewayApiBase", "launch endpoints"),
|
|
133
|
-
authorizationUrl: textField(record, "authorizationUrl", "launch endpoints"),
|
|
134
|
-
managementUrl: textField(record, "managementUrl", "launch endpoints"),
|
|
135
|
-
};
|
|
136
|
-
};
|
|
137
|
-
const parseAssertionClaims = (value) => {
|
|
138
|
-
const record = exactObject(value, "launch assertion", [
|
|
139
|
-
"contractVersion", "tokenType", "issuer", "audience", "environmentKeyId", "installId",
|
|
140
|
-
"applicationOrigin", "endpoints", "issuedAt", "expiresAt", "nonce",
|
|
141
|
-
]);
|
|
142
|
-
return {
|
|
143
|
-
contractVersion: textField(record, "contractVersion", "launch assertion"),
|
|
144
|
-
tokenType: textField(record, "tokenType", "launch assertion"),
|
|
145
|
-
issuer: textField(record, "issuer", "launch assertion"),
|
|
146
|
-
audience: textField(record, "audience", "launch assertion"),
|
|
147
|
-
environmentKeyId: textField(record, "environmentKeyId", "launch assertion"),
|
|
148
|
-
installId: textField(record, "installId", "launch assertion"),
|
|
149
|
-
applicationOrigin: textField(record, "applicationOrigin", "launch assertion"),
|
|
150
|
-
endpoints: parseEndpoints(record.endpoints),
|
|
151
|
-
issuedAt: integerField(record, "issuedAt", "launch assertion"),
|
|
152
|
-
expiresAt: integerField(record, "expiresAt", "launch assertion"),
|
|
153
|
-
nonce: textField(record, "nonce", "launch assertion"),
|
|
154
|
-
};
|
|
155
|
-
};
|
|
156
|
-
const cacheKey = (platformAppId, installId) => (`@baijimu/platform-application-sdk:launch:${encodeURIComponent(platformAppId)}:${encodeURIComponent(installId)}`);
|
|
157
|
-
const readCachedConfig = (runtime, platformAppId, installId, origin) => {
|
|
158
|
-
const key = cacheKey(platformAppId, installId);
|
|
159
|
-
const raw = runtime.localStorage.getItem(key);
|
|
160
|
-
if (!raw) {
|
|
161
|
-
return fail("MISSING_LAUNCH_DESCRIPTOR", "入口地址缺少可信启动描述,请从平台重新打开应用");
|
|
162
|
-
}
|
|
163
|
-
try {
|
|
164
|
-
const value = JSON.parse(raw);
|
|
165
|
-
const record = exactObject(value, "cached launch configuration", [
|
|
166
|
-
"contractVersion", "platformAppId", "installId", "applicationOrigin",
|
|
167
|
-
"certificateExpiresAt", "config",
|
|
168
|
-
]);
|
|
169
|
-
if (textField(record, "contractVersion", "cached launch configuration") !== contractVersion
|
|
170
|
-
|| textField(record, "platformAppId", "cached launch configuration") !== platformAppId
|
|
171
|
-
|| textField(record, "installId", "cached launch configuration") !== installId
|
|
172
|
-
|| textField(record, "applicationOrigin", "cached launch configuration") !== origin
|
|
173
|
-
|| integerField(record, "certificateExpiresAt", "cached launch configuration")
|
|
174
|
-
< runtime.nowEpochSeconds() - clockSkewSeconds) {
|
|
175
|
-
return fail("EXPIRED_LAUNCH_DESCRIPTOR", "缓存的环境证书已过期,请从平台重新打开应用");
|
|
176
|
-
}
|
|
177
|
-
return normalizePlatformApplicationSdkConfig(record.config);
|
|
178
|
-
}
|
|
179
|
-
catch (cause) {
|
|
180
|
-
runtime.localStorage.removeItem(key);
|
|
181
|
-
if (cause instanceof PlatformApplicationSdkError)
|
|
182
|
-
throw cause;
|
|
183
|
-
return fail("MISSING_LAUNCH_DESCRIPTOR", "入口地址缺少可信启动描述,请从平台重新打开应用", cause);
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
// Kept outside the package root exports so tests can exercise the complete
|
|
187
|
-
// signature chain without exposing trust-root substitution as public SDK API.
|
|
188
|
-
export const verifyPlatformApplicationLaunchDescriptor = async (encodedEnvelope, runtime, platformAppId, installId, origin, trustedRootPublicKeys) => {
|
|
189
|
-
const envelopeRecord = exactObject(decodeJson(encodedEnvelope, runtime, "launch envelope"), "launch envelope", [
|
|
190
|
-
"contractVersion", "certificate", "assertion",
|
|
191
|
-
]);
|
|
192
|
-
const envelope = {
|
|
193
|
-
contractVersion: textField(envelopeRecord, "contractVersion", "launch envelope"),
|
|
194
|
-
certificate: textField(envelopeRecord, "certificate", "launch envelope"),
|
|
195
|
-
assertion: textField(envelopeRecord, "assertion", "launch envelope"),
|
|
196
|
-
};
|
|
197
|
-
if (envelope.contractVersion !== contractVersion) {
|
|
198
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", "不支持的可信启动协议版本");
|
|
199
|
-
}
|
|
200
|
-
const certificate = splitJws(envelope.certificate, runtime, certificateType);
|
|
201
|
-
const root = trustedRootPublicKeys[certificate.header.kid];
|
|
202
|
-
if (!root)
|
|
203
|
-
return fail("UNTRUSTED_PLATFORM_ROOT", "环境证书不是由SDK信任的平台根密钥签发");
|
|
204
|
-
await verifyEd25519(runtime, decodeBase64(root, runtime, false), certificate);
|
|
205
|
-
const certificateClaims = parseCertificateClaims(certificate.payload);
|
|
206
|
-
const now = runtime.nowEpochSeconds();
|
|
207
|
-
if (certificateClaims.contractVersion !== contractVersion
|
|
208
|
-
|| certificateClaims.tokenType !== certificateType
|
|
209
|
-
|| certificateClaims.issuer !== "baijimu-control-plane"
|
|
210
|
-
|| certificateClaims.subject !== `environment:${certificateClaims.environmentId}`
|
|
211
|
-
|| certificateClaims.usage !== "platform-application-launch"
|
|
212
|
-
|| certificateClaims.expiresAt <= certificateClaims.issuedAt
|
|
213
|
-
|| certificateClaims.expiresAt - certificateClaims.issuedAt !== certificateTtlSeconds
|
|
214
|
-
|| certificateClaims.issuedAt > now + clockSkewSeconds
|
|
215
|
-
|| certificateClaims.expiresAt < now - clockSkewSeconds) {
|
|
216
|
-
return fail("INVALID_ENVIRONMENT_CERTIFICATE", "环境证书身份或有效期不符合可信启动协议");
|
|
217
|
-
}
|
|
218
|
-
const assertion = splitJws(envelope.assertion, runtime, assertionType);
|
|
219
|
-
if (assertion.header.kid !== certificateClaims.environmentKeyId) {
|
|
220
|
-
return fail("INVALID_LAUNCH_SIGNATURE", "启动签名密钥与环境证书不一致");
|
|
221
|
-
}
|
|
222
|
-
await verifyEd25519(runtime, decodeBase64(certificateClaims.publicKey, runtime, true), assertion);
|
|
223
|
-
const claims = parseAssertionClaims(assertion.payload);
|
|
224
|
-
if (claims.contractVersion !== contractVersion
|
|
225
|
-
|| claims.tokenType !== assertionType
|
|
226
|
-
|| claims.issuer !== certificateClaims.environmentId
|
|
227
|
-
|| claims.environmentKeyId !== certificateClaims.environmentKeyId
|
|
228
|
-
|| claims.audience !== platformAppId
|
|
229
|
-
|| claims.installId !== installId
|
|
230
|
-
|| claims.applicationOrigin !== origin
|
|
231
|
-
|| claims.expiresAt <= claims.issuedAt
|
|
232
|
-
|| claims.expiresAt - claims.issuedAt > maximumLaunchTtlSeconds
|
|
233
|
-
|| claims.issuedAt > now + clockSkewSeconds
|
|
234
|
-
|| claims.expiresAt < now - clockSkewSeconds
|
|
235
|
-
|| claims.expiresAt > certificateClaims.expiresAt) {
|
|
236
|
-
return fail("INVALID_LAUNCH_DESCRIPTOR", "可信启动描述与当前应用、安装记录、来源或有效期不匹配");
|
|
237
|
-
}
|
|
238
|
-
const config = normalizePlatformApplicationSdkConfig({ platformAppId, ...claims.endpoints });
|
|
239
|
-
return { config, certificateExpiresAt: certificateClaims.expiresAt };
|
|
240
|
-
};
|
|
241
|
-
export const createPlatformApplicationClientFromLaunch = async (platformAppId, options = {}) => {
|
|
242
|
-
const runtime = options.runtime ?? defaultBrowserRuntime();
|
|
243
|
-
const parameters = readPlatformApplicationLaunchParameters(runtime.location.href);
|
|
244
|
-
const installId = String(parameters.get("installId") ?? "").trim();
|
|
245
|
-
if (!installId)
|
|
246
|
-
return fail("MISSING_INSTALL_ID", "入口地址缺少installId");
|
|
247
|
-
const normalizedPlatformAppId = String(platformAppId ?? "").trim();
|
|
248
|
-
if (!normalizedPlatformAppId)
|
|
249
|
-
return fail("INVALID_CONFIG", "platformAppId不能为空");
|
|
250
|
-
const origin = new URL(runtime.location.href).origin;
|
|
251
|
-
const encodedEnvelope = String(parameters.get(launchParameter) ?? "").trim();
|
|
252
|
-
let config;
|
|
253
|
-
if (encodedEnvelope) {
|
|
254
|
-
const verified = await verifyPlatformApplicationLaunchDescriptor(encodedEnvelope, runtime, normalizedPlatformAppId, installId, origin, rootPublicKeys);
|
|
255
|
-
config = verified.config;
|
|
256
|
-
const cached = {
|
|
257
|
-
contractVersion,
|
|
258
|
-
platformAppId: normalizedPlatformAppId,
|
|
259
|
-
installId,
|
|
260
|
-
applicationOrigin: origin,
|
|
261
|
-
certificateExpiresAt: verified.certificateExpiresAt,
|
|
262
|
-
config,
|
|
263
|
-
};
|
|
264
|
-
runtime.localStorage.setItem(cacheKey(normalizedPlatformAppId, installId), JSON.stringify(cached));
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
config = readCachedConfig(runtime, normalizedPlatformAppId, installId, origin);
|
|
268
|
-
}
|
|
269
|
-
return new PlatformApplicationClient(config, { runtime });
|
|
270
|
-
};
|
|
271
|
-
//# sourceMappingURL=launch.js.map
|
package/dist/launch.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"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"}
|