@baijimu/platform-application-sdk 1.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/LICENSE +18 -0
- package/README.md +90 -0
- package/dist/browser.d.ts +3 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +19 -0
- package/dist/browser.js.map +1 -0
- package/dist/client.d.ts +24 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +154 -0
- package/dist/client.js.map +1 -0
- package/dist/cmodel.d.ts +3 -0
- package/dist/cmodel.d.ts.map +1 -0
- package/dist/cmodel.js +25 -0
- package/dist/cmodel.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +45 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/pkce.d.ts +4 -0
- package/dist/pkce.d.ts.map +1 -0
- package/dist/pkce.js +15 -0
- package/dist/pkce.js.map +1 -0
- package/dist/session.d.ts +4 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +40 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +9 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.js +76 -0
- package/dist/urls.js.map +1 -0
- package/package.json +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
Copyright 2026 Baijimu
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @baijimu/platform-application-sdk
|
|
2
|
+
|
|
3
|
+
百积木 Platform Application 的标准浏览器 SDK。它统一负责:
|
|
4
|
+
|
|
5
|
+
- 读取平台应用启动参数;
|
|
6
|
+
- 生成并校验 Authorization Code + PKCE 会话;
|
|
7
|
+
- 兑换、校验、保存和撤销 App Gateway token;
|
|
8
|
+
- 通过规范的逐方法 Runtime 路由调用已声明能力;
|
|
9
|
+
- 解析严格 CModel 响应并保留平台错误码。
|
|
10
|
+
|
|
11
|
+
这个包不是 `Component`、`Deployment Package`、`Profile`、`Bundle`、`Module` 或
|
|
12
|
+
`Platform Application`,也不部署服务。它是供各个平台应用构建时依赖的公共 npm SDK。
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @baijimu/platform-application-sdk
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 初始化
|
|
21
|
+
|
|
22
|
+
SDK 不包含任何生产、测试或私有化环境的域名默认值。应用必须从当前部署的权威配置取得三个地址;
|
|
23
|
+
缺失或非法配置会直接失败,SDK 不会回退到公共 SaaS。
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import { createPlatformApplicationClient } from "@baijimu/platform-application-sdk";
|
|
27
|
+
|
|
28
|
+
const client = createPlatformApplicationClient({
|
|
29
|
+
platformAppId: applicationDefinition.id,
|
|
30
|
+
appGatewayApiBase: deploymentConfig.appGatewayApiBase,
|
|
31
|
+
authorizationUrl: deploymentConfig.platformApplicationAuthorizationUrl,
|
|
32
|
+
managementUrl: deploymentConfig.managerUrl,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const session = await client.bootstrap();
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`bootstrap()` 会按当前 URL 自动执行以下状态机:
|
|
39
|
+
|
|
40
|
+
1. 有仍然有效的当前安装 token:直接返回会话;
|
|
41
|
+
2. 有授权回跳 `code`:校验 `state`,使用原始 verifier 兑换 token;
|
|
42
|
+
3. 其他情况:生成新的 verifier、challenge 和 state,并用 `location.replace` 跳转统一授权页。
|
|
43
|
+
|
|
44
|
+
## 调用 Runtime 方法
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
const projects = await client.call(
|
|
48
|
+
"declared-service",
|
|
49
|
+
"listProjects",
|
|
50
|
+
{ offset: 0, limit: 50 },
|
|
51
|
+
);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
SDK 使用以下规范路由,并把第三个参数直接作为方法参数体:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
POST {appGatewayApiBase}/workspace-runtime/apps/{installId}/services/{service}/methods/{method}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
新应用不会使用旧的聚合 `/call` 迁移入口,也不会访问平台内部 API、拼接 Pod 地址或持有模块凭据。
|
|
61
|
+
|
|
62
|
+
## 会话与错误
|
|
63
|
+
|
|
64
|
+
- token 按 `platformAppId + installId` 隔离保存,保存内容同时包含并校验
|
|
65
|
+
`workspaceId + runtimeAppId + installId` 和过期时间;
|
|
66
|
+
- PKCE verifier 和 state 只进入当前浏览器会话存储,不进入 URL;
|
|
67
|
+
- `CModelFailureError` 保留 HTTP 状态和 `errorCode`;
|
|
68
|
+
- `PlatformApplicationSdkError` 表示 SDK 配置、启动上下文和浏览器状态错误;
|
|
69
|
+
- 401 会清除当前会话,但不会把普通业务错误误判为授权失效。
|
|
70
|
+
|
|
71
|
+
## 注销与管理入口
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
await client.revoke();
|
|
75
|
+
client.openManagementRoute("/workspace/current/settings");
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`managementUrl` 是可选配置;未配置时调用管理入口会明确失败。
|
|
79
|
+
|
|
80
|
+
## 本地开发
|
|
81
|
+
|
|
82
|
+
所有非本机地址都必须使用 HTTPS。只有 `localhost`、`127.0.0.1` 和 `::1` 允许 HTTP,且本地
|
|
83
|
+
回跳地址仍须满足 Platform Application 入口同源规则。
|
|
84
|
+
|
|
85
|
+
## 发布
|
|
86
|
+
|
|
87
|
+
本项目是已登记独立项目,唯一发布器是 Jenkins `baijimu-platform-application-sdk`。流水线只从
|
|
88
|
+
Gitee 远程 `main` 的精确提交构建和测试,创建不可变 `v<semver>` 标签,发布公共 npm 包,再从
|
|
89
|
+
npmjs 安装精确版本执行烟测。流水线不修改平台服务、Control Plane、Bundle、基础服务或基础设施。
|
|
90
|
+
|
|
@@ -0,0 +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"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PlatformApplicationSdkError } from "./errors.js";
|
|
2
|
+
export const defaultBrowserRuntime = () => {
|
|
3
|
+
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
4
|
+
throw new PlatformApplicationSdkError("BROWSER_REQUIRED", "Platform Application SDK 只能在浏览器中初始化;服务端渲染请延迟到客户端执行");
|
|
5
|
+
}
|
|
6
|
+
return {
|
|
7
|
+
location: window.location,
|
|
8
|
+
history: window.history,
|
|
9
|
+
document,
|
|
10
|
+
localStorage: window.localStorage,
|
|
11
|
+
sessionStorage: window.sessionStorage,
|
|
12
|
+
crypto: window.crypto,
|
|
13
|
+
fetch: window.fetch.bind(window),
|
|
14
|
+
btoa: window.btoa.bind(window),
|
|
15
|
+
open: window.open.bind(window),
|
|
16
|
+
nowEpochSeconds: () => Math.floor(Date.now() / 1000),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type NormalizedPlatformApplicationSdkConfig } from "./config.js";
|
|
2
|
+
import type { PlatformApplicationBrowserRuntime, PlatformApplicationClientOptions, PlatformApplicationSdkConfig, PlatformApplicationSession } from "./types.js";
|
|
3
|
+
export declare class PlatformApplicationClient {
|
|
4
|
+
readonly config: NormalizedPlatformApplicationSdkConfig;
|
|
5
|
+
readonly runtime: PlatformApplicationBrowserRuntime;
|
|
6
|
+
private currentSession;
|
|
7
|
+
constructor(config: PlatformApplicationSdkConfig, options?: PlatformApplicationClientOptions);
|
|
8
|
+
getSession(): PlatformApplicationSession | null;
|
|
9
|
+
bootstrap(): Promise<PlatformApplicationSession>;
|
|
10
|
+
clearSession(): void;
|
|
11
|
+
restartAuthorization(): void;
|
|
12
|
+
revoke(): Promise<void>;
|
|
13
|
+
call<T = unknown>(service: string, method: string, params?: unknown): Promise<T>;
|
|
14
|
+
openManagementRoute(route: string): void;
|
|
15
|
+
private beginAuthorization;
|
|
16
|
+
private completeAuthorization;
|
|
17
|
+
private readStoredSession;
|
|
18
|
+
private requireSession;
|
|
19
|
+
private sessionStorageKey;
|
|
20
|
+
private verifierStorageKey;
|
|
21
|
+
private stateStorageKey;
|
|
22
|
+
}
|
|
23
|
+
export declare const createPlatformApplicationClient: (config: PlatformApplicationSdkConfig, options?: PlatformApplicationClientOptions) => PlatformApplicationClient;
|
|
24
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,sCAAsC,EAC5C,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EACV,iCAAiC,EACjC,gCAAgC,EAChC,4BAA4B,EAC5B,0BAA0B,EAC3B,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;gBAErD,MAAM,EAAE,4BAA4B,EAAE,OAAO,GAAE,gCAAqC;IAKhG,UAAU,IAAI,0BAA0B,GAAG,IAAI;IAIzC,SAAS,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAoBtD,YAAY,IAAI,IAAI;IAOpB,oBAAoB,IAAI,IAAI;IAKtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAcvB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,OAAY,GAAG,OAAO,CAAC,CAAC,CAAC;IAuB1F,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;YAW1B,kBAAkB;YAgBlB,qBAAqB;IA+CnC,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;CAGxB;AAED,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,4BAA4B,EACpC,UAAS,gCAAqC,KAC7C,yBAA2E,CAAC"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { defaultBrowserRuntime } from "./browser.js";
|
|
2
|
+
import { requireCModelData, parseJsonResponseBody } from "./cmodel.js";
|
|
3
|
+
import { normalizePlatformApplicationSdkConfig, } from "./config.js";
|
|
4
|
+
import { PlatformApplicationSdkError } from "./errors.js";
|
|
5
|
+
import { createCodeChallenge, generateCodeVerifier } from "./pkce.js";
|
|
6
|
+
import { parsePlatformApplicationToken, validatePlatformApplicationSession, } from "./session.js";
|
|
7
|
+
import { buildAuthorizationCallbackUrl, buildPlatformAuthorizationUrl, buildPlatformManagementUrl, readPlatformApplicationLaunchParameters, removeAuthorizationParameters, runtimeMethodCallUrl, runtimeTokenExchangeUrl, runtimeTokenRevokeUrl, } from "./urls.js";
|
|
8
|
+
const storagePrefix = "@baijimu/platform-application-sdk";
|
|
9
|
+
export class PlatformApplicationClient {
|
|
10
|
+
config;
|
|
11
|
+
runtime;
|
|
12
|
+
currentSession = null;
|
|
13
|
+
constructor(config, options = {}) {
|
|
14
|
+
this.config = normalizePlatformApplicationSdkConfig(config);
|
|
15
|
+
this.runtime = options.runtime ?? defaultBrowserRuntime();
|
|
16
|
+
}
|
|
17
|
+
getSession() {
|
|
18
|
+
return this.currentSession;
|
|
19
|
+
}
|
|
20
|
+
async bootstrap() {
|
|
21
|
+
const parameters = readPlatformApplicationLaunchParameters(this.runtime.location.href);
|
|
22
|
+
const installId = String(parameters.get("installId") ?? "").trim();
|
|
23
|
+
if (!installId) {
|
|
24
|
+
throw new PlatformApplicationSdkError("MISSING_INSTALL_ID", "入口地址缺少installId");
|
|
25
|
+
}
|
|
26
|
+
const stored = this.readStoredSession(installId);
|
|
27
|
+
if (stored) {
|
|
28
|
+
this.currentSession = stored;
|
|
29
|
+
return stored;
|
|
30
|
+
}
|
|
31
|
+
const code = String(parameters.get("code") ?? "").trim();
|
|
32
|
+
if (code)
|
|
33
|
+
return this.completeAuthorization(installId, code, parameters.get("state"));
|
|
34
|
+
await this.beginAuthorization(installId, parameters.get("miniappAuthTicket"));
|
|
35
|
+
return new Promise(() => undefined);
|
|
36
|
+
}
|
|
37
|
+
clearSession() {
|
|
38
|
+
if (this.currentSession) {
|
|
39
|
+
this.runtime.localStorage.removeItem(this.sessionStorageKey(this.currentSession.installId));
|
|
40
|
+
}
|
|
41
|
+
this.currentSession = null;
|
|
42
|
+
}
|
|
43
|
+
restartAuthorization() {
|
|
44
|
+
this.clearSession();
|
|
45
|
+
this.runtime.location.reload();
|
|
46
|
+
}
|
|
47
|
+
async revoke() {
|
|
48
|
+
const session = this.requireSession();
|
|
49
|
+
const response = await this.runtime.fetch(runtimeTokenRevokeUrl(this.config.appGatewayApiBase, session.installId), {
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: { Authorization: `Bearer ${session.token}` },
|
|
52
|
+
});
|
|
53
|
+
const payload = await parseJsonResponseBody(response);
|
|
54
|
+
requireCModelData(response.status, payload, "token revoke", (value) => value);
|
|
55
|
+
this.clearSession();
|
|
56
|
+
}
|
|
57
|
+
async call(service, method, params = {}) {
|
|
58
|
+
const session = this.requireSession();
|
|
59
|
+
const response = await this.runtime.fetch(runtimeMethodCallUrl(this.config.appGatewayApiBase, session.installId, service, method), {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers: {
|
|
62
|
+
Authorization: `Bearer ${session.token}`,
|
|
63
|
+
"content-type": "application/json",
|
|
64
|
+
},
|
|
65
|
+
body: JSON.stringify(params ?? {}),
|
|
66
|
+
});
|
|
67
|
+
const payload = await parseJsonResponseBody(response);
|
|
68
|
+
if (response.status === 401)
|
|
69
|
+
this.clearSession();
|
|
70
|
+
return requireCModelData(response.status, payload, "runtime method call", (value) => value);
|
|
71
|
+
}
|
|
72
|
+
openManagementRoute(route) {
|
|
73
|
+
if (!this.config.managementUrl) {
|
|
74
|
+
throw new PlatformApplicationSdkError("MANAGEMENT_URL_NOT_CONFIGURED", "未配置managementUrl");
|
|
75
|
+
}
|
|
76
|
+
this.runtime.open(buildPlatformManagementUrl(this.config.managementUrl, route), "_blank", "noopener,noreferrer");
|
|
77
|
+
}
|
|
78
|
+
async beginAuthorization(installId, miniappAuthTicket) {
|
|
79
|
+
const verifier = generateCodeVerifier(this.runtime);
|
|
80
|
+
const state = generateCodeVerifier(this.runtime);
|
|
81
|
+
this.runtime.sessionStorage.setItem(this.verifierStorageKey(installId), verifier);
|
|
82
|
+
this.runtime.sessionStorage.setItem(this.stateStorageKey(installId), state);
|
|
83
|
+
const authorizationUrl = buildPlatformAuthorizationUrl(this.config.authorizationUrl, {
|
|
84
|
+
installId,
|
|
85
|
+
redirectUri: buildAuthorizationCallbackUrl(this.runtime.location.href),
|
|
86
|
+
codeChallenge: await createCodeChallenge(this.runtime, verifier),
|
|
87
|
+
codeChallengeMethod: "S256",
|
|
88
|
+
state,
|
|
89
|
+
miniappAuthTicket: String(miniappAuthTicket ?? "").trim(),
|
|
90
|
+
});
|
|
91
|
+
this.runtime.location.replace(authorizationUrl);
|
|
92
|
+
}
|
|
93
|
+
async completeAuthorization(installId, code, returnedState) {
|
|
94
|
+
const verifier = this.runtime.sessionStorage.getItem(this.verifierStorageKey(installId));
|
|
95
|
+
const expectedState = this.runtime.sessionStorage.getItem(this.stateStorageKey(installId));
|
|
96
|
+
if (!verifier || !expectedState) {
|
|
97
|
+
throw new PlatformApplicationSdkError("PKCE_SESSION_MISSING", "缺少PKCE会话,无法兑换应用token");
|
|
98
|
+
}
|
|
99
|
+
if (expectedState !== String(returnedState ?? "")) {
|
|
100
|
+
throw new PlatformApplicationSdkError("STATE_MISMATCH", "Platform Application授权回跳state校验失败");
|
|
101
|
+
}
|
|
102
|
+
const response = await this.runtime.fetch(runtimeTokenExchangeUrl(this.config.appGatewayApiBase, installId), {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: { "content-type": "application/json" },
|
|
105
|
+
body: JSON.stringify({ code, codeVerifier: verifier }),
|
|
106
|
+
});
|
|
107
|
+
const payload = await parseJsonResponseBody(response);
|
|
108
|
+
const token = requireCModelData(response.status, payload, "authorization code exchange", parsePlatformApplicationToken);
|
|
109
|
+
const session = validatePlatformApplicationSession(token, installId, this.config.platformAppId, this.runtime.nowEpochSeconds());
|
|
110
|
+
this.runtime.localStorage.setItem(this.sessionStorageKey(installId), JSON.stringify(session));
|
|
111
|
+
this.runtime.sessionStorage.removeItem(this.verifierStorageKey(installId));
|
|
112
|
+
this.runtime.sessionStorage.removeItem(this.stateStorageKey(installId));
|
|
113
|
+
this.runtime.history.replaceState({}, this.runtime.document.title, removeAuthorizationParameters(this.runtime.location.href));
|
|
114
|
+
this.currentSession = session;
|
|
115
|
+
return session;
|
|
116
|
+
}
|
|
117
|
+
readStoredSession(installId) {
|
|
118
|
+
const key = this.sessionStorageKey(installId);
|
|
119
|
+
try {
|
|
120
|
+
const raw = this.runtime.localStorage.getItem(key);
|
|
121
|
+
if (!raw)
|
|
122
|
+
return null;
|
|
123
|
+
const parsed = JSON.parse(raw);
|
|
124
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
125
|
+
return null;
|
|
126
|
+
const value = parsed;
|
|
127
|
+
if (value.platformAppId !== this.config.platformAppId)
|
|
128
|
+
return null;
|
|
129
|
+
const token = parsePlatformApplicationToken(value, "$.session");
|
|
130
|
+
return validatePlatformApplicationSession(token, installId, this.config.platformAppId, this.runtime.nowEpochSeconds());
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
this.runtime.localStorage.removeItem(key);
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
requireSession() {
|
|
138
|
+
if (!this.currentSession) {
|
|
139
|
+
throw new PlatformApplicationSdkError("SESSION_NOT_INITIALIZED", "Platform Application会话尚未初始化");
|
|
140
|
+
}
|
|
141
|
+
return this.currentSession;
|
|
142
|
+
}
|
|
143
|
+
sessionStorageKey(installId) {
|
|
144
|
+
return `${storagePrefix}:session:${encodeURIComponent(this.config.platformAppId)}:${encodeURIComponent(installId)}`;
|
|
145
|
+
}
|
|
146
|
+
verifierStorageKey(installId) {
|
|
147
|
+
return `${storagePrefix}:pkce-verifier:${encodeURIComponent(this.config.platformAppId)}:${encodeURIComponent(installId)}`;
|
|
148
|
+
}
|
|
149
|
+
stateStorageKey(installId) {
|
|
150
|
+
return `${storagePrefix}:pkce-state:${encodeURIComponent(this.config.platformAppId)}:${encodeURIComponent(installId)}`;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export const createPlatformApplicationClient = (config, options = {}) => new PlatformApplicationClient(config, options);
|
|
154
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/cmodel.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const parseJsonResponseBody: (response: Pick<Response, "text">) => Promise<unknown>;
|
|
2
|
+
export declare const requireCModelData: <T>(httpStatus: number, payload: unknown, operation: string, parseData: (value: unknown, path: string) => T) => T;
|
|
3
|
+
//# sourceMappingURL=cmodel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmodel.d.ts","sourceRoot":"","sources":["../src/cmodel.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,qBAAqB,GAAU,UAAU,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAG,OAAO,CAAC,OAAO,CAU7F,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,EACjC,YAAY,MAAM,EAClB,SAAS,OAAO,EAChB,WAAW,MAAM,EACjB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,KAC7C,CASF,CAAC"}
|
package/dist/cmodel.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CModelContractError, isCModelSuccess, parseCModelResponse, } from "@baijimu/cmodel";
|
|
2
|
+
import { CModelFailureError, PlatformApplicationSdkError } from "./errors.js";
|
|
3
|
+
export const parseJsonResponseBody = async (response) => {
|
|
4
|
+
const text = await response.text();
|
|
5
|
+
if (!text) {
|
|
6
|
+
throw new PlatformApplicationSdkError("INVALID_RESPONSE", "平台响应体为空");
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(text);
|
|
10
|
+
}
|
|
11
|
+
catch (cause) {
|
|
12
|
+
throw new PlatformApplicationSdkError("INVALID_RESPONSE", "平台响应不是有效JSON", { cause });
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export const requireCModelData = (httpStatus, payload, operation, parseData) => {
|
|
16
|
+
const parsed = parseCModelResponse(httpStatus, payload, parseData);
|
|
17
|
+
if (!isCModelSuccess(parsed)) {
|
|
18
|
+
throw new CModelFailureError(httpStatus, parsed);
|
|
19
|
+
}
|
|
20
|
+
if (parsed.data === null) {
|
|
21
|
+
throw new CModelContractError("$.data", `${operation} success response must contain data`);
|
|
22
|
+
}
|
|
23
|
+
return parsed.data;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=cmodel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmodel.js","sourceRoot":"","sources":["../src/cmodel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,QAAgC,EAAoB,EAAE;IAChG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,2BAA2B,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,2BAA2B,CAAC,kBAAkB,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,UAAkB,EAClB,OAAgB,EAChB,SAAiB,EACjB,SAA8C,EAC3C,EAAE;IACL,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,GAAG,SAAS,qCAAqC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PlatformApplicationSdkConfig } from "./types.js";
|
|
2
|
+
export interface NormalizedPlatformApplicationSdkConfig {
|
|
3
|
+
readonly platformAppId: string;
|
|
4
|
+
readonly appGatewayApiBase: string;
|
|
5
|
+
readonly authorizationUrl: string;
|
|
6
|
+
readonly managementUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const normalizePlatformApplicationSdkConfig: (config: PlatformApplicationSdkConfig) => NormalizedPlatformApplicationSdkConfig;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,sCAAsC;IACrD,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;AAoCD,eAAO,MAAM,qCAAqC,GAChD,QAAQ,4BAA4B,KACnC,sCAiBF,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PlatformApplicationSdkError } from "./errors.js";
|
|
2
|
+
const requiredText = (value, field) => {
|
|
3
|
+
const normalized = String(value ?? "").trim();
|
|
4
|
+
if (!normalized) {
|
|
5
|
+
throw new PlatformApplicationSdkError("INVALID_CONFIG", `${field}不能为空`);
|
|
6
|
+
}
|
|
7
|
+
return normalized;
|
|
8
|
+
};
|
|
9
|
+
const isLoopbackHost = (hostname) => (hostname === "localhost"
|
|
10
|
+
|| hostname === "127.0.0.1"
|
|
11
|
+
|| hostname === "[::1]"
|
|
12
|
+
|| hostname === "::1");
|
|
13
|
+
const absoluteBrowserUrl = (value, field) => {
|
|
14
|
+
let url;
|
|
15
|
+
try {
|
|
16
|
+
url = new URL(requiredText(value, field));
|
|
17
|
+
}
|
|
18
|
+
catch (cause) {
|
|
19
|
+
throw new PlatformApplicationSdkError("INVALID_CONFIG", `${field}必须是绝对URL`, { cause });
|
|
20
|
+
}
|
|
21
|
+
if (url.protocol !== "https:" && !(url.protocol === "http:" && isLoopbackHost(url.hostname))) {
|
|
22
|
+
throw new PlatformApplicationSdkError("INVALID_CONFIG", `${field}必须使用HTTPS;仅本机开发允许HTTP`);
|
|
23
|
+
}
|
|
24
|
+
if (url.username || url.password) {
|
|
25
|
+
throw new PlatformApplicationSdkError("INVALID_CONFIG", `${field}不能包含用户凭据`);
|
|
26
|
+
}
|
|
27
|
+
return url;
|
|
28
|
+
};
|
|
29
|
+
export const normalizePlatformApplicationSdkConfig = (config) => {
|
|
30
|
+
const appGatewayApiBase = absoluteBrowserUrl(config.appGatewayApiBase, "appGatewayApiBase");
|
|
31
|
+
appGatewayApiBase.hash = "";
|
|
32
|
+
appGatewayApiBase.search = "";
|
|
33
|
+
appGatewayApiBase.pathname = appGatewayApiBase.pathname.replace(/\/+$/, "");
|
|
34
|
+
const authorizationUrl = absoluteBrowserUrl(config.authorizationUrl, "authorizationUrl");
|
|
35
|
+
const managementUrl = config.managementUrl === undefined
|
|
36
|
+
? undefined
|
|
37
|
+
: absoluteBrowserUrl(config.managementUrl, "managementUrl").toString();
|
|
38
|
+
return {
|
|
39
|
+
platformAppId: requiredText(config.platformAppId, "platformAppId"),
|
|
40
|
+
appGatewayApiBase: appGatewayApiBase.toString().replace(/\/$/, ""),
|
|
41
|
+
authorizationUrl: authorizationUrl.toString(),
|
|
42
|
+
...(managementUrl === undefined ? {} : { managementUrl }),
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAU1D,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,2BAA2B,CAAC,gBAAgB,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,CACpD,QAAQ,KAAK,WAAW;OACrB,QAAQ,KAAK,WAAW;OACxB,QAAQ,KAAK,OAAO;OACpB,QAAQ,KAAK,KAAK,CACtB,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAO,EAAE;IAC/D,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,2BAA2B,CAAC,gBAAgB,EAAE,GAAG,KAAK,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,2BAA2B,CACnC,gBAAgB,EAChB,GAAG,KAAK,uBAAuB,CAChC,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,2BAA2B,CAAC,gBAAgB,EAAE,GAAG,KAAK,UAAU,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qCAAqC,GAAG,CACnD,MAAoC,EACI,EAAE;IAC1C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAC5F,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC;IAC5B,iBAAiB,CAAC,MAAM,GAAG,EAAE,CAAC;IAC9B,iBAAiB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE5E,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,KAAK,SAAS;QACtD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEzE,OAAO;QACL,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC;QAClE,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAClE,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;QAC7C,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CModelFailure } from "@baijimu/cmodel";
|
|
2
|
+
export declare class PlatformApplicationSdkError extends Error {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
constructor(code: string, message: string, options?: ErrorOptions);
|
|
5
|
+
}
|
|
6
|
+
export declare class CModelFailureError extends Error {
|
|
7
|
+
readonly httpStatus: number;
|
|
8
|
+
readonly errorCode: string;
|
|
9
|
+
readonly cmodelFailure: CModelFailure;
|
|
10
|
+
constructor(httpStatus: number, failure: CModelFailure);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKlE;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;gBAE1B,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAOvD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class PlatformApplicationSdkError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message, options) {
|
|
4
|
+
super(message, options);
|
|
5
|
+
this.name = "PlatformApplicationSdkError";
|
|
6
|
+
this.code = code;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class CModelFailureError extends Error {
|
|
10
|
+
httpStatus;
|
|
11
|
+
errorCode;
|
|
12
|
+
cmodelFailure;
|
|
13
|
+
constructor(httpStatus, failure) {
|
|
14
|
+
super(`CModel request failed: ${failure.errorCode}`);
|
|
15
|
+
this.name = "CModelFailureError";
|
|
16
|
+
this.httpStatus = httpStatus;
|
|
17
|
+
this.errorCode = failure.errorCode;
|
|
18
|
+
this.cmodelFailure = failure;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,OAAe,EAAE,OAAsB;QAC/D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,aAAa,CAAgB;IAEtC,YAAY,UAAkB,EAAE,OAAsB;QACpD,KAAK,CAAC,0BAA0B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +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"}
|
package/dist/pkce.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PlatformApplicationBrowserRuntime } from "./types.js";
|
|
2
|
+
export declare const generateCodeVerifier: (runtime: PlatformApplicationBrowserRuntime) => string;
|
|
3
|
+
export declare const createCodeChallenge: (runtime: PlatformApplicationBrowserRuntime, verifier: string) => Promise<string>;
|
|
4
|
+
//# sourceMappingURL=pkce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../src/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,oBAAoB,GAAI,SAAS,iCAAiC,KAAG,MAIjF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,iCAAiC,EAC1C,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,CAMhB,CAAC"}
|
package/dist/pkce.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const base64Url = (bytes, encode) => {
|
|
2
|
+
let binary = "";
|
|
3
|
+
bytes.forEach((byte) => { binary += String.fromCharCode(byte); });
|
|
4
|
+
return encode(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
|
|
5
|
+
};
|
|
6
|
+
export const generateCodeVerifier = (runtime) => {
|
|
7
|
+
const bytes = new Uint8Array(48);
|
|
8
|
+
runtime.crypto.getRandomValues(bytes);
|
|
9
|
+
return base64Url(bytes, runtime.btoa);
|
|
10
|
+
};
|
|
11
|
+
export const createCodeChallenge = async (runtime, verifier) => {
|
|
12
|
+
const digest = await runtime.crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier));
|
|
13
|
+
return base64Url(new Uint8Array(digest), runtime.btoa);
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=pkce.js.map
|
package/dist/pkce.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../src/pkce.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAE,MAAmB,EAAU,EAAE;IACnE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAA0C,EAAU,EAAE;IACzF,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAA0C,EAC1C,QAAgB,EACC,EAAE;IACnB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAC/C,SAAS,EACT,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CACnC,CAAC;IACF,OAAO,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PlatformApplicationSession, PlatformApplicationToken } from "./types.js";
|
|
2
|
+
export declare const parsePlatformApplicationToken: (input: unknown, path: string) => PlatformApplicationToken;
|
|
3
|
+
export declare const validatePlatformApplicationSession: (token: PlatformApplicationToken, installId: string, platformAppId: string, nowEpochSeconds: number) => PlatformApplicationSession;
|
|
4
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAuBvF,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,EAAE,MAAM,MAAM,KAAG,wBAa5E,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,OAAO,wBAAwB,EAC/B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,iBAAiB,MAAM,KACtB,0BAQF,CAAC"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CModelContractError } from "@baijimu/cmodel";
|
|
2
|
+
const objectAt = (input, path) => {
|
|
3
|
+
if (typeof input !== "object" || input === null || Array.isArray(input)) {
|
|
4
|
+
throw new CModelContractError(path, "must be an object");
|
|
5
|
+
}
|
|
6
|
+
return input;
|
|
7
|
+
};
|
|
8
|
+
const stringAt = (input, path) => {
|
|
9
|
+
if (typeof input !== "string" || !input.trim()) {
|
|
10
|
+
throw new CModelContractError(path, "must be a non-empty string");
|
|
11
|
+
}
|
|
12
|
+
return input.trim();
|
|
13
|
+
};
|
|
14
|
+
const positiveIntegerAt = (input, path) => {
|
|
15
|
+
if (typeof input !== "number" || !Number.isSafeInteger(input) || input <= 0) {
|
|
16
|
+
throw new CModelContractError(path, "must be a positive safe integer");
|
|
17
|
+
}
|
|
18
|
+
return input;
|
|
19
|
+
};
|
|
20
|
+
export const parsePlatformApplicationToken = (input, path) => {
|
|
21
|
+
const value = objectAt(input, path);
|
|
22
|
+
return {
|
|
23
|
+
token: stringAt(value.token, `${path}.token`),
|
|
24
|
+
installId: stringAt(value.installId, `${path}.installId`),
|
|
25
|
+
runtimeAppId: stringAt(value.runtimeAppId, `${path}.runtimeAppId`),
|
|
26
|
+
workspaceId: positiveIntegerAt(value.workspaceId, `${path}.workspaceId`),
|
|
27
|
+
...(value.userId === undefined ? {} : { userId: positiveIntegerAt(value.userId, `${path}.userId`) }),
|
|
28
|
+
expiresAtEpochSeconds: positiveIntegerAt(value.expiresAtEpochSeconds, `${path}.expiresAtEpochSeconds`),
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export const validatePlatformApplicationSession = (token, installId, platformAppId, nowEpochSeconds) => {
|
|
32
|
+
if (token.installId !== installId) {
|
|
33
|
+
throw new CModelContractError("$.data.installId", "does not match the current installation");
|
|
34
|
+
}
|
|
35
|
+
if (token.expiresAtEpochSeconds <= nowEpochSeconds + 30) {
|
|
36
|
+
throw new CModelContractError("$.data.expiresAtEpochSeconds", "token is expired or near expiry");
|
|
37
|
+
}
|
|
38
|
+
return { ...token, platformAppId };
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,IAAY,EAA2B,EAAE;IACzE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,IAAY,EAAU,EAAE;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAE,IAAY,EAAU,EAAE;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,KAAc,EAAE,IAAY,EAA4B,EAAE;IACtG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,QAAQ,CAAC;QAC7C,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,YAAY,CAAC;QACzD,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,eAAe,CAAC;QAClE,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,cAAc,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;QACpG,qBAAqB,EAAE,iBAAiB,CACtC,KAAK,CAAC,qBAAqB,EAC3B,GAAG,IAAI,wBAAwB,CAChC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAChD,KAA+B,EAC/B,SAAiB,EACjB,aAAqB,EACrB,eAAuB,EACK,EAAE;IAC9B,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,yCAAyC,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,KAAK,CAAC,qBAAqB,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,EAAE,iCAAiC,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,CAAC;AACrC,CAAC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface PlatformApplicationSdkConfig {
|
|
2
|
+
readonly platformAppId: string;
|
|
3
|
+
readonly appGatewayApiBase: string;
|
|
4
|
+
readonly authorizationUrl: string;
|
|
5
|
+
readonly managementUrl?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PlatformApplicationToken {
|
|
8
|
+
readonly token: string;
|
|
9
|
+
readonly installId: string;
|
|
10
|
+
readonly runtimeAppId: string;
|
|
11
|
+
readonly workspaceId: number;
|
|
12
|
+
readonly userId?: number;
|
|
13
|
+
readonly expiresAtEpochSeconds: number;
|
|
14
|
+
}
|
|
15
|
+
export interface PlatformApplicationSession extends PlatformApplicationToken {
|
|
16
|
+
readonly platformAppId: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PlatformApplicationBrowserRuntime {
|
|
19
|
+
readonly location: Pick<Location, "href" | "origin" | "replace" | "reload">;
|
|
20
|
+
readonly history: Pick<History, "replaceState">;
|
|
21
|
+
readonly document: Pick<Document, "title">;
|
|
22
|
+
readonly localStorage: Pick<Storage, "getItem" | "setItem" | "removeItem">;
|
|
23
|
+
readonly sessionStorage: Pick<Storage, "getItem" | "setItem" | "removeItem">;
|
|
24
|
+
readonly crypto: Pick<Crypto, "getRandomValues" | "subtle">;
|
|
25
|
+
readonly fetch: typeof fetch;
|
|
26
|
+
readonly btoa: typeof btoa;
|
|
27
|
+
readonly open: typeof window.open;
|
|
28
|
+
readonly nowEpochSeconds: () => number;
|
|
29
|
+
}
|
|
30
|
+
export interface PlatformApplicationClientOptions {
|
|
31
|
+
readonly runtime?: PlatformApplicationBrowserRuntime;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/urls.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const readPlatformApplicationLaunchParameters: (href: string) => URLSearchParams;
|
|
2
|
+
export declare const buildPlatformAuthorizationUrl: (authorizationUrl: string, parameters: Readonly<Record<string, string>>) => string;
|
|
3
|
+
export declare const removeAuthorizationParameters: (href: string) => string;
|
|
4
|
+
export declare const buildAuthorizationCallbackUrl: (href: string) => string;
|
|
5
|
+
export declare const runtimeTokenExchangeUrl: (appGatewayApiBase: string, installId: string) => string;
|
|
6
|
+
export declare const runtimeTokenRevokeUrl: (appGatewayApiBase: string, installId: string) => string;
|
|
7
|
+
export declare const runtimeMethodCallUrl: (appGatewayApiBase: string, installId: string, service: string, method: string) => string;
|
|
8
|
+
export declare const buildPlatformManagementUrl: (managementUrl: string, route: string) => string;
|
|
9
|
+
//# sourceMappingURL=urls.d.ts.map
|
|
@@ -0,0 +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;AAeF,eAAO,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAO5D,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,EACjB,SAAS,MAAM,EACf,QAAQ,MAAM,KACb,MAGF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,eAAe,MAAM,EAAE,OAAO,MAAM,KAAG,MAQjF,CAAC"}
|
package/dist/urls.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { PlatformApplicationSdkError } from "./errors.js";
|
|
2
|
+
const applyParameters = (target, parameters) => {
|
|
3
|
+
for (const [key, value] of Object.entries(parameters)) {
|
|
4
|
+
if (value)
|
|
5
|
+
target.set(key, value);
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
export const readPlatformApplicationLaunchParameters = (href) => {
|
|
9
|
+
const url = new URL(href);
|
|
10
|
+
const parameters = new URLSearchParams(url.search);
|
|
11
|
+
const hash = url.hash.slice(1);
|
|
12
|
+
const hashQuery = hash.includes("?") ? hash.slice(hash.indexOf("?") + 1) : hash;
|
|
13
|
+
if (hashQuery.includes("=")) {
|
|
14
|
+
new URLSearchParams(hashQuery).forEach((value, key) => parameters.set(key, value));
|
|
15
|
+
}
|
|
16
|
+
return parameters;
|
|
17
|
+
};
|
|
18
|
+
export const buildPlatformAuthorizationUrl = (authorizationUrl, parameters) => {
|
|
19
|
+
const url = new URL(authorizationUrl);
|
|
20
|
+
if (url.hash.startsWith("#/")) {
|
|
21
|
+
const hashValue = url.hash.slice(1);
|
|
22
|
+
const queryIndex = hashValue.indexOf("?");
|
|
23
|
+
const route = queryIndex < 0 ? hashValue : hashValue.slice(0, queryIndex);
|
|
24
|
+
const query = queryIndex < 0 ? "" : hashValue.slice(queryIndex + 1);
|
|
25
|
+
const hashParameters = new URLSearchParams(query);
|
|
26
|
+
applyParameters(hashParameters, parameters);
|
|
27
|
+
url.hash = `${route}?${hashParameters.toString()}`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
applyParameters(url.searchParams, parameters);
|
|
31
|
+
}
|
|
32
|
+
return url.toString();
|
|
33
|
+
};
|
|
34
|
+
const removeAuthorizationParametersFromHash = (url) => {
|
|
35
|
+
const hashValue = url.hash.slice(1);
|
|
36
|
+
const queryIndex = hashValue.indexOf("?");
|
|
37
|
+
if (queryIndex < 0)
|
|
38
|
+
return;
|
|
39
|
+
const route = hashValue.slice(0, queryIndex);
|
|
40
|
+
const parameters = new URLSearchParams(hashValue.slice(queryIndex + 1));
|
|
41
|
+
parameters.delete("code");
|
|
42
|
+
parameters.delete("state");
|
|
43
|
+
parameters.delete("miniappAuthTicket");
|
|
44
|
+
const query = parameters.toString();
|
|
45
|
+
url.hash = query ? `${route}?${query}` : route;
|
|
46
|
+
};
|
|
47
|
+
export const removeAuthorizationParameters = (href) => {
|
|
48
|
+
const url = new URL(href);
|
|
49
|
+
url.searchParams.delete("code");
|
|
50
|
+
url.searchParams.delete("state");
|
|
51
|
+
url.searchParams.delete("miniappAuthTicket");
|
|
52
|
+
removeAuthorizationParametersFromHash(url);
|
|
53
|
+
return url.toString();
|
|
54
|
+
};
|
|
55
|
+
export const buildAuthorizationCallbackUrl = (href) => (removeAuthorizationParameters(href));
|
|
56
|
+
const requiredPathSegment = (value, field) => {
|
|
57
|
+
const normalized = String(value ?? "").trim();
|
|
58
|
+
if (!normalized) {
|
|
59
|
+
throw new PlatformApplicationSdkError("INVALID_ARGUMENT", `${field}不能为空`);
|
|
60
|
+
}
|
|
61
|
+
return encodeURIComponent(normalized);
|
|
62
|
+
};
|
|
63
|
+
export const runtimeTokenExchangeUrl = (appGatewayApiBase, installId) => (`${appGatewayApiBase}/workspace-runtime/apps/${requiredPathSegment(installId, "installId")}/token/exchange`);
|
|
64
|
+
export const runtimeTokenRevokeUrl = (appGatewayApiBase, installId) => (`${appGatewayApiBase}/workspace-runtime/apps/${requiredPathSegment(installId, "installId")}/token/revoke`);
|
|
65
|
+
export const runtimeMethodCallUrl = (appGatewayApiBase, installId, service, method) => (`${appGatewayApiBase}/workspace-runtime/apps/${requiredPathSegment(installId, "installId")}`
|
|
66
|
+
+ `/services/${requiredPathSegment(service, "service")}/methods/${requiredPathSegment(method, "method")}`);
|
|
67
|
+
export const buildPlatformManagementUrl = (managementUrl, route) => {
|
|
68
|
+
const normalizedRoute = String(route ?? "").trim();
|
|
69
|
+
if (!normalizedRoute.startsWith("/")) {
|
|
70
|
+
throw new PlatformApplicationSdkError("INVALID_ARGUMENT", "平台管理路由必须以 / 开头");
|
|
71
|
+
}
|
|
72
|
+
const url = new URL(managementUrl);
|
|
73
|
+
url.hash = normalizedRoute;
|
|
74
|
+
return url.toString();
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=urls.js.map
|
package/dist/urls.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@baijimu/platform-application-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Standard browser SDK for Baijimu Platform Application authorization and Runtime method calls",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc -p tsconfig.json",
|
|
21
|
+
"check": "tsc -p tsconfig.json --noEmit",
|
|
22
|
+
"test": "npm run build && node --test test/*.test.mjs",
|
|
23
|
+
"pack:check": "node scripts/validate-package.mjs"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@baijimu/cmodel": "1.1.3"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"typescript": "^5.9.3"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20.0.0"
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public",
|
|
36
|
+
"registry": "https://registry.npmjs.org/"
|
|
37
|
+
},
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "git+https://gitee.com/zxflimit_admin/baijimu-platform-application-sdk.git"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://docs.baijimu.com/development/bundle-development/platform-application-development/sdk-and-runtime/",
|
|
43
|
+
"license": "Apache-2.0",
|
|
44
|
+
"sideEffects": false
|
|
45
|
+
}
|
|
46
|
+
|