@baijimu/platform-application-sdk 2.0.1 → 2.1.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 CHANGED
@@ -3,6 +3,7 @@
3
3
  百积木 Platform Application 的标准浏览器 SDK。它统一负责:
4
4
 
5
5
  - 读取平台应用启动参数;
6
+ - 用内置平台根公钥验证 30 天环境证书和 5 分钟环境启动签名;
6
7
  - 生成并校验 Authorization Code + PKCE 会话;
7
8
  - 兑换、校验、保存和撤销 App Gateway token;
8
9
  - 通过规范的逐方法 Runtime 路由调用已声明能力;
@@ -19,18 +20,15 @@ npm install @baijimu/platform-application-sdk
19
20
 
20
21
  ## 初始化
21
22
 
22
- SDK 不包含任何生产、测试或私有化环境的域名默认值。应用必须从当前部署的权威配置取得三个地址;
23
- 缺失或非法配置会直接失败,SDK 不会回退到公共 SaaS。
23
+ SDK 不包含任何生产、测试或私有化环境的域名默认值。标准入口只接收稳定的
24
+ `platformAppId`;三个环境地址来自当前启动 URL 中的平台签名描述。SDK 先用内置平台根公钥
25
+ 验证环境证书,再用证书内的环境公钥验证启动描述,并校验应用、安装记录、页面来源与有效期。
26
+ 任一环节失败都会关闭启动,不会回退到公共 SaaS 或猜测地址。
24
27
 
25
28
  ```ts
26
- import { createPlatformApplicationClient } from "@baijimu/platform-application-sdk";
29
+ import { createPlatformApplicationClientFromLaunch } from "@baijimu/platform-application-sdk";
27
30
 
28
- const client = createPlatformApplicationClient({
29
- platformAppId: applicationDefinition.id,
30
- appGatewayApiBase: deploymentConfig.appGatewayApiBase,
31
- authorizationUrl: deploymentConfig.platformApplicationAuthorizationUrl,
32
- managementUrl: deploymentConfig.managerUrl,
33
- });
31
+ const client = await createPlatformApplicationClientFromLaunch(applicationDefinition.id);
34
32
 
35
33
  const session = await client.bootstrap();
36
34
  ```
@@ -41,6 +39,9 @@ const session = await client.bootstrap();
41
39
  2. 有授权回跳 `code`:校验 `state`,使用原始 verifier 兑换 token;
42
40
  3. 其他情况:生成新的 verifier、challenge 和 state,并用 `location.replace` 跳转统一授权页。
43
41
 
42
+ `createPlatformApplicationClient(config)` 仍保留给显式受控集成和本机测试;跨环境发布的
43
+ Platform Application 应使用可信启动工厂,不应在构建产物或公开配置文件中写入环境地址。
44
+
44
45
  ## 调用 Runtime 方法
45
46
 
46
47
  ```ts
@@ -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,iCAmBxC,CAAC"}
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,iCAoBxC,CAAC"}
package/dist/browser.js CHANGED
@@ -12,6 +12,7 @@ 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),
15
16
  open: window.open.bind(window),
16
17
  nowEpochSeconds: () => Math.floor(Date.now() / 1000),
17
18
  };
@@ -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,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;KACrD,CAAC;AACJ,CAAC,CAAC"}
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,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/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./client.js";
2
2
  export * from "./config.js";
3
3
  export * from "./errors.js";
4
+ export { createPlatformApplicationClientFromLaunch } from "./launch.js";
4
5
  export * from "./session.js";
5
6
  export * from "./types.js";
6
7
  export * from "./urls.js";
@@ -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,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
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,yCAAyC,EAAE,MAAM,aAAa,CAAC;AACxE,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./client.js";
2
2
  export * from "./config.js";
3
3
  export * from "./errors.js";
4
+ export { createPlatformApplicationClientFromLaunch } from "./launch.js";
4
5
  export * from "./session.js";
5
6
  export * from "./types.js";
6
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,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
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,yCAAyC,EAAE,MAAM,aAAa,CAAC;AACxE,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,8 @@
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
@@ -0,0 +1 @@
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 ADDED
@@ -0,0 +1,271 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -24,6 +24,7 @@ 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;
27
28
  readonly open: typeof window.open;
28
29
  readonly nowEpochSeconds: () => number;
29
30
  }
@@ -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,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;CACtD"}
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,CAAC,EAAE,OAAO,IAAI,CAAC;IAC5B,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;CACtD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baijimu/platform-application-sdk",
3
- "version": "2.0.1",
3
+ "version": "2.1.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",