fmode-ng 0.0.39 → 0.0.41

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.
Files changed (100) hide show
  1. package/esm2022/fmode-ng.mjs +5 -10
  2. package/esm2022/lib/aigc/agent/agent.prompt.mjs +122 -10
  3. package/esm2022/lib/aigc/agent/index.mjs +2 -10
  4. package/esm2022/lib/aigc/avatar/avatar.module.mjs +45 -10
  5. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +2 -10
  6. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +315 -10
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +3 -10
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +57 -10
  9. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +97 -10
  10. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +104 -10
  11. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +111 -10
  12. package/esm2022/lib/aigc/avatar/index.mjs +8 -10
  13. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +2 -10
  14. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +166 -8
  15. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +36 -10
  16. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +2 -10
  17. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +141 -8
  18. package/esm2022/lib/aigc/chat/chat-list/index.mjs +2 -10
  19. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +40 -10
  20. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +2 -10
  21. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +92 -10
  22. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +2 -10
  23. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +2 -10
  24. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +207 -8
  25. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +236 -10
  26. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +137 -10
  27. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +69 -10
  28. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +2 -10
  29. package/esm2022/lib/aigc/chat/index.mjs +8 -10
  30. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +82 -10
  31. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +269 -8
  32. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +51 -10
  33. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +24 -10
  34. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +94 -10
  35. package/esm2022/lib/aigc/index.mjs +13 -10
  36. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +21 -10
  37. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +736 -8
  38. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +181 -8
  39. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +7 -10
  40. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +194 -9
  41. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +27 -10
  42. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +27 -10
  43. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +68 -10
  44. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +229 -8
  45. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +2 -10
  46. package/esm2022/lib/aigc/voice/audio.player.mjs +52 -10
  47. package/esm2022/lib/aigc/voice/class-asr.mjs +79 -8
  48. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +501 -8
  49. package/esm2022/lib/aigc/voice/index.mjs +3 -10
  50. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +38 -10
  51. package/esm2022/lib/aigc/voice/lib/resample.mjs +34 -10
  52. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +233 -8
  53. package/esm2022/lib/aigc/voice/tts/index.mjs +2 -10
  54. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +190 -10
  55. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +33 -10
  56. package/esm2022/lib/map/index.mjs +4 -10
  57. package/esm2022/lib/map/map.module.mjs +61 -10
  58. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +110 -10
  59. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +98 -8
  60. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +100 -8
  61. package/esm2022/lib/nova-cloud/index.mjs +2 -10
  62. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +148 -10
  63. package/esm2022/lib/platform/cross.service.mjs +63 -10
  64. package/esm2022/lib/platform/index.mjs +2 -10
  65. package/esm2022/lib/social/index.mjs +2 -10
  66. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +236 -8
  67. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +59 -10
  68. package/esm2022/lib/storage/index.mjs +5 -10
  69. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +130 -8
  70. package/esm2022/lib/storage/service-upload/index.mjs +2 -10
  71. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +462 -8
  72. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +28 -10
  73. package/esm2022/lib/storage/storage.module.mjs +41 -10
  74. package/esm2022/lib/user/account/account.service.mjs +221 -10
  75. package/esm2022/lib/user/captcha/captcha.component.mjs +135 -10
  76. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +62 -10
  77. package/esm2022/lib/user/index.mjs +17 -10
  78. package/esm2022/lib/user/login/auth.guard.mjs +28 -10
  79. package/esm2022/lib/user/login/auth.service.mjs +373 -8
  80. package/esm2022/lib/user/login/login.component.mjs +913 -10
  81. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +273 -10
  82. package/esm2022/lib/user/profile/auth-profile.guard.mjs +27 -10
  83. package/esm2022/lib/user/profile/auth-profile.service.mjs +122 -10
  84. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +115 -10
  85. package/esm2022/lib/user/profile/profile.module.mjs +57 -10
  86. package/esm2022/lib/user/staff/index.mjs +4 -10
  87. package/esm2022/lib/user/staff/staff.guard.mjs +26 -10
  88. package/esm2022/lib/user/staff/staff.module.mjs +18 -10
  89. package/esm2022/lib/user/staff/staff.service.mjs +85 -10
  90. package/esm2022/lib/user/user-name.pipe.mjs +29 -10
  91. package/esm2022/lib/user/user.module.mjs +106 -10
  92. package/esm2022/lib/video/fm-video/fm-video.component.mjs +67 -10
  93. package/esm2022/lib/video/index.mjs +2 -10
  94. package/esm2022/public-api.mjs +13 -10
  95. package/fesm2022/fmode-ng.mjs +8895 -7
  96. package/fesm2022/fmode-ng.mjs.map +1 -1
  97. package/lib/user/login/auth.service.d.ts +18 -3
  98. package/lib/user/modal-user-login/modal-user-login.component.d.ts +4 -2
  99. package/package.json +1 -1
  100. package/LICENSE.md +0 -8
