@solar-taro/planets 0.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/earth/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './object-storage.service.js';
2
+ export * from './service.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/planets/src/earth/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { UploadKeys } from '@solar-kit/planets/earth';
2
+ export declare class ObjectStorageService {
3
+ private readonly http;
4
+ /**
5
+ * 目前只支持了 qiniu oss
6
+ * @param filePath
7
+ * @param options
8
+ * @returns
9
+ */
10
+ upload(filePath: string, key: string, options: Pick<UploadKeys, 'host' | 'token'>): import("rxjs").Observable<{
11
+ hash: string;
12
+ key: string;
13
+ }>;
14
+ }
15
+ export declare const oss: () => ObjectStorageService;
@@ -0,0 +1,29 @@
1
+ import { HttpClient, HttpContext } from '@ngify/http';
2
+ import { WX_UPLOAD_FILE_TOKEN } from '@ngify/http-wx';
3
+ import { once, overlay, vibrator } from '@solar-taro/core';
4
+ import { catchError } from 'rxjs';
5
+ export class ObjectStorageService {
6
+ constructor() {
7
+ this.http = new HttpClient();
8
+ }
9
+ /**
10
+ * 目前只支持了 qiniu oss
11
+ * @param filePath
12
+ * @param options
13
+ * @returns
14
+ */
15
+ upload(filePath, key, options) {
16
+ return this.http.post(`https://${options.host}`, { key: key, token: options.token }, {
17
+ context: new HttpContext().set(WX_UPLOAD_FILE_TOKEN, {
18
+ filePath,
19
+ fileName: 'file'
20
+ })
21
+ }).pipe(catchError((error) => {
22
+ vibrator.short();
23
+ overlay.tips('操作失败,状态码:' + error.status || '未知');
24
+ throw error;
25
+ }));
26
+ }
27
+ }
28
+ export const oss = once(() => new ObjectStorageService());
29
+ //# sourceMappingURL=object-storage.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-storage.service.js","sourceRoot":"","sources":["../../../../packages/planets/src/earth/object-storage.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,MAAM,OAAO,oBAAoB;IAAjC;QACmB,SAAI,GAAG,IAAI,UAAU,EAAE,CAAC;IA2B3C,CAAC;IAzBC;;;;;OAKG;IACH,MAAM,CAAC,QAAgB,EAAE,GAAW,EAAE,OAA2C;QAC/E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,WAAW,OAAO,CAAC,IAAI,EAAE,EACzB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAClC;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE;gBACnD,QAAQ;gBACR,QAAQ,EAAE,MAAM;aACjB,CAAC;SACH,CACF,CAAC,IAAI,CACJ,UAAU,CAAC,CAAC,KAA4B,EAAE,EAAE;YAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;YAEjD,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { HttpClient } from '@ngify/http';
2
+ import { Category, Channel, Origin, UploadKeys } from '@solar-kit/planets/earth';
3
+ import { Result } from '@solar-kit/planets/sun';
4
+ export interface EarthConfig {
5
+ /** earth service host */
6
+ url: string;
7
+ }
8
+ export declare const setupEarth: (config: EarthConfig) => void, earthService: () => EarthService;
9
+ export declare class EarthService {
10
+ readonly config: EarthConfig;
11
+ readonly http: HttpClient;
12
+ constructor(config: EarthConfig);
13
+ /**
14
+ * 发送短信验证码
15
+ * @param cellphone
16
+ * @deprecated 使用小程序来获取手机号
17
+ */
18
+ sendSmsCode(cellphone: string | number): import("rxjs").Observable<Result<null>>;
19
+ /**
20
+ * 获得信道
21
+ * @param origin
22
+ */
23
+ channels(origin: Origin): import("rxjs").Observable<Result<Channel[]>>;
24
+ /**
25
+ * 获得品类
26
+ * @param origin
27
+ */
28
+ categories(origin: Origin): import("rxjs").Observable<Result<Category[]>>;
29
+ /**
30
+ * 加载单位
31
+ */
32
+ unitCategories(): import("rxjs").Observable<Result<Category[]>>;
33
+ /**
34
+ * 加载单位
35
+ */
36
+ unitChannels(): import("rxjs").Observable<Result<Channel[]>>;
37
+ /**
38
+ * 获取 qiniu token
39
+ * @param bucket
40
+ * @deprecated {@link mediaUploadKeys}
41
+ */
42
+ qiniuToken(bucket: 0 | 1): import("rxjs").Observable<Result<string>>;
43
+ /**
44
+ * 获取上传头像的文件名(key)
45
+ * @deprecated {@link avatarUploadKey}
46
+ */
47
+ avatarKey(): import("rxjs").Observable<Result<string>>;
48
+ avatarUploadKey(): import("rxjs").Observable<Result<UploadKeys>>;
49
+ mediaUploadKeys(keySize?: number): import("rxjs").Observable<Result<UploadKeys>>;
50
+ }
@@ -0,0 +1,82 @@
1
+ import { HttpClient, HttpContext, withInterceptors } from '@ngify/http';
2
+ import { defineService, overlay } from '@solar-taro/core';
3
+ import { CACHEABLE_TOKEN, useApiInterceptor, useCacheInterceptor } from '@solar-taro/http';
4
+ import { tap } from 'rxjs';
5
+ import { useAuthInterceptor } from '../mercury/index.js';
6
+ export const [setupEarth, earthService] = defineService((config) => new EarthService(config));
7
+ export class EarthService {
8
+ constructor(config) {
9
+ this.config = config;
10
+ this.http = new HttpClient(withInterceptors([
11
+ useApiInterceptor(),
12
+ useCacheInterceptor(),
13
+ useAuthInterceptor(),
14
+ ]));
15
+ }
16
+ /**
17
+ * 发送短信验证码
18
+ * @param cellphone
19
+ * @deprecated 使用小程序来获取手机号
20
+ */
21
+ sendSmsCode(cellphone) {
22
+ return this.http.get(`${this.config.url}/sms/code/${cellphone}`).pipe(tap(({ code }) => code === 0 && overlay.success('发送成功')));
23
+ }
24
+ /**
25
+ * 获得信道
26
+ * @param origin
27
+ */
28
+ channels(origin) {
29
+ return this.http.get(`${this.config.url}/channel/${origin}`, {
30
+ context: new HttpContext().set(CACHEABLE_TOKEN, true)
31
+ });
32
+ }
33
+ /**
34
+ * 获得品类
35
+ * @param origin
36
+ */
37
+ categories(origin) {
38
+ return this.http.get(`${this.config.url}/category/${origin}`, {
39
+ context: new HttpContext().set(CACHEABLE_TOKEN, true)
40
+ });
41
+ }
42
+ /**
43
+ * 加载单位
44
+ */
45
+ unitCategories() {
46
+ return this.categories(13 /* Origin.Unit */);
47
+ }
48
+ /**
49
+ * 加载单位
50
+ */
51
+ unitChannels() {
52
+ return this.channels(13 /* Origin.Unit */);
53
+ }
54
+ /**
55
+ * 获取 qiniu token
56
+ * @param bucket
57
+ * @deprecated {@link mediaUploadKeys}
58
+ */
59
+ qiniuToken(bucket) {
60
+ const url = {
61
+ [0]: `${this.config.url}/res/upload-token`,
62
+ [1]: `${this.config.url}/media/upload-token`,
63
+ }[bucket];
64
+ return this.http.get(url);
65
+ }
66
+ /**
67
+ * 获取上传头像的文件名(key)
68
+ * @deprecated {@link avatarUploadKey}
69
+ */
70
+ avatarKey() {
71
+ return this.http.get(`${this.config.url}/avatar/upload-key`);
72
+ }
73
+ avatarUploadKey() {
74
+ return this.http.get(`${this.config.url}/qiniu/avatar/upload-key`);
75
+ }
76
+ mediaUploadKeys(keySize = 1) {
77
+ return this.http.get(`${this.config.url}/qiniu/media/upload-keys`, {
78
+ params: { keySize }
79
+ });
80
+ }
81
+ }
82
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../packages/planets/src/earth/service.ts"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ declare const _default: undefined;
2
+ export default _default;
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export default void 0;
2
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/planets/src/index.ts"],"names":[],"mappings":"AAAA,eAAe,KAAK,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { HttpInterceptorFn } from '@ngify/http';
2
+ /** 负责基础业务接口的认证 */
3
+ export declare function useAuthInterceptor(): HttpInterceptorFn;
@@ -0,0 +1,46 @@
1
+ import { HttpStatusCode } from '@ngify/http';
2
+ import { catchError, finalize, share, switchMap } from 'rxjs';
3
+ import { mercuryService } from './service.js';
4
+ /** 负责基础业务接口的认证 */
5
+ export function useAuthInterceptor() {
6
+ /** 令牌刷新器 */
7
+ let refresher = null;
8
+ /**
9
+ * 获取访问令牌
10
+ */
11
+ function updateToken() {
12
+ refresher = mercuryService().auth().pipe(finalize(() => refresher = null), share());
13
+ }
14
+ /**
15
+ * 等待令牌后再发送请求
16
+ * @param request
17
+ * @param next
18
+ */
19
+ function waitToken(request, next) {
20
+ return refresher.pipe(switchMap(({ data }) => (next(request.clone({
21
+ headers: request.headers.set('Authorization', 'Bearer ' + data.token.access_token)
22
+ })))));
23
+ }
24
+ return (request, next) => {
25
+ const tokens = mercuryService().tokens;
26
+ if (!(tokens === null || tokens === void 0 ? void 0 : tokens.accessToken) && !refresher) {
27
+ updateToken();
28
+ }
29
+ if (refresher) {
30
+ return waitToken(request, next);
31
+ }
32
+ request = request.clone({
33
+ headers: request.headers.set('Authorization', 'Bearer ' + tokens.accessToken)
34
+ });
35
+ return next(request).pipe(catchError((error) => {
36
+ if (error.status === HttpStatusCode.Unauthorized) {
37
+ if (!refresher) {
38
+ updateToken();
39
+ }
40
+ return waitToken(request, next);
41
+ }
42
+ throw error;
43
+ }));
44
+ };
45
+ }
46
+ //# sourceMappingURL=auth.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.interceptor.js","sourceRoot":"","sources":["../../../../packages/planets/src/mercury/auth.interceptor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAc,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,kBAAkB;AAClB,MAAM,UAAU,kBAAkB;IAChC,YAAY;IACZ,IAAI,SAAS,GAAsC,IAAI,CAAC;IAExD;;OAEG;IACH,SAAS,WAAW;QAClB,SAAS,GAAG,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CACtC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,EAChC,KAAK,EAAE,CACR,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,SAAS,SAAS,CAAC,OAA6B,EAAE,IAAmB;QACnE,OAAO,SAAU,CAAC,IAAI,CACpB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;SACnF,CAAC,CAAC,CACJ,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,OAA6B,EAAE,IAAmB,EAAkC,EAAE;QAC5F,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,MAAM,CAAC;QAEvC,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,WAAW,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;SAC9E,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACvB,UAAU,CAAC,CAAC,KAA4B,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,YAAY,EAAE,CAAC;gBACjD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;gBAChB,CAAC;gBAED,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './auth.interceptor.js';
2
+ export * from './service.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/planets/src/mercury/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 用户认证 */
2
+ export interface WxAuth {
3
+ openId: string;
4
+ token: {
5
+ access_token: string;
6
+ expires_in: number;
7
+ token_type: string;
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../packages/planets/src/mercury/model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { HttpClient } from '@ngify/http';
2
+ import { Fan } from '@solar-kit/planets/earth';
3
+ import { AuthTokens, Result } from '@solar-kit/planets/sun';
4
+ import { Observable } from 'rxjs';
5
+ import { WxAuth } from './model';
6
+ export interface MercuryConfig {
7
+ /** mercury service host */
8
+ url: string;
9
+ app: string;
10
+ fan: Fan;
11
+ }
12
+ export declare const setupMercury: (config: MercuryConfig) => void, mercuryService: () => MercuryService;
13
+ export declare class MercuryService {
14
+ protected readonly config: MercuryConfig;
15
+ protected http: HttpClient;
16
+ tokens: AuthTokens;
17
+ constructor(config: MercuryConfig);
18
+ auth(relogin?: boolean): Observable<Result<WxAuth>>;
19
+ }
@@ -0,0 +1,43 @@
1
+ import { HttpClient, HttpStatusCode, withInterceptors } from '@ngify/http';
2
+ import { defineService } from '@solar-taro/core';
3
+ import { useApiInterceptor } from '@solar-taro/http';
4
+ import { checkSession, getStorageSync, getUserInfo, login, setStorage } from '@tarojs/taro';
5
+ import { catchError, defer, from, map, switchMap, tap } from 'rxjs';
6
+ const TOKEN_STORAGE_KEY = 'auth-token';
7
+ export const [setupMercury, mercuryService] = defineService((config) => new MercuryService(config));
8
+ export class MercuryService {
9
+ constructor(config) {
10
+ this.config = config;
11
+ this.http = new HttpClient(withInterceptors([
12
+ useApiInterceptor()
13
+ ]));
14
+ this.tokens = getStorageSync(TOKEN_STORAGE_KEY) || {};
15
+ }
16
+ auth(relogin = false) {
17
+ return defer(() => relogin
18
+ ? login()
19
+ : from(checkSession()).pipe(map(() => ({ code: null })), catchError(() => login()))).pipe(switchMap(({ code }) => from(getUserInfo()).pipe(map(({ encryptedData, iv }) => ({ code, encryptedData, iv })))), switchMap(({ code, encryptedData, iv }) => {
20
+ return this.http.post(`${this.config.url}/oaa/wx/auth`, null, {
21
+ headers: {
22
+ ["X-WX-Code" /* WxHeader.Code */]: code || '',
23
+ ["X-WX-Encrypted-Data" /* WxHeader.EncryptedData */]: encryptedData,
24
+ ["X-WX-IV" /* WxHeader.Iv */]: iv,
25
+ ["X-WX-APP" /* WxHeader.App */]: this.config.app,
26
+ ["X-WX-OPEN-ID" /* WxHeader.OpenId */]: this.config.fan.openId || '',
27
+ }
28
+ });
29
+ }), tap(({ data }) => {
30
+ this.tokens = { accessToken: data.token.access_token };
31
+ setStorage({
32
+ key: TOKEN_STORAGE_KEY,
33
+ data: this.tokens
34
+ });
35
+ }), catchError((error) => {
36
+ if (error.status === HttpStatusCode.Unauthorized) {
37
+ return this.auth(true);
38
+ }
39
+ throw error;
40
+ }));
41
+ }
42
+ }
43
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../packages/planets/src/mercury/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,26 @@
1
1
  {
2
2
  "name": "@solar-taro/planets",
3
- "version": "0.0.0",
3
+ "version": "1.0.1",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "dependencies": {
9
9
  "tslib": "^2.3.0"
10
- }
10
+ },
11
+ "exports": {
12
+ "./package.json": "./package.json",
13
+ ".": {
14
+ "types": "./index.d.ts",
15
+ "import": "./index.js"
16
+ },
17
+ "./earth": "./earth/index.js",
18
+ "./earth/index": "./earth/index.js",
19
+ "./mercury": "./mercury/index.js",
20
+ "./mercury/index": "./mercury/index.js"
21
+ },
22
+ "types": "./index.d.ts",
23
+ "module": "./index.js",
24
+ "type": "module",
25
+ "main": "./index.js"
11
26
  }
package/CHANGELOG.md DELETED
@@ -1,3 +0,0 @@
1
- ## 1.0.1 (2025-01-22)
2
-
3
- This was a version bump only for planets to align it with other projects, there were no code changes.
package/eslint.config.cjs DELETED
@@ -1,22 +0,0 @@
1
- const baseConfig = require('../../eslint.config.cjs');
2
-
3
- module.exports = [
4
- ...baseConfig,
5
- {
6
- files: ['**/*.json'],
7
- rules: {
8
- '@nx/dependency-checks': [
9
- 'error',
10
- {
11
- ignoredFiles: [
12
- '{projectRoot}/eslint.config.{js,cjs,mjs}',
13
- '{projectRoot}/vite.config.{js,ts,mjs,mts}',
14
- ],
15
- },
16
- ],
17
- },
18
- languageOptions: {
19
- parser: require('jsonc-eslint-parser'),
20
- },
21
- },
22
- ];
package/project.json DELETED
@@ -1,47 +0,0 @@
1
- {
2
- "name": "planets",
3
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "packages/planets/src",
5
- "projectType": "library",
6
- "tags": [],
7
- "targets": {
8
- "build": {
9
- "executor": "@nx/js:tsc",
10
- "outputs": [
11
- "{options.outputPath}"
12
- ],
13
- "options": {
14
- "outputPath": "dist/planets",
15
- "main": "packages/planets/src/index.ts",
16
- "tsConfig": "packages/planets/tsconfig.lib.json",
17
- "assets": [
18
- "packages/planets/*.md"
19
- ],
20
- "additionalEntryPoints": [
21
- "packages/planets/src/earth/index.ts",
22
- "packages/planets/src/mercury/index.ts"
23
- ],
24
- "generateExportsField": true
25
- }
26
- },
27
- "postbuild": {
28
- "executor": "nx:run-commands",
29
- "dependsOn": [
30
- "build"
31
- ],
32
- "options": {
33
- "commands": [
34
- "node scripts/postbuild.js planets"
35
- ]
36
- }
37
- },
38
- "release:dev": {
39
- "executor": "nx:run-commands",
40
- "options": {
41
- "commands": [
42
- "yalc publish dist/planets"
43
- ]
44
- }
45
- }
46
- }
47
- }
@@ -1,37 +0,0 @@
1
- import { HttpClient, HttpContext, HttpResponse } from '@ngify/http';
2
- import { WX_UPLOAD_FILE_TOKEN } from '@ngify/http-wx';
3
- import { UploadKeys } from '@solar-kit/planets/earth';
4
- import { once, overlay, vibrator } from '@solar-taro/core';
5
- import { catchError } from 'rxjs';
6
-
7
- export class ObjectStorageService {
8
- private readonly http = new HttpClient();
9
-
10
- /**
11
- * 目前只支持了 qiniu oss
12
- * @param filePath
13
- * @param options
14
- * @returns
15
- */
16
- upload(filePath: string, key: string, options: Pick<UploadKeys, 'host' | 'token'>) {
17
- return this.http.post<{ hash: string, key: string }>(
18
- `https://${options.host}`,
19
- { key: key, token: options.token },
20
- {
21
- context: new HttpContext().set(WX_UPLOAD_FILE_TOKEN, {
22
- filePath,
23
- fileName: 'file'
24
- })
25
- }
26
- ).pipe(
27
- catchError((error: HttpResponse<unknown>) => {
28
- vibrator.short();
29
- overlay.tips('操作失败,状态码:' + error.status || '未知');
30
-
31
- throw error;
32
- })
33
- );
34
- }
35
- }
36
-
37
- export const oss = once(() => new ObjectStorageService());
@@ -1,105 +0,0 @@
1
- import { HttpClient, HttpContext, withInterceptors } from '@ngify/http';
2
- import { Category, Channel, Origin, UploadKeys } from '@solar-kit/planets/earth';
3
- import { Result } from '@solar-kit/planets/sun';
4
- import { defineService, overlay } from '@solar-taro/core';
5
- import { CACHEABLE_TOKEN, useApiInterceptor, useCacheInterceptor } from '@solar-taro/http';
6
- import { tap } from 'rxjs';
7
- import { useAuthInterceptor } from '../mercury';
8
-
9
- export interface EarthConfig {
10
- /** earth service host */
11
- url: string;
12
- }
13
-
14
- export const [setupEarth, earthService] = defineService((config: EarthConfig) => new EarthService(config));
15
-
16
- export class EarthService {
17
- readonly http = new HttpClient(
18
- withInterceptors([
19
- useApiInterceptor(),
20
- useCacheInterceptor(),
21
- useAuthInterceptor(),
22
- ])
23
- );
24
-
25
- constructor(
26
- public readonly config: EarthConfig
27
- ) { }
28
-
29
- /**
30
- * 发送短信验证码
31
- * @param cellphone
32
- * @deprecated 使用小程序来获取手机号
33
- */
34
- sendSmsCode(cellphone: string | number) {
35
- return this.http.get<Result>(`${this.config.url}/sms/code/${cellphone}`).pipe(
36
- tap(({ code }) => code === 0 && overlay.success('发送成功'))
37
- );
38
- }
39
-
40
- /**
41
- * 获得信道
42
- * @param origin
43
- */
44
- channels(origin: Origin) {
45
- return this.http.get<Result<Channel[]>>(`${this.config.url}/channel/${origin}`, {
46
- context: new HttpContext().set(CACHEABLE_TOKEN, true)
47
- });
48
- }
49
-
50
- /**
51
- * 获得品类
52
- * @param origin
53
- */
54
- categories(origin: Origin) {
55
- return this.http.get<Result<Category[]>>(`${this.config.url}/category/${origin}`, {
56
- context: new HttpContext().set(CACHEABLE_TOKEN, true)
57
- });
58
- }
59
-
60
- /**
61
- * 加载单位
62
- */
63
- unitCategories() {
64
- return this.categories(Origin.Unit);
65
- }
66
-
67
- /**
68
- * 加载单位
69
- */
70
- unitChannels() {
71
- return this.channels(Origin.Unit);
72
- }
73
-
74
- /**
75
- * 获取 qiniu token
76
- * @param bucket
77
- * @deprecated {@link mediaUploadKeys}
78
- */
79
- qiniuToken(bucket: 0 | 1) {
80
- const url = {
81
- [0]: `${this.config.url}/res/upload-token`,
82
- [1]: `${this.config.url}/media/upload-token`,
83
- }[bucket];
84
-
85
- return this.http.get<Result<string>>(url);
86
- }
87
-
88
- /**
89
- * 获取上传头像的文件名(key)
90
- * @deprecated {@link avatarUploadKey}
91
- */
92
- avatarKey() {
93
- return this.http.get<Result<string>>(`${this.config.url}/avatar/upload-key`);
94
- }
95
-
96
- avatarUploadKey() {
97
- return this.http.get<Result<UploadKeys>>(`${this.config.url}/qiniu/avatar/upload-key`);
98
- }
99
-
100
- mediaUploadKeys(keySize = 1) {
101
- return this.http.get<Result<UploadKeys>>(`${this.config.url}/qiniu/media/upload-keys`, {
102
- params: { keySize }
103
- });
104
- }
105
- }
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- export default void 0;
@@ -1,67 +0,0 @@
1
- import type { HttpEvent, HttpHandlerFn, HttpInterceptorFn, HttpRequest, HttpResponse } from '@ngify/http';
2
- import { HttpStatusCode } from '@ngify/http';
3
- import { Result } from '@solar-kit/planets/sun';
4
- import { catchError, finalize, Observable, share, switchMap } from 'rxjs';
5
- import { WxAuth } from './model';
6
- import { mercuryService } from './service';
7
-
8
- /** 负责基础业务接口的认证 */
9
- export function useAuthInterceptor(): HttpInterceptorFn {
10
- /** 令牌刷新器 */
11
- let refresher: Observable<Result<WxAuth>> | null = null;
12
-
13
- /**
14
- * 获取访问令牌
15
- */
16
- function updateToken() {
17
- refresher = mercuryService().auth().pipe(
18
- finalize(() => refresher = null),
19
- share(),
20
- );
21
- }
22
-
23
- /**
24
- * 等待令牌后再发送请求
25
- * @param request
26
- * @param next
27
- */
28
- function waitToken(request: HttpRequest<unknown>, next: HttpHandlerFn) {
29
- return refresher!.pipe(
30
- switchMap(({ data }) => (
31
- next(request.clone({
32
- headers: request.headers.set('Authorization', 'Bearer ' + data.token.access_token)
33
- }))
34
- ))
35
- );
36
- }
37
-
38
- return (request: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> => {
39
- const tokens = mercuryService().tokens;
40
-
41
- if (!tokens?.accessToken && !refresher) {
42
- updateToken();
43
- }
44
-
45
- if (refresher) {
46
- return waitToken(request, next);
47
- }
48
-
49
- request = request.clone({
50
- headers: request.headers.set('Authorization', 'Bearer ' + tokens.accessToken)
51
- });
52
-
53
- return next(request).pipe(
54
- catchError((error: HttpResponse<unknown>) => {
55
- if (error.status === HttpStatusCode.Unauthorized) {
56
- if (!refresher) {
57
- updateToken();
58
- }
59
-
60
- return waitToken(request, next);
61
- }
62
-
63
- throw error;
64
- })
65
- );
66
- }
67
- }
@@ -1,9 +0,0 @@
1
- /** 用户认证 */
2
- export interface WxAuth {
3
- openId: string;
4
- token: {
5
- access_token: string;
6
- expires_in: number;
7
- token_type: string;
8
- }
9
- }
@@ -1,75 +0,0 @@
1
- import { HttpClient, HttpResponse, HttpStatusCode, withInterceptors } from '@ngify/http';
2
- import { Fan } from '@solar-kit/planets/earth';
3
- import { AuthTokens, Result } from '@solar-kit/planets/sun';
4
- import { defineService } from '@solar-taro/core';
5
- import { useApiInterceptor, WxHeader } from '@solar-taro/http';
6
- import { checkSession, getStorageSync, getUserInfo, login, setStorage } from '@tarojs/taro';
7
- import { catchError, defer, from, map, Observable, switchMap, tap } from 'rxjs';
8
- import { WxAuth } from './model';
9
-
10
- export interface MercuryConfig {
11
- /** mercury service host */
12
- url: string;
13
- app: string;
14
- fan: Fan;
15
- }
16
-
17
- const TOKEN_STORAGE_KEY = 'auth-token';
18
-
19
- export const [setupMercury, mercuryService] = defineService((config: MercuryConfig) => new MercuryService(config));
20
-
21
- export class MercuryService {
22
- protected http = new HttpClient(
23
- withInterceptors([
24
- useApiInterceptor()
25
- ])
26
- );
27
-
28
- tokens: AuthTokens = getStorageSync<AuthTokens>(TOKEN_STORAGE_KEY) || {};
29
-
30
- constructor(
31
- protected readonly config: MercuryConfig
32
- ) { }
33
-
34
- auth(relogin = false): Observable<Result<WxAuth>> {
35
- return defer(() =>
36
- relogin
37
- ? login()
38
- : from(checkSession()).pipe(
39
- map(() => ({ code: null })),
40
- catchError(() => login()),
41
- )
42
- ).pipe(
43
- switchMap(({ code }) =>
44
- from(getUserInfo()).pipe(
45
- map(({ encryptedData, iv }) => ({ code, encryptedData, iv }))
46
- )
47
- ),
48
- switchMap(({ code, encryptedData, iv }) => {
49
- return this.http.post<Result<WxAuth>>(`${this.config.url}/oaa/wx/auth`, null, {
50
- headers: {
51
- [WxHeader.Code]: code || '',
52
- [WxHeader.EncryptedData]: encryptedData,
53
- [WxHeader.Iv]: iv,
54
- [WxHeader.App]: this.config.app,
55
- [WxHeader.OpenId]: this.config.fan.openId || '',
56
- }
57
- });
58
- }),
59
- tap(({ data }) => {
60
- this.tokens = { accessToken: data.token.access_token };
61
- setStorage({
62
- key: TOKEN_STORAGE_KEY,
63
- data: this.tokens
64
- });
65
- }),
66
- catchError((error: HttpResponse<unknown>) => {
67
- if (error.status === HttpStatusCode.Unauthorized) {
68
- return this.auth(true);
69
- }
70
- throw error;
71
- })
72
- );
73
- }
74
-
75
- }
package/tsconfig.json DELETED
@@ -1,21 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "forceConsistentCasingInFileNames": true,
5
- "strict": true,
6
- "noImplicitOverride": true,
7
- "noImplicitReturns": true,
8
- "noFallthroughCasesInSwitch": true,
9
- "noPropertyAccessFromIndexSignature": true
10
- },
11
- "files": [],
12
- "include": [],
13
- "references": [
14
- {
15
- "path": "./tsconfig.lib.json"
16
- },
17
- {
18
- "path": "./tsconfig.spec.json"
19
- }
20
- ]
21
- }
package/tsconfig.lib.json DELETED
@@ -1,24 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../../dist/out-tsc",
5
- "declaration": true
6
- },
7
- "include": [
8
- "src/**/*.ts"
9
- ],
10
- "exclude": [
11
- "vite.config.ts",
12
- "vite.config.mts",
13
- "vitest.config.ts",
14
- "vitest.config.mts",
15
- "src/**/*.test.ts",
16
- "src/**/*.spec.ts",
17
- "src/**/*.test.tsx",
18
- "src/**/*.spec.tsx",
19
- "src/**/*.test.js",
20
- "src/**/*.spec.js",
21
- "src/**/*.test.jsx",
22
- "src/**/*.spec.jsx"
23
- ]
24
- }
@@ -1,28 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../../dist/out-tsc",
5
- "types": [
6
- "vitest/globals",
7
- "vitest/importMeta",
8
- "vite/client",
9
- "node",
10
- "vitest"
11
- ]
12
- },
13
- "include": [
14
- "vite.config.ts",
15
- "vite.config.mts",
16
- "vitest.config.ts",
17
- "vitest.config.mts",
18
- "src/**/*.test.ts",
19
- "src/**/*.spec.ts",
20
- "src/**/*.test.tsx",
21
- "src/**/*.spec.tsx",
22
- "src/**/*.test.js",
23
- "src/**/*.spec.js",
24
- "src/**/*.test.jsx",
25
- "src/**/*.spec.jsx",
26
- "src/**/*.d.ts"
27
- ]
28
- }
package/typedoc.json DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "$schema": "https://typedoc.org/schema.json",
3
- "entryPoints": [
4
- "src/earth/index.ts",
5
- "src/mercury/index.ts"
6
- ]
7
- }
package/vite.config.ts DELETED
@@ -1,24 +0,0 @@
1
- import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
2
- import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
3
- import { defineConfig } from 'vite';
4
-
5
- export default defineConfig({
6
- root: __dirname,
7
- cacheDir: '../../node_modules/.vite/planets',
8
- plugins: [nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],
9
- // Uncomment this if you are using workers.
10
- // worker: {
11
- // plugins: [ nxViteTsPaths() ],
12
- // },
13
- test: {
14
- watch: false,
15
- globals: true,
16
- environment: 'node',
17
- include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
18
- reporters: ['default'],
19
- coverage: {
20
- reportsDirectory: '../../coverage/planets',
21
- provider: 'v8',
22
- },
23
- },
24
- });
File without changes
File without changes