@@ -1,10 +1,2 @@
1
-
2
- /**
3
- * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
- * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
- * 保留所有权利 All Rights Reserved.
6
- * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/social/index.mjs
7
- */
8
- export*from"./wechat/wechat-jssdk.service";
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zb2NpYWwvaW5kZXgubWpz`
10
-
1
+ export * from "./wechat/wechat-jssdk.service";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3NvY2lhbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vd2VjaGF0L3dlY2hhdC1qc3Nkay5zZXJ2aWNlXCIiXX0=
@@ -1,10 +1,238 @@
1
-
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+ import { AuthService } from '../../user/login/auth.service';
4
+ import Parse from "parse";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ import * as i2 from "../../user/login/auth.service";
8
+ // 微信JSSDK官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
9
+ export class WechatJssdkService {
10
+ constructor(http, authServ) {
11
+ this.http = http;
12
+ this.authServ = authServ;
13
+ this.isInit = false;
14
+ this.isWechat = false; // 服务初始化即判断是否微信浏览器
15
+ this.wechatAccountId = localStorage.getItem("WECHAT_APP_ID") || "wxb4193c93ae9aa696"; // 微信公众号ID
16
+ // 检测微信环境
17
+ let ua = navigator.userAgent.toLowerCase();
18
+ let isWechat = ua.indexOf('micromessenger') !== -1;
19
+ this.isWechat = isWechat;
20
+ // 初始化帐套
21
+ this.company = this.authServ.company || localStorage.getItem("company");
22
+ }
2
23
  /**
3
- * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
- * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
- * 保留所有权利 All Rights Reserved.
6
- * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/social/wechat/wechat-jssdk.service.mjs
24
+ * 配置当前页面分享参数
7
25
  */
8
- import{HttpClient}from"@angular/common/http";import{Injectable}from"@angular/core";import{AuthService}from"../../user/login/auth.service";import Parse from"parse";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";import*as i2 from"../../user/login/auth.service";export class WechatJssdkService{constructor(e,t){this.http=e,this.authServ=t,this.isInit=!1,this.isWechat=!1,this.wechatAccountId="wxb4193c93ae9aa696";let i=-1!==navigator.userAgent.toLowerCase().indexOf("micromessenger");this.isWechat=i,this.company=this.authServ.company||localStorage.getItem("company")}async setCurrentPageShareInfo(e={title:"飞码AI",desc:"解放创意引领未来|国际前沿的AIGC平台",link:location.href,type:"link",imgUrl:"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png",success:()=>{console.log("分享成功")},error:()=>{console.log("分享失败")},cancel:()=>{console.log("取消分享")}}){const t=await this.getWXSignPackageInWechat();wx.config({debug:!1,appId:t.appid,timestamp:t.timestamp,nonceStr:t.nonceStr,signature:t.signature,jsApiList:["chooseWXPay","onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareQZone","updateAppMessageShareData","updateTimelineShareData"]}),"link"==e?.type&&(e.link=this.getInviteUrl(e.link)),wx.ready((()=>{wx.updateAppMessageShareData(e),wx.updateTimelineShareData(e)})),wx.error((()=>{}))}getInviteUrl(e){let t="?";t=e?.indexOf("?")>-1?"&":"?";let i=Parse.User?.current()?.id;if(-1==e?.indexOf("invite="+i)){if(!i)return e;e+=t+"invite="+i}return e}getWXSignPackageInWechat(){let e={company:this.company,href:encodeURIComponent(location.href)};return new Promise((t=>{this.http.post("https://server.fmode.cn/api/wechat/getconfig",e).subscribe((e=>{let i=e.data;t(i)}))}))}async initUserOpenid(){await this.init();let e=this.getQueryStringByName("code"),t=localStorage.getItem("openid");if(!t){if(!Parse.User.current())return;if(t=Parse?.User?.current()?.get("wechat")?.[this.wechatAccountId]?.openid,this.isWechat&&!t){let t=window.location.pathname;e?await this.getwechat(e,t):this.authWechat(t)}else this.openid=t}}authWechat(e="/account/billing"){if(!localStorage.getItem("openid")){let t="https://ai.fmode.cn"+e;return t=encodeURIComponent(t),void(window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+this.wechatAccountId+"&redirect_uri="+t+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect")}}getQueryStringByName(e){let t=location.search.match(new RegExp("[?&]"+e+"=([^&]+)","i"));return null==t||t.length<1?"":t[1]}async getwechat(e,t="/account/billing"){return new Promise((async(i,a)=>{this.http.post("https://server.fmode.cn/api/wechat/get_wx",{company:this.company,code:e}).subscribe((async e=>{if(console.log(e),e&&200==e.code&&e.data.openid){let t=e.data.openid;localStorage.setItem("openid",t),localStorage.removeItem("code");let a={};a[this.wechatAccountId]={openid:t},Parse.User.current().set("wechat",a),await Parse.User.current().save(),i(!0)}}),(async e=>{console.log("Error updating items",e),this.authWechat(t),a(!1)}))}))}init(){return new Promise((e=>{this.isWechat||e(!1),this.isInit&&e(!0),wx&&e(!0),this.loadScript("https://res.wx.qq.com/open/js/jweixin-1.6.0.js",(()=>{this.isInit=!0,this.wx=wx,e(!0)}),(()=>{e(!1)}))}))}loadScript(e,t,i){var a=document.createElement("script");a.src=e,a.onload=()=>{t&&t()},a.onerror=()=>{i&&i()},document.body.appendChild(a)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:WechatJssdkService,deps:[{token:i1.HttpClient},{token:i2.AuthService}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:WechatJssdkService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:WechatJssdkService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.HttpClient},{type:i2.AuthService}]});
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zb2NpYWwvd2VjaGF0L3dlY2hhdC1qc3Nkay5zZXJ2aWNlLm1qcw==`
10
-
26
+ async setCurrentPageShareInfo(shareInfo = {
27
+ title: '飞码AI', // 分享标题
28
+ desc: '解放创意引领未来|国际前沿的AIGC平台', // 分享描述
29
+ link: location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
30
+ type: 'link', //分享类型,music、video或link,不填默认为link
31
+ imgUrl: 'https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png', // 分享图标
32
+ success: () => {
33
+ // 设置成功
34
+ console.log('分享成功');
35
+ },
36
+ error: () => {
37
+ console.log('分享失败');
38
+ },
39
+ cancel: () => {
40
+ console.log('取消分享');
41
+ }
42
+ }) {
43
+ const signPackage = await this.getWXSignPackageInWechat();
44
+ wx.config({
45
+ debug: false, // 开启调试模式
46
+ appId: signPackage.appid, // 必填,公众号的唯一标识
47
+ timestamp: signPackage.timestamp, // 必填,生成签名的时间戳
48
+ nonceStr: signPackage.nonceStr, // 必填,生成签名的随机串
49
+ signature: signPackage.signature, // 必填,签名,见附录1
50
+ jsApiList: [
51
+ "chooseWXPay", // JSAPI微信支付
52
+ 'onMenuShareTimeline', //分享到微信朋友圈
53
+ 'onMenuShareAppMessage', //分享给微信朋友
54
+ 'onMenuShareQQ', //分享到QQ
55
+ 'onMenuShareQZone', //分享到QQ空间
56
+ 'updateAppMessageShareData', //分享到微信及QQ(新接口)
57
+ 'updateTimelineShareData' //分享到朋友圈”及“分享到QQ空间(新接口
58
+ ], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
59
+ });
60
+ if (shareInfo?.type == "link") {
61
+ // 判断是否有参数
62
+ shareInfo.link = this.getInviteUrl(shareInfo.link);
63
+ }
64
+ wx.ready(() => {
65
+ wx.updateAppMessageShareData(shareInfo); //分享到微信好友或者qq好友
66
+ wx.updateTimelineShareData(shareInfo); //分享到朋友圈或者qq空间
67
+ });
68
+ wx.error(() => { });
69
+ }
70
+ getInviteUrl(url) {
71
+ // 判断是否有参数
72
+ let connectChar = "?";
73
+ if (url?.indexOf("?") > -1) {
74
+ connectChar = "&";
75
+ }
76
+ else {
77
+ connectChar = "?";
78
+ }
79
+ // 附加invite参数
80
+ let id = Parse.User?.current()?.id;
81
+ if (url?.indexOf("invite=" + id) == -1) {
82
+ if (!id)
83
+ return url;
84
+ url += connectChar + 'invite=' + id;
85
+ }
86
+ return url;
87
+ }
88
+ /**
89
+ * 当前页面获取微信授权签名
90
+ */
91
+ /* 获取微信签名 */
92
+ getWXSignPackageInWechat() {
93
+ let params = {
94
+ company: this.company,
95
+ // href: encodeURIComponent(location.href.split("?")[0]),
96
+ href: encodeURIComponent(location.href),
97
+ };
98
+ return new Promise(resolve => {
99
+ this.http
100
+ .post(`https://server.fmode.cn/api/wechat/getconfig`, params)
101
+ .subscribe((response) => {
102
+ // 返回的签名信息
103
+ let res = response;
104
+ let signPackage = res.data;
105
+ resolve(signPackage);
106
+ });
107
+ });
108
+ }
109
+ /** 微信用户初始化
110
+ * @desc 为当前已登录用户,获取微信授权openid信息
111
+ */
112
+ /* 如果是微信内置浏览器,初始化用户openid信息,获取登录code */
113
+ async initUserOpenid() {
114
+ await this.init();
115
+ let code = this.getQueryStringByName("code");
116
+ let openid = localStorage.getItem("openid");
117
+ if (!openid) {
118
+ if (!Parse.User.current())
119
+ return;
120
+ openid = Parse?.User?.current()?.get("wechat")?.[this.wechatAccountId]?.openid;
121
+ if (this.isWechat && !openid) { // 不存在则获取
122
+ let pathname = window.location.pathname;
123
+ if (!code) {
124
+ this.authWechat(pathname);
125
+ }
126
+ else {
127
+ await this.getwechat(code, pathname);
128
+ }
129
+ }
130
+ else {
131
+ this.openid = openid; // 存在则加载
132
+ }
133
+ }
134
+ }
135
+ authWechat(url = "/account/billing") {
136
+ if (!localStorage.getItem("openid")) {
137
+ let REDIRECT_URI = "https://ai.fmode.cn" + url;
138
+ REDIRECT_URI = encodeURIComponent(REDIRECT_URI);
139
+ // console.log(REDIRECT_URI);
140
+ // console.log(
141
+ // "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
142
+ // this.wechatAccountId +
143
+ // "&redirect_uri=" +
144
+ // REDIRECT_URI +
145
+ // "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
146
+ // );
147
+ window.location.href =
148
+ "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
149
+ this.wechatAccountId +
150
+ "&redirect_uri=" +
151
+ REDIRECT_URI +
152
+ "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
153
+ return;
154
+ }
155
+ }
156
+ //根据QueryString参数名称获取值
157
+ getQueryStringByName(name) {
158
+ let result = location.search.match(new RegExp("[?&]" + name + "=([^&]+)", "i"));
159
+ if (result == null || result.length < 1) {
160
+ return "";
161
+ }
162
+ return result[1];
163
+ }
164
+ async getwechat(code, url = "/account/billing") {
165
+ return new Promise(async (resolve, reject) => {
166
+ this.http
167
+ .post(`https://server.fmode.cn/api/wechat/get_wx`, {
168
+ company: this.company,
169
+ code: code,
170
+ })
171
+ .subscribe(async (res) => {
172
+ console.log(res);
173
+ if (res && res.code == 200 && res.data.openid) {
174
+ let openid = res.data.openid;
175
+ // localStorage.setItem('authData', JSON.stringify(res.data))
176
+ localStorage.setItem("openid", openid);
177
+ localStorage.removeItem("code");
178
+ let userWechat = {};
179
+ userWechat[this.wechatAccountId] = { "openid": openid };
180
+ Parse.User.current().set("wechat", userWechat);
181
+ await Parse.User.current().save();
182
+ resolve(true);
183
+ }
184
+ }, async (err) => {
185
+ console.log("Error updating items", err);
186
+ this.authWechat(url);
187
+ reject(false);
188
+ });
189
+ });
190
+ }
191
+ /** 微信环境初始化 */
192
+ init() {
193
+ return new Promise(resolve => {
194
+ if (!this.isWechat)
195
+ resolve(false); // 非微信环境无需加载
196
+ if (this.isInit)
197
+ resolve(true); // ts函数 已初始化无需重复加载
198
+ if (wx)
199
+ resolve(true); // index.html 已加载无需重复加载
200
+ // 调用函数加载指定脚本文件
201
+ this.loadScript('https://res.wx.qq.com/open/js/jweixin-1.6.0.js', () => {
202
+ // 在脚本加载完成后执行的操作
203
+ this.isInit = true;
204
+ this.wx = wx;
205
+ // 在这里可以使用加载的脚本
206
+ resolve(true);
207
+ }, () => {
208
+ resolve(false);
209
+ });
210
+ });
211
+ }
212
+ loadScript(url, callback, errCallback) {
213
+ var script = document.createElement('script');
214
+ script.src = url;
215
+ // 脚本加载完成后的回调函数
216
+ script.onload = () => {
217
+ if (callback) {
218
+ callback();
219
+ }
220
+ };
221
+ script.onerror = () => {
222
+ if (errCallback) {
223
+ errCallback();
224
+ }
225
+ };
226
+ // 将脚本添加到页面中
227
+ document.body.appendChild(script);
228
+ }
229
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WechatJssdkService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
230
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WechatJssdkService, providedIn: 'root' }); }
231
+ }
232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WechatJssdkService, decorators: [{
233
+ type: Injectable,
234
+ args: [{
235
+ providedIn: 'root'
236
+ }]
237
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.AuthService }] });
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VjaGF0LWpzc2RrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3NvY2lhbC93ZWNoYXQvd2VjaGF0LWpzc2RrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQzs7OztBQUcxQix1RkFBdUY7QUFLdkYsTUFBTSxPQUFPLGtCQUFrQjtJQVM3QixZQUNVLElBQWUsRUFDZixRQUFxQjtRQURyQixTQUFJLEdBQUosSUFBSSxDQUFXO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQVQvQixXQUFNLEdBQVcsS0FBSyxDQUFDO1FBQ3ZCLGFBQVEsR0FBVyxLQUFLLENBQUMsQ0FBQyxrQkFBa0I7UUFHNUMsb0JBQWUsR0FBVSxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLENBQUMsVUFBVTtRQU85RixTQUFTO1FBQ1QsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsUUFBUTtRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0Q7O09BRUc7SUFFSCxLQUFL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QUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLGVBQWU7UUFDZixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFFBQVEsRUFBRSxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRSxFQUFFO1lBQ25CLElBQUcsV0FBVyxFQUFDLENBQUM7Z0JBQ2QsV0FBVyxFQUFFLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUMsQ0FBQTtRQUNELFlBQVk7UUFDWixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDOytHQXpPVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci9sb2dpbi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IFBhcnNlIGZyb20gXCJwYXJzZVwiO1xuZGVjbGFyZSB2YXIgd3g6IGFueTtcblxuLy8g5b6u5L+hSlNTREvlrpjmlrnmlofmoaPvvJpodHRwczovL2RldmVsb3BlcnMud2VpeGluLnFxLmNvbS9kb2Mvb2ZmaWFjY291bnQvT0FfV2ViX0FwcHMvSlMtU0RLLmh0bWxcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV2VjaGF0SnNzZGtTZXJ2aWNlIHtcblxuICBpc0luaXQ6Ym9vbGVhbiA9IGZhbHNlO1xuICBpc1dlY2hhdDpib29sZWFuID0gZmFsc2U7IC8vIOacjeWKoeWIneWni+WMluWNs+WIpOaWreaYr+WQpuW+ruS/oea1j+iniOWZqFxuICB3eDphbnlcbiAgY29tcGFueTpzdHJpbmdcbiAgd2VjaGF0QWNjb3VudElkOnN0cmluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiV0VDSEFUX0FQUF9JRFwiKSB8fCBcInd4YjQxOTNjOTNhZTlhYTY5NlwiOyAvLyDlvq7kv6HlhazkvJflj7dJRFxuICBvcGVuaWQ6c3RyaW5nXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOkh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoU2VydjogQXV0aFNlcnZpY2UsXG4gICAgKSB7IFxuICAgICAgLy8g5qOA5rWL5b6u5L+h546v5aKDXG4gICAgICBsZXQgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICBsZXQgaXNXZWNoYXQgPSB1YS5pbmRleE9mKCdtaWNyb21lc3NlbmdlcicpICE9PSAtMTtcbiAgICAgIHRoaXMuaXNXZWNoYXQgPSBpc1dlY2hhdFxuICAgICAgLy8g5Yid5aeL5YyW5biQ5aWXXG4gICAgICB0aGlzLmNvbXBhbnkgPSB0aGlzLmF1dGhTZXJ2LmNvbXBhbnkgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjb21wYW55XCIpO1xuICB9XG4gIC8qKlxuICAgKiDphY3nva7lvZPliY3pobXpnaLliIbkuqvlj4LmlbBcbiAgICovXG5cbiAgYXN5bmMgc2V0Q3VycmVudFBhZ2VTaGFyZUluZm8oc2hhcmVJbmZvPXtcbiAgICB0aXRsZTogJ+mjnueggUFJJywgLy8g5YiG5Lqr5qCH6aKYXG4gICAgZGVzYzogJ+ino+aUvuWIm+aEj+W8lemihuacquadpXzlm73pmYXliY3msr/nmoRBSUdD5bmz5Y+wJywgLy8g5YiG5Lqr5o+P6L+wXG4gICAgbGluazogbG9jYXRpb24uaHJlZiwgLy8g5YiG5Lqr6ZO+5o6l77yM6K+l6ZO+5o6l5Z+f5ZCN5oiW6Lev5b6E5b+F6aG75LiO5b2T5YmN6aG16Z2i5a+55bqU55qE5YWs5LyX5Y+3SlPlronlhajln5/lkI3kuIDoh7RcbiAgICB0eXBlOiAnbGluaycsIC8v5YiG5Lqr57G75Z6LLG11c2lj44CBdmlkZW/miJZsaW5r77yM5LiN5aGr6buY6K6k5Li6bGlua1xuICAgIGltZ1VybDogJ2h0dHBzOi8vZmlsZS1jbG91ZC5mbW9kZS5jbi9FNEtwR3ZURXRvLzIwMjMwODIyLzNta2Y0MTAzMzYyMzI3NS5wbmcnLCAvLyDliIbkuqvlm77moIdcbiAgICBzdWNjZXNzOiAoKSA9PiB7XG4gICAgICAvLyDorr7nva7miJDlip9cbiAgICAgIGNvbnNvbGUubG9nKCfliIbkuqvmiJDlip8nKTtcbiAgICB9LFxuICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygn5YiG5Lqr5aSx6LSlJyk7XG4gICAgfSxcbiAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCflj5bmtojliIbkuqsnKTtcbiAgICB9XG4gIH0pe1xuICAgIGNvbnN0IHNpZ25QYWNrYWdlID0gYXdhaXQgdGhpcy5nZXRXWFNpZ25QYWNrYWdlSW5XZWNoYXQoKVxuXG4gICAgd3guY29uZmlnKHtcbiAgICAgIGRlYnVnOiBmYWxzZSwgLy8g5byA5ZCv6LCD6K+V5qih5byPXG4gICAgICBhcHBJZDogc2lnblBhY2thZ2UuYXBwaWQsIC8vIOW/heWhq++8jOWFrOS8l+WPt+eahOWUr+S4gOagh+ivhlxuICAgICAgdGltZXN0YW1wOiBzaWduUGFja2FnZS50aW1lc3RhbXAsIC8vIOW/heWhq++8jOeUn+aIkOetvuWQjeeahOaXtumXtOaIs1xuICAgICAgbm9uY2VTdHI6IHNpZ25QYWNrYWdlLm5vbmNlU3RyLCAvLyDlv4XloavvvIznlJ/miJDnrb7lkI3nmoTpmo/mnLrkuLJcbiAgICAgIHNpZ25hdHVyZTogc2lnblBhY2thZ2Uuc2lnbmF0dXJlLCAvLyDlv4XloavvvIznrb7lkI3vvIzop4HpmYTlvZUxXG4gICAgICBqc0FwaUxpc3Q6IFtcbiAgICAgICAgXCJjaG9vc2VXWFBheVwiLCAvLyBKU0FQSeW+ruS/oeaUr+S7mFxuICAgICAgICAnb25NZW51U2hhcmVUaW1lbGluZScsIC8v5YiG5Lqr5Yiw5b6u5L+h5pyL5Y+L5ZyIXG4gICAgICAgICdvbk1lbnVTaGFyZUFwcE1lc3NhZ2UnLCAvL+WIhuS6q+e7meW+ruS/oeaci+WPi1xuICAgICAgICAnb25NZW51U2hhcmVRUScsIC8v5YiG5Lqr5YiwUVFcbiAgICAgICAgJ29uTWVudVNoYXJlUVpvbmUnLCAvL+WIhuS6q+WIsFFR56m66Ze0XG4gICAgICAgICd1cGRhdGVBcHBNZXNzYWdlU2hhcmVEYXRhJywgLy/liIbkuqvliLDlvq7kv6Hlj4pRUe+8iOaWsOaOpeWPo++8iVxuICAgICAgICAndXBkYXRlVGltZWxpbmVTaGFyZURhdGEnIC8v5YiG5Lqr5Yiw5pyL5Y+L5ZyI4oCd5Y+K4oCc5YiG5Lqr5YiwUVHnqbrpl7TvvIjmlrDmjqXlj6NcbiAgICAgIF0sIC8vIOW/heWhq++8jOmcgOimgeS9v+eUqOeahEpT5o6l5Y+j5YiX6KGo77yM5omA5pyJSlPmjqXlj6PliJfooajop4HpmYTlvZUyXG4gICAgfSk7XG4gICAgXG4gICAgaWYoc2hhcmVJbmZvPy50eXBlPT1cImxpbmtcIil7XG4gICAgICAvLyDliKTmlq3mmK/lkKbmnInlj4LmlbBcbiAgICAgIHNoYXJlSW5mby5saW5rID0gdGhpcy5nZXRJbnZpdGVVcmwoc2hhcmVJbmZvLmxpbmspXG4gICAgfVxuXG4gICAgd3gucmVhZHkoKCkgPT4ge1xuICAgICAgd3gudXBkYXRlQXBwTWVzc2FnZVNoYXJlRGF0YShzaGFyZUluZm8pOyAvL+WIhuS6q+WIsOW+ruS/oeWlveWPi+aIluiAhXFx5aW95Y+LXG4gICAgICB3eC51cGRhdGVUaW1lbGluZVNoYXJlRGF0YShzaGFyZUluZm8pOyAvL+WIhuS6q+WIsOaci+WPi+WciOaIluiAhXFx56m66Ze0XG4gICAgfSk7XG4gICAgd3guZXJyb3IoKCkgPT4ge30pO1xuICB9XG4gIGdldEludml0ZVVybCh1cmwpe1xuICAgIC8vIOWIpOaWreaYr+WQpuacieWPguaVsFxuICAgIGxldCBjb25uZWN0Q2hhciA9IFwiP1wiXG4gICAgaWYodXJsPy5pbmRleE9mKFwiP1wiKT4tMSl7XG4gICAgICBjb25uZWN0Q2hhciA9IFwiJlwiXG4gICAgfWVsc2V7XG4gICAgICBjb25uZWN0Q2hhciA9IFwiP1wiXG4gICAgfVxuICAgIC8vIOmZhOWKoGludml0ZeWPguaVsFxuICAgIGxldCBpZCA9IFBhcnNlLlVzZXI/LmN1cnJlbnQoKT8uaWRcbiAgICBpZih1cmw/LmluZGV4T2YoXCJpbnZpdGU9XCIraWQpPT0tMSl7XG4gICAgICBpZighaWQpIHJldHVybiB1cmxcbiAgICAgIHVybCArPSBjb25uZWN0Q2hhcisgJ2ludml0ZT0nICsgaWRcbiAgICB9XG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgLyoqXG4gICAqIOW9k+WJjemhtemdouiOt+WPluW+ruS/oeaOiOadg+etvuWQjVxuICAgKi9cbiAgLyog6I635Y+W5b6u5L+h562+5ZCNICovXG4gIGdldFdYU2lnblBhY2thZ2VJbldlY2hhdCgpOlByb21pc2U8YW55PntcbiAgICBsZXQgcGFyYW1zID0ge1xuICAgICAgY29tcGFueTogdGhpcy5jb21wYW55LFxuICAgICAgLy8gaHJlZjogZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYuc3BsaXQoXCI/XCIpWzBdKSxcbiAgICAgIGhyZWY6IGVuY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmKSxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlPT57XG4gICAgICB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGBodHRwczovL3NlcnZlci5mbW9kZS5jbi9hcGkvd2VjaGF0L2dldGNvbmZpZ2AsIHBhcmFtcylcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIOi/lOWbnueahOetvuWQjeS/oeaBr1xuICAgICAgICBsZXQgcmVzOiBhbnkgPSByZXNwb25zZTtcbiAgICAgICAgbGV0IHNpZ25QYWNrYWdlID0gcmVzLmRhdGE7XG4gICAgICAgIHJlc29sdmUoc2lnblBhY2thZ2UpXG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgLyoqIOW+ruS/oeeUqOaIt+WIneWni+WMliBcbiAgICogQGRlc2Mg5Li65b2T5YmN5bey55m75b2V55So5oi377yM6I635Y+W5b6u5L+h5o6I5p2Db3Blbmlk5L+h5oGvXG4gICovXG4gIC8qIOWmguaenOaYr+W+ruS/oeWGhee9rua1j+iniOWZqO+8jOWIneWni+WMlueUqOaIt29wZW5pZOS/oeaBr++8jOiOt+WPlueZu+W9lWNvZGUgKi9cbiAgYXN5bmMgaW5pdFVzZXJPcGVuaWQoKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KClcblxuICAgIGxldCBjb2RlID0gdGhpcy5nZXRRdWVyeVN0cmluZ0J5TmFtZShcImNvZGVcIik7XG4gICAgbGV0IG9wZW5pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwib3BlbmlkXCIpO1xuICAgIGlmICghb3BlbmlkKSB7XG4gICAgICBpZighUGFyc2UuVXNlci5jdXJyZW50KCkpIHJldHVyblxuICAgICAgb3BlbmlkID0gUGFyc2U/LlVzZXI/LmN1cnJlbnQoKT8uZ2V0KFwid2VjaGF0XCIpPy5bdGhpcy53ZWNoYXRBY2NvdW50SWRdPy5vcGVuaWQ7XG4gICAgICBpZiAodGhpcy5pc1dlY2hhdCAmJiAhb3BlbmlkKSB7IC8vIOS4jeWtmOWcqOWImeiOt+WPllxuICAgICAgICBsZXQgcGF0aG5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcbiAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgdGhpcy5hdXRoV2VjaGF0KHBhdGhuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldHdlY2hhdChjb2RlLHBhdGhuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMub3BlbmlkID0gb3BlbmlkIC8vIOWtmOWcqOWImeWKoOi9vVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBhdXRoV2VjaGF0KHVybDogc3RyaW5nID0gXCIvYWNjb3VudC9iaWxsaW5nXCIpIHtcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKFwib3BlbmlkXCIpKSB7XG4gICAgICBsZXQgUkVESVJFQ1RfVVJJID0gXCJodHRwczovL2FpLmZtb2RlLmNuXCIgKyB1cmw7XG4gICAgICBSRURJUkVDVF9VUkkgPSBlbmNvZGVVUklDb21wb25lbnQoUkVESVJFQ1RfVVJJKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFJFRElSRUNUX1VSSSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgIC8vICAgXCJodHRwczovL29wZW4ud2VpeGluLnFxLmNvbS9jb25uZWN0L29hdXRoMi9hdXRob3JpemU/YXBwaWQ9XCIgK1xuICAgICAgLy8gICAgIHRoaXMud2VjaGF0QWNjb3VudElkICtcbiAgICAgIC8vICAgICBcIiZyZWRpcmVjdF91cmk9XCIgK1xuICAgICAgLy8gICAgIFJFRElSRUNUX1VSSSArXG4gICAgICAvLyAgICAgXCImcmVzcG9uc2VfdHlwZT1jb2RlJnNjb3BlPXNuc2FwaV9iYXNlJnN0YXRlPVNUQVRFI3dlY2hhdF9yZWRpcmVjdFwiXG4gICAgICAvLyApO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPVxuICAgICAgICBcImh0dHBzOi8vb3Blbi53ZWl4aW4ucXEuY29tL2Nvbm5lY3Qvb2F1dGgyL2F1dGhvcml6ZT9hcHBpZD1cIiArXG4gICAgICAgIHRoaXMud2VjaGF0QWNjb3VudElkICtcbiAgICAgICAgXCImcmVkaXJlY3RfdXJpPVwiICtcbiAgICAgICAgUkVESVJFQ1RfVVJJICtcbiAgICAgICAgXCImcmVzcG9uc2VfdHlwZT1jb2RlJnNjb3BlPXNuc2FwaV91c2VyaW5mbyZzdGF0ZT1TVEFURSN3ZWNoYXRfcmVkaXJlY3RcIjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgLy/moLnmja5RdWVyeVN0cmluZ+WPguaVsOWQjeensOiOt+WPluWAvFxuICBnZXRRdWVyeVN0cmluZ0J5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVzdWx0ID0gbG9jYXRpb24uc2VhcmNoLm1hdGNoKFxuICAgICAgbmV3IFJlZ0V4cChcIls/Jl1cIiArIG5hbWUgKyBcIj0oW14mXSspXCIsIFwiaVwiKVxuICAgICk7XG4gICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgfVxuICBhc3luYyBnZXR3ZWNoYXQoXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nID0gXCIvYWNjb3VudC9iaWxsaW5nXCJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucG9zdChgaHR0cHM6Ly9zZXJ2ZXIuZm1vZGUuY24vYXBpL3dlY2hhdC9nZXRfd3hgLCB7XG4gICAgICAgICAgY29tcGFueTogdGhpcy5jb21wYW55LFxuICAgICAgICAgIGNvZGU6IGNvZGUsXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgYXN5bmMgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDAgJiYgcmVzLmRhdGEub3BlbmlkKSB7XG4gICAgICAgICAgICAgIGxldCBvcGVuaWQgPSByZXMuZGF0YS5vcGVuaWQ7XG4gICAgICAgICAgICAgIC8vIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhdXRoRGF0YScsIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKSlcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJvcGVuaWRcIiwgb3BlbmlkKTtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJjb2RlXCIpO1xuICAgICAgICAgICAgICBsZXQgdXNlcldlY2hhdCA9IHt9XG4gICAgICAgICAgICAgIHVzZXJXZWNoYXRbdGhpcy53ZWNoYXRBY2NvdW50SWRdID0ge1wib3BlbmlkXCI6IG9wZW5pZH1cbiAgICAgICAgICAgICAgUGFyc2UuVXNlci5jdXJyZW50KCkuc2V0KFwid2VjaGF0XCIsIHVzZXJXZWNoYXQpO1xuICAgICAgICAgICAgICBhd2FpdCBQYXJzZS5Vc2VyLmN1cnJlbnQoKS5zYXZlKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIHVwZGF0aW5nIGl0ZW1zXCIsIGVycik7XG4gICAgICAgICAgICB0aGlzLmF1dGhXZWNoYXQodXJsKTtcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIOW+ruS/oeeOr+Wig+WIneWni+WMliAqL1xuICBpbml0KCk6UHJvbWlzZTxib29sZWFuPntcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZT0+e1xuICAgICAgICBpZighdGhpcy5pc1dlY2hhdCkgcmVzb2x2ZShmYWxzZSkgLy8g6Z2e5b6u5L+h546v5aKD5peg6ZyA5Yqg6L29XG4gICAgICAgIGlmKHRoaXMuaXNJbml0KSByZXNvbHZlKHRydWUpIC8vIHRz5Ye95pWwIOW3suWIneWni+WMluaXoOmcgOmHjeWkjeWKoOi9vVxuICAgICAgICBpZih3eCkgcmVzb2x2ZSh0cnVlKSAvLyBpbmRleC5odG1sIOW3suWKoOi9veaXoOmcgOmHjeWkjeWKoOi9vVxuICAgICAgICAvLyDosIPnlKjlh73mlbDliqDovb3mjIflrprohJrmnKzmlofku7ZcbiAgICAgICAgdGhpcy5sb2FkU2NyaXB0KCdodHRwczovL3Jlcy53eC5xcS5jb20vb3Blbi9qcy9qd2VpeGluLTEuNi4wLmpzJywgKCkgPT4ge1xuICAgICAgICAgIC8vIOWcqOiEmuacrOWKoOi9veWujOaIkOWQjuaJp+ihjOeahOaTjeS9nFxuICAgICAgICAgIHRoaXMuaXNJbml0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnd4ID0gd3g7XG4gICAgICAgICAgLy8g5Zyo6L+Z6YeM5Y+v5Lul5L2/55So5Yqg6L2955qE6ISa5pysXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICB9LCgpPT57XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICB9XG4gIGxvYWRTY3JpcHQodXJsLCBjYWxsYmFjayxlcnJDYWxsYmFjaykge1xuICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc3JjID0gdXJsO1xuICAgIC8vIOiEmuacrOWKoOi9veWujOaIkOWQjueahOWbnuiwg+WHveaVsFxuICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNjcmlwdC5vbmVycm9yID0gKCk9PntcbiAgICAgIGlmKGVyckNhbGxiYWNrKXtcbiAgICAgICAgZXJyQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8g5bCG6ISa5pys5re75Yqg5Yiw6aG16Z2i5LitXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9XG4gIFxufVxuIl19
@@ -1,10 +1,59 @@
1
-
2
- /**
3
- * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
- * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
- * 保留所有权利 All Rights Reserved.
6
- * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs
7
- */
8
- import{CommonModule}from"@angular/common";import{Component}from"@angular/core";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import{IonicModule}from"@ionic/angular";import{HwobsService}from"../service-hwobs/hwobs.service";import*as i0 from"@angular/core";import*as i1 from"../service-hwobs/hwobs.service";import*as i2 from"@angular/common";import*as i3 from"@ionic/angular";export class HwobsManagerComponent{openFile(o){console.log("Opening file:",o)}openDir(o,n="pre"){if(o)this.prefix=o.Prefix,this.listDir(o.Prefix);else if("pre"==n){let o=this.prefix.split("/");if(o.length>1){let n=o.splice(0,o.length-1).join("/");console.log(n),this.prefix=n,this.listDir(n)}}}showName(o){return o.replaceAll(this.prefix,"")}constructor(o){this.hwobs=o,this.dirs=[],this.files=[],this.prefix="storage/",this.listDir(this.prefix)}async listDir(o){let{dirs:n,files:e}=await this.hwobs.listDir(o);this.dirs=n,this.files=e}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsManagerComponent,deps:[{token:i1.HwobsService}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:HwobsManagerComponent,isStandalone:!0,selector:"fm-storage-hwobs-manager",ngImport:i0,template:'<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)="openDir(null,\'pre\')">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of dirs" (click)="openDir(item)">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of files" (click)="openFile(item)">\n <ion-icon [name]="\'document\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>',styles:["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i2.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"ngmodule",type:FormsModule},{kind:"ngmodule",type:ReactiveFormsModule},{kind:"ngmodule",type:IonicModule},{kind:"component",type:i3.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i3.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i3.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i3.IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:i3.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i3.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsManagerComponent,decorators:[{type:Component,args:[{standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonicModule],selector:"fm-storage-hwobs-manager",template:'<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)="openDir(null,\'pre\')">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of dirs" (click)="openDir(item)">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of files" (click)="openFile(item)">\n <ion-icon [name]="\'document\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>',styles:["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"]}]}],ctorParameters:()=>[{type:i1.HwobsService}]});
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL2NvbXAtaHdvYnMtbWFuYWdlci9od29icy1tYW5hZ2VyLmNvbXBvbmVudC5tanM=`
10
-
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component } from '@angular/core';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { IonicModule } from '@ionic/angular';
5
+ import { HwobsService } from '../service-hwobs/hwobs.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../service-hwobs/hwobs.service";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "@ionic/angular";
10
+ export class HwobsManagerComponent {
11
+ openFile(file) {
12
+ console.log('Opening file:', file);
13
+ // Add your logic to open the file details here
14
+ }
15
+ openDir(dir, type = "pre") {
16
+ if (dir) {
17
+ this.prefix = dir.Prefix;
18
+ this.listDir(dir.Prefix);
19
+ }
20
+ else {
21
+ if (type == "pre") {
22
+ let list = this.prefix.split("/");
23
+ if (list.length > 1) {
24
+ let prefix = list.splice(0, list.length - 1).join("/");
25
+ console.log(prefix);
26
+ this.prefix = prefix;
27
+ this.listDir(prefix);
28
+ }
29
+ }
30
+ }
31
+ }
32
+ showName(name) {
33
+ return name.replaceAll(this.prefix, "");
34
+ }
35
+ constructor(hwobs) {
36
+ this.hwobs = hwobs;
37
+ this.dirs = [];
38
+ this.files = [];
39
+ this.prefix = "storage/";
40
+ this.listDir(this.prefix);
41
+ }
42
+ async listDir(prefix) {
43
+ let { dirs, files } = await this.hwobs.listDir(prefix);
44
+ this.dirs = dirs;
45
+ this.files = files;
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsManagerComponent, deps: [{ token: i1.HwobsService }], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HwobsManagerComponent, isStandalone: true, selector: "fm-storage-hwobs-manager", ngImport: i0, template: "<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)=\"openDir(null,'pre')\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of dirs\" (click)=\"openDir(item)\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of files\" (click)=\"openFile(item)\">\n <ion-icon [name]=\"'document'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>", styles: ["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }] }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsManagerComponent, decorators: [{
51
+ type: Component,
52
+ args: [{ standalone: true, imports: [
53
+ CommonModule,
54
+ FormsModule,
55
+ ReactiveFormsModule,
56
+ IonicModule
57
+ ], selector: 'fm-storage-hwobs-manager', template: "<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)=\"openDir(null,'pre')\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of dirs\" (click)=\"openDir(item)\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of files\" (click)=\"openFile(item)\">\n <ion-icon [name]=\"'document'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>", styles: ["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"] }]
58
+ }], ctorParameters: () => [{ type: i1.HwobsService }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHdvYnMtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3N0b3JhZ2UvY29tcC1od29icy1tYW5hZ2VyL2h3b2JzLW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9zdG9yYWdlL2NvbXAtaHdvYnMtbWFuYWdlci9od29icy1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUF1QixZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7QUFjbkYsTUFBTSxPQUFPLHFCQUFxQjtJQUloQyxRQUFRLENBQUMsSUFBUztRQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQywrQ0FBK0M7SUFDakQsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFrQixFQUFDLE9BQVksS0FBSztRQUMxQyxJQUFHLEdBQUcsRUFBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzFCLENBQUM7YUFBSSxDQUFDO1lBQ0osSUFBRyxJQUFJLElBQUUsS0FBSyxFQUFDLENBQUM7Z0JBQ2QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2pDLElBQUcsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQztvQkFDaEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7b0JBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO29CQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLENBQUE7SUFDeEMsQ0FBQztJQUNELFlBQ1UsS0FBa0I7UUFBbEIsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQTNCNUIsU0FBSSxHQUFlLEVBQUUsQ0FBQztRQUN0QixVQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUN4QixXQUFNLEdBQVcsVUFBVSxDQUFBO1FBMkJ6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFhO1FBQ3pCLElBQUksRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDOytHQXJDVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixvRkNsQmxDLDYwQkF1QmdCLHNIRGRaLFlBQVksMkpBQ1osV0FBVyw4QkFDWCxtQkFBbUIsOEJBQ25CLFdBQVc7OzRGQU1GLHFCQUFxQjtrQkFaakMsU0FBUztpQ0FDRyxJQUFJLFdBQ1A7d0JBQ04sWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsV0FBVztxQkFDWixZQUNTLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBId29ic0RpciwgSHdvYnNGaWxlLCBId29ic1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlLWh3b2JzL2h3b2JzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTp0cnVlLFxuICBpbXBvcnRzOltcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJb25pY01vZHVsZVxuICBdLFxuICBzZWxlY3RvcjogJ2ZtLXN0b3JhZ2UtaHdvYnMtbWFuYWdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9od29icy1tYW5hZ2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaHdvYnMtbWFuYWdlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEh3b2JzTWFuYWdlckNvbXBvbmVudCB7XG4gIGRpcnM6IEh3b2JzRGlyW10gPSBbXTtcbiAgZmlsZXM6IEh3b2JzRmlsZVtdID0gW107XG4gIHByZWZpeDogc3RyaW5nID0gXCJzdG9yYWdlL1wiXG4gIG9wZW5GaWxlKGZpbGU6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdPcGVuaW5nIGZpbGU6JywgZmlsZSk7XG4gICAgLy8gQWRkIHlvdXIgbG9naWMgdG8gb3BlbiB0aGUgZmlsZSBkZXRhaWxzIGhlcmVcbiAgfVxuICBvcGVuRGlyKGRpcj86SHdvYnNEaXJ8bnVsbCx0eXBlOnN0cmluZz1cInByZVwiKXtcbiAgICBpZihkaXIpe1xuICAgICAgdGhpcy5wcmVmaXggPSBkaXIuUHJlZml4XG4gICAgICB0aGlzLmxpc3REaXIoZGlyLlByZWZpeClcbiAgICB9ZWxzZXtcbiAgICAgIGlmKHR5cGU9PVwicHJlXCIpe1xuICAgICAgICBsZXQgbGlzdCA9IHRoaXMucHJlZml4LnNwbGl0KFwiL1wiKVxuICAgICAgICBpZihsaXN0Lmxlbmd0aD4xKXtcbiAgICAgICAgICBsZXQgcHJlZml4ID0gbGlzdC5zcGxpY2UoMCxsaXN0Lmxlbmd0aC0xKS5qb2luKFwiL1wiKVxuICAgICAgICAgIGNvbnNvbGUubG9nKHByZWZpeClcbiAgICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeFxuICAgICAgICAgIHRoaXMubGlzdERpcihwcmVmaXgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2hvd05hbWUobmFtZTpzdHJpbmcpe1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2VBbGwodGhpcy5wcmVmaXgsXCJcIilcbiAgfVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh3b2JzOkh3b2JzU2VydmljZVxuICApe1xuICAgIHRoaXMubGlzdERpcih0aGlzLnByZWZpeClcbiAgfVxuXG4gIGFzeW5jIGxpc3REaXIocHJlZml4OnN0cmluZyl7XG4gICAgbGV0IHtkaXJzLGZpbGVzfSA9IGF3YWl0IHRoaXMuaHdvYnMubGlzdERpcihwcmVmaXgpXG4gICAgdGhpcy5kaXJzID0gZGlyc1xuICAgIHRoaXMuZmlsZXMgPSBmaWxlc1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgICA8aW9uLXRvb2xiYXI+XG4gICAgICA8aW9uLXRpdGxlPlxuICAgICAgICBGaWxlIE1hbmFnZXJcbiAgICAgIDwvaW9uLXRpdGxlPlxuICAgIDwvaW9uLXRvb2xiYXI+XG4gIDwvaW9uLWhlYWRlcj5cbiAgXG4gIDxpb24tY29udGVudD5cbiAgICA8aW9uLWxpc3Q+XG4gICAgICAgIDxpb24taXRlbSAoY2xpY2spPVwib3BlbkRpcihudWxsLCdwcmUnKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cIidmb2xkZXInXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+Li4vPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIDxpb24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaXJzXCIgKGNsaWNrKT1cIm9wZW5EaXIoaXRlbSlcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCInZm9sZGVyJ1wiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPnt7IHNob3dOYW1lKGl0ZW0uUHJlZml4KSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICA8aW9uLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsZXNcIiAoY2xpY2spPVwib3BlbkZpbGUoaXRlbSlcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCInZG9jdW1lbnQnXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgc2hvd05hbWUoaXRlbS5LZXkpIH19PC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9pb24tbGlzdD5cbiAgPC9pb24tY29udGVudD4iXX0=
@@ -1,10 +1,5 @@
1
-
2
- /**
3
- * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
- * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
- * 保留所有权利 All Rights Reserved.
6
- * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/index.mjs
7
- */
8
- export*from"./storage.module";export*from"./service-hwobs/hwobs.service";export*from"./comp-hwobs-manager/hwobs-manager.component";export*from"./service-upload/nova-upload.service";
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL2luZGV4Lm1qcw==`
10
-
1
+ export * from "./storage.module";
2
+ export * from "./service-hwobs/hwobs.service";
3
+ export * from "./comp-hwobs-manager/hwobs-manager.component";
4
+ export * from "./service-upload/nova-upload.service";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3N0b3JhZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQTtBQUNoQyxjQUFjLCtCQUErQixDQUFBO0FBQzdDLGNBQWMsOENBQThDLENBQUE7QUFDNUQsY0FBYyxzQ0FBc0MsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2UubW9kdWxlXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NlcnZpY2UtaHdvYnMvaHdvYnMuc2VydmljZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wLWh3b2JzLW1hbmFnZXIvaHdvYnMtbWFuYWdlci5jb21wb25lbnRcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2VydmljZS11cGxvYWQvbm92YS11cGxvYWQuc2VydmljZVwiXG4iXX0=
@@ -1,10 +1,132 @@
1
-
1
+ import { Injectable } from '@angular/core';
2
+ import ObsClient from "esdk-obs-browserjs";
3
+ import Parse from "parse";
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * HwobsService 华为OBS文件服务
7
+ * @public
8
+ */
9
+ export class HwobsService {
10
+ constructor() {
11
+ this.Attachment = Parse.Object.extend("Attachment");
12
+ this.host = "https://web3-test.obs.cn-south-1.myhuaweicloud.com/";
13
+ this.bucketName = "web3-test";
14
+ this.obsClient = new ObsClient({
15
+ access_key_id: '6UIET20WHUI5TLXWOVNA',
16
+ secret_access_key: 'YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF',
17
+ // 这里以华南-广州为例,其他地区请按实际情况填写
18
+ server: 'https://obs.cn-south-1.myhuaweicloud.com'
19
+ });
20
+ }
2
21
  /**
3
- * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
- * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
- * 保留所有权利 All Rights Reserved.
6
- * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-hwobs/hwobs.service.mjs
22
+ * 目录及检索相关函数
7
23
  */
8
- import{Injectable}from"@angular/core";import ObsClient from"esdk-obs-browserjs";import Parse from"parse";import*as i0 from"@angular/core";export class HwobsService{constructor(){this.Attachment=Parse.Object.extend("Attachment"),this.host="https://web3-test.obs.cn-south-1.myhuaweicloud.com/",this.bucketName="web3-test",this.obsClient=new ObsClient({access_key_id:"6UIET20WHUI5TLXWOVNA",secret_access_key:"YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF",server:"https://obs.cn-south-1.myhuaweicloud.com"})}listDir(e){return new Promise(((t,s)=>{this.obsClient.listObjects({Bucket:this.bucketName,Prefix:e,Delimiter:"/"},((e,r)=>{if(e)console.error("Error--\x3e"+e),s(e);else{if(console.log("Status--\x3e"+r.CommonMsg.Status),console.log(r),r.CommonMsg.Status<300&&r.InterfaceResult)for(var o in r.InterfaceResult.Contents)console.log("Contents["+o+"]:"),console.log("Key--\x3e"+r.InterfaceResult.Contents[o].Key),console.log("Owner[ID]--\x3e"+r.InterfaceResult.Contents[o].Owner.ID);let e=r.InterfaceResult.CommonPrefixes,s=r.InterfaceResult.Contents;t({dirs:e,files:s})}}))}))}async uploadFile(e,t){let s=await this.checkFileExists(e);return s?.id?s:new Promise(((s,r)=>{this.obsClient.putObject({Bucket:this.bucketName,Key:t,SourceFile:e},(async(o,a)=>{if(o)console.error("Error--\x3e"+o),r(o);else{console.log("Status--\x3e"+a.CommonMsg.Status);let r=await this.saveAttachment(e,t);s(r)}}))}))}async checkFileExists(e){let t,s=await this.getFileHash(e),r=new Parse.Query("Attachment");r.equalTo("hash",s),r.equalTo("size",e.size);let o=await r.first();return o?.id||(o=new this.Attachment),t=o,t}async saveAttachment(e,t){let s=await this.getFileHash(e),r=await this.checkFileExists(e);return r.set("name",e.name),r.set("size",e.size),r.set("mime",e.type),r.set("url",this.host+t),r.set("hash",s),r=await r.save(),r}async getFileHash(e){return new Promise(((t,s)=>{const r=new FileReader;r.onload=async e=>{const s=e.target.result,r=await crypto.subtle.digest("SHA-256",s),o=Array.from(new Uint8Array(r)).map((e=>e.toString(16).padStart(2,"0"))).join("");t(o)},r.onerror=e=>{s(e.target.error)},r.readAsArrayBuffer(e)}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsService,deps:[],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:HwobsService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtaHdvYnMvaHdvYnMuc2VydmljZS5tanM=`
10
-
24
+ listDir(prefix) {
25
+ return new Promise((resolve, reject) => {
26
+ this.obsClient.listObjects({
27
+ Bucket: this.bucketName,
28
+ Prefix: prefix,
29
+ Delimiter: '/'
30
+ }, (err, result) => {
31
+ if (err) {
32
+ console.error('Error-->' + err);
33
+ reject(err);
34
+ }
35
+ else {
36
+ console.log('Status-->' + result.CommonMsg.Status);
37
+ console.log(result);
38
+ if (result.CommonMsg.Status < 300 && result.InterfaceResult) {
39
+ for (var j in result.InterfaceResult.Contents) {
40
+ console.log('Contents[' + j + ']:');
41
+ console.log('Key-->' + result.InterfaceResult.Contents[j]['Key']);
42
+ console.log('Owner[ID]-->' + result.InterfaceResult.Contents[j]['Owner']['ID']);
43
+ }
44
+ }
45
+ let dirs = result.InterfaceResult.CommonPrefixes;
46
+ let files = result.InterfaceResult.Contents;
47
+ resolve({ dirs: dirs, files: files });
48
+ }
49
+ });
50
+ });
51
+ }
52
+ /**
53
+ * 文件上传相关函数
54
+ * @param file
55
+ * @param key
56
+ * @returns
57
+ */
58
+ async uploadFile(file, key) {
59
+ // key 文件上传后的全部路径
60
+ // /storage/<公司账套>/<应用名称>/年月日/<文件名>.<文件后缀>
61
+ // /storage/web2023/<学号>/年月日/<文件名>.<文件后缀>
62
+ let attach = await this.checkFileExists(file);
63
+ if (attach?.id)
64
+ return attach;
65
+ return new Promise((resolve, reject) => {
66
+ this.obsClient.putObject({
67
+ Bucket: this.bucketName,
68
+ Key: key,
69
+ SourceFile: file
70
+ }, async (err, result) => {
71
+ if (err) {
72
+ console.error('Error-->' + err);
73
+ reject(err);
74
+ }
75
+ else {
76
+ console.log('Status-->' + result.CommonMsg.Status);
77
+ let attach = await this.saveAttachment(file, key);
78
+ resolve(attach);
79
+ }
80
+ });
81
+ });
82
+ }
83
+ async checkFileExists(file) {
84
+ let hash = await this.getFileHash(file);
85
+ // 文件HASH查重,避免重复上传
86
+ let attach;
87
+ let query = new Parse.Query("Attachment");
88
+ query.equalTo("hash", hash);
89
+ query.equalTo("size", file.size);
90
+ let exists = await query.first();
91
+ if (!exists?.id)
92
+ exists = new this.Attachment();
93
+ attach = exists;
94
+ return attach;
95
+ }
96
+ async saveAttachment(file, key) {
97
+ let hash = await this.getFileHash(file);
98
+ let attach = await this.checkFileExists(file);
99
+ attach.set("name", file.name);
100
+ attach.set("size", file.size);
101
+ attach.set("mime", file.type);
102
+ attach.set("url", this.host + key);
103
+ attach.set("hash", hash);
104
+ attach = await attach.save();
105
+ return attach;
106
+ }
107
+ async getFileHash(file) {
108
+ return new Promise((resolve, reject) => {
109
+ const reader = new FileReader();
110
+ reader.onload = async (event) => {
111
+ const buffer = event.target.result;
112
+ const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);
113
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
114
+ const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
115
+ resolve(hashHex);
116
+ };
117
+ reader.onerror = (event) => {
118
+ reject(event.target.error);
119
+ };
120
+ reader.readAsArrayBuffer(file);
121
+ });
122
+ }
123
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
124
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsService, providedIn: 'root' }); }
125
+ }
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HwobsService, decorators: [{
127
+ type: Injectable,
128
+ args: [{
129
+ providedIn: 'root'
130
+ }]
131
+ }], ctorParameters: () => [] });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHdvYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvc3RvcmFnZS9zZXJ2aWNlLWh3b2JzL2h3b2JzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMxQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7O0FBd0IxQjs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sWUFBWTtJQUl2QjtRQTJFQSxlQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUExRTFDLElBQUksQ0FBQyxJQUFJLEdBQUcscURBQXFELENBQUE7UUFDakUsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUE7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUM3QixhQUFhLEVBQUUsc0JBQXNCO1lBQ3JDLGlCQUFpQixFQUFFLDBDQUEwQztZQUM3RCwwQkFBMEI7WUFDMUIsTUFBTSxFQUFFLDBDQUEwQztTQUNyRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsTUFBTTtRQUlaLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pCLE1BQU0sRUFBRyxJQUFJLENBQUMsVUFBVTtnQkFDeEIsTUFBTSxFQUFHLE1BQU07Z0JBQ2YsU0FBUyxFQUFFLEdBQUc7YUFDZixFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNqQixJQUFHLEdBQUcsRUFBQyxDQUFDO29CQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFB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J0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IE9ic0NsaWVudCBmcm9tIFwiZXNkay1vYnMtYnJvd3NlcmpzXCJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcblxuLyoqXG4gKiBId29ic0RpciDljY7kuLpPQlPnm67lvZXmjqXlj6NcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBId29ic0RpcntcbiAgUHJlZml4OnN0cmluZyAgLy8gXCJzdG9yYWdlLzIwMjMvXCJcblxufVxuXG4vKipcbiAqIEh3b2JzRGlyIOWNjuS4uk9CU+aWh+S7tuaOpeWPo1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEh3b2JzRmlsZXtcbiAgRVRhZzogXCJcXFwiZjBlYzk2OGZlNTFhYjQ4MzQ4MzA3ZTA2NDc2MTIyZWJcXFwiXCJcbiAgS2V5OnN0cmluZyAgLy9cInN0b3JhZ2UvM21rZjQxMDMzNjIzMjc1LnBuZ1wiXG4gIExhc3RNb2RpZmllZDpzdHJpbmcgLy9cIjIwMjMtMTEtMDhUMTI6MDM6MTMuMDA4WlwiXG4gIE93bmVyOm9iamVjdCAvLyB7SUQ6ICcwOTk3MWExOTc5ODAwZmI2MGZiYmMwMGFkYTUxZjdlMCd9XG4gIFNpemU6c3RyaW5nIC8vXCIyNTgzOVwiXG4gIFN0b3JhZ2VDbGFzczpzdHJpbmcgLy9cIlNUQU5EQVJEXCJcbn1cblxuLyoqXG4gKiBId29ic1NlcnZpY2Ug5Y2O5Li6T0JT5paH5Lu25pyN5YqhXG4gKiBAcHVibGljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEh3b2JzU2VydmljZSB7XG4gIG9ic0NsaWVudDpPYnNDbGllbnRcbiAgYnVja2V0TmFtZTpzdHJpbmdcbiAgaG9zdDpzdHJpbmdcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmhvc3QgPSBcImh0dHBzOi8vd2ViMy10ZXN0Lm9icy5jbi1zb3V0aC0xLm15aHVhd2VpY2xvdWQuY29tL1wiXG4gICAgICB0aGlzLmJ1Y2tldE5hbWUgPSBcIndlYjMtdGVzdFwiXG4gICAgICB0aGlzLm9ic0NsaWVudCA9IG5ldyBPYnNDbGllbnQoe1xuICAgICAgICBhY2Nlc3Nfa2V5X2lkOiAnNlVJRVQyMFdIVUk1VExYV09WTkEnLCAgICAgICBcbiAgICAgICAgc2VjcmV0X2FjY2Vzc19rZXk6ICdZYW9ZOEtqM1RlR1pIRWNCenBsVE1aaVBHTkwxM1kzZnJFYXZDMWtGJyxcbiAgICAgICAgLy8g6L+Z6YeM5Lul5Y2O5Y2XLeW5v+W3nuS4uuS+i++8jOWFtuS7luWcsOWMuuivt+aMieWunumZheaDheWGteWhq+WGmVxuICAgICAgICBzZXJ2ZXI6ICdodHRwczovL29icy5jbi1zb3V0aC0xLm15aHVhd2VpY2xvdWQuY29tJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOebruW9leWPiuajgOe0ouebuOWFs+WHveaVsFxuICAgKi9cbiAgbGlzdERpcihwcmVmaXgpOlByb21pc2U8e1xuICAgIGRpcnM6QXJyYXk8SHdvYnNEaXI+LFxuICAgIGZpbGVzOkFycmF5PEh3b2JzRmlsZT5cbiAgfT57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcbiAgICAgICAgdGhpcy5vYnNDbGllbnQubGlzdE9iamVjdHMoe1xuICAgICAgICAgIEJ1Y2tldCA6IHRoaXMuYnVja2V0TmFtZSxcbiAgICAgICAgICBQcmVmaXggOiBwcmVmaXgsXG4gICAgICAgICAgRGVsaW1pdGVyOiAnLydcbiAgICAgICAgfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYoZXJyKXsgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3ItLT4nICsgZXJyKTsgICBcbiAgICAgICAgICAgIHJlamVjdChlcnIpICAgIFxuICAgICAgICAgIH1lbHNleyAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RhdHVzLS0+JyArIHJlc3VsdC5Db21tb25Nc2cuU3RhdHVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0LkNvbW1vbk1zZy5TdGF0dXMgPCAzMDAgJiYgcmVzdWx0LkludGVyZmFjZVJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaiBpbiByZXN1bHQuSW50ZXJmYWNlUmVzdWx0LkNvbnRlbnRzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb250ZW50c1snICsgaiArICAnXTonKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdLZXktLT4nICsgcmVzdWx0LkludGVyZmFjZVJlc3VsdC5Db250ZW50c1tqXVsnS2V5J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ093bmVyW0lEXS0tPicgKyByZXN1bHQuSW50ZXJmYWNlUmVzdWx0LkNvbnRlbnRzW2pdWydPd25lciddWydJRCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGxldCBkaXJzOkh3b2JzRGlyW10gPSByZXN1bHQuSW50ZXJmYWNlUmVzdWx0LkNvbW1vblByZWZpeGVzXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlczpId29ic0ZpbGVbXSA9IHJlc3VsdC5JbnRlcmZhY2VSZXN1bHQuQ29udGVudHNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7ZGlyczpkaXJzLGZpbGVzOmZpbGVzfSkgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KVxuXG4gIH1cblxuICAvKipcbiAgICog5paH5Lu25LiK5Lyg55u45YWz5Ye95pWwXG4gICAqIEBwYXJhbSBmaWxlIFxuICAgKiBAcGFyYW0ga2V5IFxuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIGFzeW5jIHVwbG9hZEZpbGUoZmlsZTpGaWxlLGtleTpzdHJpbmcpOlByb21pc2U8UGFyc2UuT2JqZWN0PntcbiAgICAvLyBrZXkg5paH5Lu25LiK5Lyg5ZCO55qE5YWo6YOo6Lev5b6EXG4gICAgLy8gL3N0b3JhZ2UvPOWFrOWPuOi0puWllz4vPOW6lOeUqOWQjeensD4v5bm05pyI5pelLzzmlofku7blkI0+Ljzmlofku7blkI7nvIA+XG4gICAgLy8gL3N0b3JhZ2Uvd2ViMjAyMy885a2m5Y+3Pi/lubTmnIjml6UvPOaWh+S7tuWQjT4uPOaWh+S7tuWQjue8gD5cbiAgICBsZXQgYXR0YWNoID0gYXdhaXQgdGhpcy5jaGVja0ZpbGVFeGlzdHMoZmlsZSk7XG4gICAgaWYoYXR0YWNoPy5pZCkgcmV0dXJuIGF0dGFjaFxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcbiAgICAgICAgdGhpcy5vYnNDbGllbnQucHV0T2JqZWN0KHtcbiAgICAgICAgICAgICAgQnVja2V0IDogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICAgICAgICBLZXkgOiBrZXksXG4gICAgICAgICAgICAgIFNvdXJjZUZpbGUgOiBmaWxlXG4gICAgICAgIH0sICBhc3luYyAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYoZXJyKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3ItLT4nICsgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0YXR1cy0tPicgKyByZXN1bHQuQ29tbW9uTXNnLlN0YXR1cyk7XG4gICAgICAgICAgICAgICAgbGV0IGF0dGFjaCA9IGF3YWl0IHRoaXMuc2F2ZUF0dGFjaG1lbnQoZmlsZSxrZXkpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShhdHRhY2gpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KVxuICB9XG4gIEF0dGFjaG1lbnQgPSBQYXJzZS5PYmplY3QuZXh0ZW5kKFwiQXR0YWNobWVudFwiKVxuXG4gIGFzeW5jIGNoZWNrRmlsZUV4aXN0cyhmaWxlKTpQcm9taXNlPFBhcnNlLk9iamVjdD57XG4gICAgbGV0IGhhc2ggPSBhd2FpdCB0aGlzLmdldEZpbGVIYXNoKGZpbGUpXG4gICAgLy8g5paH5Lu2SEFTSOafpemHjSzpgb/lhY3ph43lpI3kuIrkvKBcbiAgICBsZXQgYXR0YWNoOlBhcnNlLk9iamVjdFxuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkF0dGFjaG1lbnRcIilcbiAgICBxdWVyeS5lcXVhbFRvKFwiaGFzaFwiLGhhc2gpO1xuICAgIHF1ZXJ5LmVxdWFsVG8oXCJzaXplXCIsZmlsZS5zaXplKTtcbiAgICBsZXQgZXhpc3RzOmFueSA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XG4gICAgaWYoIWV4aXN0cz8uaWQpIGV4aXN0cyA9IG5ldyB0aGlzLkF0dGFjaG1lbnQoKVxuICAgIGF0dGFjaCA9IGV4aXN0c1xuICAgIHJldHVybiBhdHRhY2hcbiAgfVxuICBhc3luYyBzYXZlQXR0YWNobWVudChmaWxlOkZpbGUsa2V5OnN0cmluZyl7XG4gICAgbGV0IGhhc2ggPSBhd2FpdCB0aGlzLmdldEZpbGVIYXNoKGZpbGUpXG4gICAgbGV0IGF0dGFjaCA9IGF3YWl0IHRoaXMuY2hlY2tGaWxlRXhpc3RzKGZpbGUpXG4gICAgYXR0YWNoLnNldChcIm5hbWVcIixmaWxlLm5hbWUpXG4gICAgYXR0YWNoLnNldChcInNpemVcIixmaWxlLnNpemUpXG4gICAgYXR0YWNoLnNldChcIm1pbWVcIixmaWxlLnR5cGUpXG4gICAgYXR0YWNoLnNldChcInVybFwiLHRoaXMuaG9zdCArIGtleSlcbiAgICBhdHRhY2guc2V0KFwiaGFzaFwiLGhhc2gpXG4gICAgYXR0YWNoID0gYXdhaXQgYXR0YWNoLnNhdmUoKVxuICAgIHJldHVybiBhdHRhY2hcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVIYXNoKGZpbGU6RmlsZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGFzeW5jIChldmVudDphbnkpID0+IHtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgYnVmZmVyKTtcbiAgICAgICAgY29uc3QgaGFzaEFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSk7XG4gICAgICAgIGNvbnN0IGhhc2hIZXggPSBoYXNoQXJyYXkubWFwKGJ5dGUgPT4gYnl0ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gICAgICAgIHJlc29sdmUoaGFzaEhleCk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXZlbnQ6YW55KSA9PiB7XG4gICAgICAgIHJlamVjdChldmVudC50YXJnZXQuZXJyb3IpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,10 +1,2 @@
1
-
2
- /**
3
- * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
- * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
- * 保留所有权利 All Rights Reserved.
6
- * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-upload/index.mjs
7
- */
8
- export*from"./nova-upload.service";
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL2luZGV4Lm1qcw==`
10
-
1
+ export * from './nova-upload.service';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3N0b3JhZ2Uvc2VydmljZS11cGxvYWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbm92YS11cGxvYWQuc2VydmljZSc7Il19