@lumi.new/sdk 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,7 +35,7 @@ The Lumi SDK provides methods to handle user authentication.
35
35
 
36
36
  ### Sign In
37
37
 
38
- To sign in a user, call the `signIn` method. This will open a popup window for the user to authenticate. Upon successful authentication, the access token will be automatically stored.
38
+ To sign in a user, call the `signIn` method. This will open a popup window for the user to authenticate. Upon successful authentication, the access token and user information will be automatically stored.
39
39
 
40
40
  ```typescript
41
41
  import { LumiClient } from '@lumi.new/sdk'
@@ -53,7 +53,7 @@ async function handleSignIn(lumi: LumiClient) {
53
53
 
54
54
  ### Sign Out
55
55
 
56
- To sign out a user, simply call the `signOut` method. This will clear the stored access token.
56
+ To sign out a user, simply call the `signOut` method. This will clear the stored access token and user information.
57
57
 
58
58
  ```typescript
59
59
  function handleSignOut(lumi: LumiClient) {
@@ -62,15 +62,15 @@ function handleSignOut(lumi: LumiClient) {
62
62
  }
63
63
  ```
64
64
 
65
- ### Get Current User
65
+ ### Refresh User Profile
66
66
 
67
- Fetch the profile of the currently authenticated user. This method requires a valid access token.
67
+ Fetch the latest profile of the currently authenticated user and update the local cache. This method requires a valid access token.
68
68
 
69
69
  ```typescript
70
70
  async function fetchUser(lumi: LumiClient) {
71
71
  if (lumi.auth.isAuthenticated) {
72
72
  try {
73
- const user = await lumi.auth.getUser()
73
+ const user = await lumi.auth.refreshUser()
74
74
  console.log('Current user:', user)
75
75
  } catch (error) {
76
76
  console.error('Failed to fetch user:', error)
@@ -93,14 +93,30 @@ const token = lumi.auth.accessToken
93
93
  const isAuthenticated = lumi.auth.isAuthenticated
94
94
  ```
95
95
 
96
+ ### Access User Information
97
+
98
+ You can directly access the cached user data. This data is available after a successful sign-in or a call to `refreshUser`.
99
+
100
+ ```typescript
101
+ // Get the user object from the cache
102
+ const user = lumi.auth.user
103
+
104
+ if (user) {
105
+ console.log('Current user from cache:', user.userName)
106
+ }
107
+ ```
108
+
96
109
  ### Listen for Auth Changes
97
110
 
98
- You can listen for changes in the authentication state, which is useful for reacting to sign-ins or sign-outs that happen in other browser tabs.
111
+ You can listen for changes in the authentication state. This is useful for reacting to sign-ins, sign-outs, or any direct modifications to the access token or user information, whether they happen in the current tab or another one.
99
112
 
100
113
  ```typescript
101
114
  function listenForAuthChanges(lumi: LumiClient) {
102
- const unsubscribe = lumi.auth.onAuthChange((isAuthenticated) => {
115
+ const unsubscribe = lumi.auth.onAuthChange(({ isAuthenticated, user }) => {
103
116
  console.log(`User is now ${isAuthenticated ? 'signed in' : 'signed out'}.`)
117
+ if (isAuthenticated) {
118
+ console.log('User details:', user)
119
+ }
104
120
  // You can update your UI based on the authentication state
105
121
  })
106
122
 
@@ -291,28 +307,39 @@ Initiates the sign-in process by opening a popup window.
291
307
  - `user` (`object`): The authenticated user's information.
292
308
  - `userId` (`string`): The user's unique identifier.
293
309
  - `email` (`string`): The user's email address.
310
+ - `userName` (`string`): The user's name.
311
+ - `createdTime` (`string`): The timestamp of when the user was created.
294
312
  - `accessToken` (`string`): The access token for the session.
295
313
 
296
314
  #### `signOut()`
297
315
 
298
- Signs out the current user by clearing the stored access token.
316
+ Signs out the current user by clearing the stored access token and user data.
299
317
 
300
- #### `getUser()`
318
+ #### `refreshUser()`
301
319
 
302
- Fetches the profile of the currently authenticated user. Requires a valid access token.
320
+ Fetches the latest profile of the currently authenticated user and updates the local cache. Requires a valid access token.
303
321
 
304
322
  **Returns:**
305
323
 
306
324
  - `Promise<object>`: A promise that resolves with the user's profile information.
307
325
  - `userId` (`string`): The user's unique identifier.
308
326
  - `email` (`string`): The user's email address.
327
+ - `userName` (`string`): The user's name.
328
+ - `createdTime` (`string`): The timestamp of when the user was created.
309
329
 
310
330
  #### `accessToken`
311
331
 
312
332
  A getter/setter for the access token.
313
333
 
314
334
  - **Get**: `lumi.auth.accessToken` (`string | null`): Returns the currently stored access token, or `null` if not authenticated.
315
- - **Set**: `lumi.auth.accessToken = 'YOUR_TOKEN'`: Sets the access token in local storage.
335
+ - **Set**: `lumi.auth.accessToken = 'YOUR_TOKEN'`: Sets the access token in local storage. Note: This will trigger the `onAuthChange` event.
336
+
337
+ #### `user`
338
+
339
+ A getter/setter for the cached user object. The user object is automatically set on sign-in and after calling `refreshUser`.
340
+
341
+ - **Get**: `lumi.auth.user` (`User | null`): Returns the currently cached user object, or `null` if it's not available.
342
+ - **Set**: `lumi.auth.user = userObject`: Sets the user object in local storage. Note: This will trigger the `onAuthChange` event.
316
343
 
317
344
  #### `isAuthenticated`
318
345
 
@@ -322,11 +349,11 @@ A getter that checks if a user is currently authenticated.
322
349
 
323
350
  #### `onAuthChange(callback)`
324
351
 
325
- Listens for changes in the authentication state (e.g., signing in or out in another tab).
352
+ Listens for changes in the authentication state. It triggers when `signIn()` or `signOut()` is called, or when `accessToken` or `user` are modified directly. This works across different browser tabs and within the same page.
326
353
 
327
354
  **Parameters:**
328
355
 
329
- - `callback` (`(isAuthenticated: boolean) => void`): A function that is called whenever the authentication state changes. It receives a boolean indicating whether the user is authenticated.
356
+ - `callback` (`({ isAuthenticated: boolean, user: User | null }) => void`): A function that is called whenever the authentication state changes. It receives an object containing the `isAuthenticated` flag and the `user` object from local storage.
330
357
 
331
358
  **Returns:**
332
359
 
@@ -334,14 +361,16 @@ Listens for changes in the authentication state (e.g., signing in or out in anot
334
361
 
335
362
  **Example:**
336
363
  ```typescript
337
- const unsubscribe = lumi.auth.onAuthChange(isAuthenticated => {
338
- console.log('Authentication state changed:', isAuthenticated);
364
+ const unsubscribe = lumi.auth.onAuthChange(({ isAuthenticated, user }) => {
365
+ console.log('Authentication state changed:', isAuthenticated)
339
366
  if (isAuthenticated) {
340
- // Fetch user data, update UI, etc.
367
+ // Typically you would update your UI here
368
+ console.log('User is now signed in:', user)
341
369
  } else {
342
- // Clear user data, redirect to login page, etc.
370
+ // And here as well
371
+ console.log('User is now signed out.')
343
372
  }
344
- });
373
+ })
345
374
 
346
375
  // When the component unmounts or you no longer need to listen for changes:
347
376
  // unsubscribe();
package/dist/index.d.mts CHANGED
@@ -60,6 +60,8 @@ declare enum MessageType {
60
60
  interface User {
61
61
  userId: string;
62
62
  email: string;
63
+ userName: string;
64
+ createdTime: string;
63
65
  }
64
66
  interface MessageSignInData {
65
67
  projectId: string;
@@ -84,17 +86,24 @@ interface MessageDataSend {
84
86
  declare class LumiAuthClient {
85
87
  #private;
86
88
  constructor(lumi: LumiClient);
89
+ /** 访问令牌 */
87
90
  get accessToken(): string | null;
88
91
  set accessToken(accessToken: string | null);
92
+ /** 用户 */
93
+ get user(): User | null;
94
+ set user(user: User | null);
89
95
  get isAuthenticated(): boolean;
90
96
  /** 登录 */
91
97
  signIn(): Promise<MessageSignInData>;
92
98
  /** 退出登录 */
93
99
  signOut(): void;
94
100
  /** 获取当前用户 */
95
- getUser(): Promise<User>;
101
+ refreshUser(): Promise<User>;
96
102
  /** 监听登录状态变化 */
97
- onAuthChange(callback: (isAuthenticated: boolean) => void): () => void;
103
+ onAuthChange(callback: (args: {
104
+ isAuthenticated: boolean;
105
+ user: User | null;
106
+ }) => void): () => void;
98
107
  }
99
108
 
100
109
  export { EntitiesClient, type Entity, EntityClient, LumiAuthClient, LumiClient, type LumiClientConfig, type MessageDataReceive, type MessageDataSend, type MessageInitData, type MessageSignInData, type User, createClient };
package/dist/index.d.ts CHANGED
@@ -60,6 +60,8 @@ declare enum MessageType {
60
60
  interface User {
61
61
  userId: string;
62
62
  email: string;
63
+ userName: string;
64
+ createdTime: string;
63
65
  }
64
66
  interface MessageSignInData {
65
67
  projectId: string;
@@ -84,17 +86,24 @@ interface MessageDataSend {
84
86
  declare class LumiAuthClient {
85
87
  #private;
86
88
  constructor(lumi: LumiClient);
89
+ /** 访问令牌 */
87
90
  get accessToken(): string | null;
88
91
  set accessToken(accessToken: string | null);
92
+ /** 用户 */
93
+ get user(): User | null;
94
+ set user(user: User | null);
89
95
  get isAuthenticated(): boolean;
90
96
  /** 登录 */
91
97
  signIn(): Promise<MessageSignInData>;
92
98
  /** 退出登录 */
93
99
  signOut(): void;
94
100
  /** 获取当前用户 */
95
- getUser(): Promise<User>;
101
+ refreshUser(): Promise<User>;
96
102
  /** 监听登录状态变化 */
97
- onAuthChange(callback: (isAuthenticated: boolean) => void): () => void;
103
+ onAuthChange(callback: (args: {
104
+ isAuthenticated: boolean;
105
+ user: User | null;
106
+ }) => void): () => void;
98
107
  }
99
108
 
100
109
  export { EntitiesClient, type Entity, EntityClient, LumiAuthClient, LumiClient, type LumiClientConfig, type MessageDataReceive, type MessageDataSend, type MessageInitData, type MessageSignInData, type User, createClient };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var C=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames,L=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var R=i=>{throw TypeError(i)};var x=(i,e,t)=>e in i?C(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,S=(i,e)=>{for(var t in e||(e={}))P.call(e,t)&&x(i,t,e[t]);if(L)for(var t of L(e))j.call(e,t)&&x(i,t,e[t]);return i};var _=(i,e)=>{for(var t in e)C(i,t,{get:e[t],enumerable:!0})},q=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of U(e))!P.call(i,a)&&a!==t&&C(i,a,{get:()=>e[a],enumerable:!(n=$(e,a))||n.enumerable});return i};var K=i=>q(C({},"__esModule",{value:!0}),i);var v=(i,e,t)=>e.has(i)||R("Cannot "+t);var r=(i,e,t)=>(v(i,e,"read from private field"),t?t.call(i):e.get(i)),h=(i,e,t)=>e.has(i)?R("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,t),d=(i,e,t,n)=>(v(i,e,"write to private field"),n?n.call(i,t):e.set(i,t),t);var u=(i,e,t)=>new Promise((n,a)=>{var s=l=>{try{f(t.next(l))}catch(y){a(y)}},g=l=>{try{f(t.throw(l))}catch(y){a(y)}},f=l=>l.done?n(l.value):Promise.resolve(l.value).then(s,g);f((t=t.apply(i,e)).next())});var G={};_(G,{EntitiesClient:()=>b,EntityClient:()=>E,LumiAuthClient:()=>w,LumiClient:()=>I,createClient:()=>B});module.exports=K(G);var M=require("ofetch");function c(i,e,t={}){return i.auth.accessToken&&(t.headers=S({Authorization:`Bearer ${i.auth.accessToken}`},t.headers)),(0,M.ofetch)(e,S({baseURL:i.config.apiBaseUrl},t))}function k(){var i,e;return(e=(i=document.querySelector('link[rel="icon"]'))==null?void 0:i.href)!=null?e:null}function D(){var i;return(i=document.title)!=null?i:null}var p,w=class{constructor(e){h(this,p);d(this,p,e)}get accessToken(){return localStorage.getItem("lumi-access-token")}set accessToken(e){e?localStorage.setItem("lumi-access-token",e):localStorage.removeItem("lumi-access-token")}get isAuthenticated(){return!!this.accessToken}signIn(){let n=(window.screen.width-800)/2,a=(window.screen.height-600)/2,s=window.open(r(this,p).config.authOrigin,"_blank",`width=800,height=600,left=${n},top=${a}`),g;return new Promise((f,l)=>{if(!s)return l(new Error("Open auth window failed"));let y=setInterval(()=>{s.closed&&l(new Error("Auth window closed"))},1e3),A=({data:m,origin:O,source:N})=>{if(!(O!==r(this,p).config.authOrigin||N!==s))switch(m==null?void 0:m.type){case"lumi-ready":{s.postMessage({type:"lumi-init",data:{projectId:r(this,p).config.projectId,icon:k(),title:D()}},r(this,p).config.authOrigin);break}case"lumi-sign-in":{if(m.data.projectId!==r(this,p).config.projectId)break;s.close(),this.accessToken=m.data.accessToken,f(m.data);break}}};window.addEventListener("message",A),g=()=>{clearInterval(y),window.removeEventListener("message",A)}}).finally(()=>g==null?void 0:g())}signOut(){this.accessToken=null}getUser(){return u(this,null,function*(){let e=yield c(r(this,p),"/lm/user/info",{method:"POST"});if(e.code!==200)throw new Error(e.message);return e.data})}onAuthChange(e){let t=n=>{(n.key==="lumi-access-token"||n.key===null)&&e(this.isAuthenticated)};return window.addEventListener("storage",t),()=>{window.removeEventListener("storage",t)}}};p=new WeakMap;var o,E=class{constructor(e,t){h(this,o);d(this,o,e),this.entityName=t}list(){return u(this,arguments,function*({filter:e,sort:t,limit:n,skip:a}={}){if(n){let s=yield c(r(this,o),this.uri("/find"),{method:"POST",body:{filter:e,sort:t,limit:n,skip:a}});if(s.code!==200)throw new Error(s.message);return s.data}else{let s=yield c(r(this,o),this.uri("/list"),{method:"POST",body:{filter:e,sort:t}});if(s.code!==200)throw new Error(s.message);return{total:s.data.length,list:s.data}}})}get(e){return u(this,null,function*(){let t=yield c(r(this,o),this.uri(`/${e}`),{method:"GET"});if(t.code!==200)throw new Error(t.message);return t.data})}create(e){return u(this,null,function*(){let t=yield c(r(this,o),this.uri(),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}createMany(e){return u(this,null,function*(){let t=yield c(r(this,o),this.uri("/batch"),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}update(e,t){return u(this,null,function*(){let n=yield c(r(this,o),this.uri(),{method:"PUT",body:{filter:{_id:e},update:t}});if(n.code!==200)throw new Error(n.message);return n.data})}delete(e){return u(this,null,function*(){let t=yield c(r(this,o),this.uri(`/${e}`),{method:"DELETE"});if(t.code!==200)throw new Error(t.message)})}deleteMany(e){return u(this,null,function*(){let t=yield c(r(this,o),this.uri("/batch-by-ids"),{method:"DELETE",params:{ids:e}});if(t.code!==200)throw new Error(t.message)})}uri(e=""){return`/lm/${r(this,o).config.projectId}/${this.entityName}/documents${e}`}};o=new WeakMap;var T,b=class{constructor(e){h(this,T);return d(this,T,e),new Proxy(this,{get(t,n){return n in t||(t[n]=new E(r(t,T),n)),t[n]}})}};T=new WeakMap;var I=class{constructor(e){this.config=e,this.auth=new w(this),this.entities=new b(this)}};function B(i){return new I(i)}0&&(module.exports={EntitiesClient,EntityClient,LumiAuthClient,LumiClient,createClient});
1
+ "use strict";var S=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames,R=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var M=i=>{throw TypeError(i)};var v=(i,e,t)=>e in i?S(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,I=(i,e)=>{for(var t in e||(e={}))P.call(e,t)&&v(i,t,e[t]);if(R)for(var t of R(e))K.call(e,t)&&v(i,t,e[t]);return i};var q=(i,e)=>{for(var t in e)S(i,t,{get:e[t],enumerable:!0})},B=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of _(e))!P.call(i,s)&&s!==t&&S(i,s,{get:()=>e[s],enumerable:!(r=j(e,s))||r.enumerable});return i};var G=i=>B(S({},"__esModule",{value:!0}),i);var D=(i,e,t)=>e.has(i)||M("Cannot "+t);var n=(i,e,t)=>(D(i,e,"read from private field"),t?t.call(i):e.get(i)),h=(i,e,t)=>e.has(i)?M("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,t),d=(i,e,t,r)=>(D(i,e,"write to private field"),r?r.call(i,t):e.set(i,t),t);var l=(i,e,t)=>new Promise((r,s)=>{var o=u=>{try{f(t.next(u))}catch(y){s(y)}},m=u=>{try{f(t.throw(u))}catch(y){s(y)}},f=u=>u.done?r(u.value):Promise.resolve(u.value).then(o,m);f((t=t.apply(i,e)).next())});var J={};q(J,{EntitiesClient:()=>T,EntityClient:()=>E,LumiAuthClient:()=>w,LumiClient:()=>C,createClient:()=>F});module.exports=G(J);var O=require("ofetch");function c(i,e,t={}){return i.auth.accessToken&&(t.headers=I({Authorization:`Bearer ${i.auth.accessToken}`},t.headers)),(0,O.ofetch)(e,I({baseURL:i.config.apiBaseUrl},t))}function k(){var i,e;return(e=(i=document.querySelector('link[rel="icon"]'))==null?void 0:i.href)!=null?e:null}function U(){var i;return(i=document.title)!=null?i:null}function A(i,e,t=localStorage){let r=t.getItem(i),s=e?JSON.stringify(e):null;s?t.setItem(i,s):t.removeItem(i),window.dispatchEvent(new StorageEvent("storage",{key:i,oldValue:r,newValue:s,storageArea:t}))}function x(i,e=localStorage){let t=e.getItem(i);try{return t?JSON.parse(t):null}catch(r){return null}}var g,w=class{constructor(e){h(this,g);d(this,g,e)}get accessToken(){return x("lumi-access-token")}set accessToken(e){A("lumi-access-token",e)}get user(){return x("lumi-user")}set user(e){A("lumi-user",e)}get isAuthenticated(){return!!this.accessToken}signIn(){let r=(window.screen.width-800)/2,s=(window.screen.height-600)/2,o=window.open(n(this,g).config.authOrigin,"_blank",`width=800,height=600,left=${r},top=${s}`),m;return new Promise((f,u)=>{if(!o)return u(new Error("Open auth window failed"));let y=setInterval(()=>{o.closed&&u(new Error("Auth window closed"))},1e3),L=({data:p,origin:N,source:$})=>{if(!(N!==n(this,g).config.authOrigin||$!==o))switch(p==null?void 0:p.type){case"lumi-ready":{o.postMessage({type:"lumi-init",data:{projectId:n(this,g).config.projectId,icon:k(),title:U()}},n(this,g).config.authOrigin);break}case"lumi-sign-in":{if(p.data.projectId!==n(this,g).config.projectId)break;o.close(),window.focus(),this.accessToken=p.data.accessToken,this.user=p.data.user,f(p.data);break}}};window.addEventListener("message",L),m=()=>{clearInterval(y),window.removeEventListener("message",L)}}).finally(()=>m==null?void 0:m())}signOut(){this.accessToken=null,this.user=null}refreshUser(){return l(this,null,function*(){let e=yield c(n(this,g),"/lm/user/info",{method:"POST"});if(e.code!==200)throw new Error(e.message);return this.user=e.data,e.data})}onAuthChange(e){let t=r=>{(r.key==="lumi-access-token"||r.key==="lumi-user"||r.key===null)&&e({isAuthenticated:this.isAuthenticated,user:this.user})};return window.addEventListener("storage",t),()=>{window.removeEventListener("storage",t)}}};g=new WeakMap;var a,E=class{constructor(e,t){h(this,a);d(this,a,e),this.entityName=t}list(){return l(this,arguments,function*({filter:e,sort:t,limit:r,skip:s}={}){if(r){let o=yield c(n(this,a),this.uri("/find"),{method:"POST",body:{filter:e,sort:t,limit:r,skip:s}});if(o.code!==200)throw new Error(o.message);return o.data}else{let o=yield c(n(this,a),this.uri("/list"),{method:"POST",body:{filter:e,sort:t}});if(o.code!==200)throw new Error(o.message);return{total:o.data.length,list:o.data}}})}get(e){return l(this,null,function*(){let t=yield c(n(this,a),this.uri(`/${e}`),{method:"GET"});if(t.code!==200)throw new Error(t.message);return t.data})}create(e){return l(this,null,function*(){let t=yield c(n(this,a),this.uri(),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}createMany(e){return l(this,null,function*(){let t=yield c(n(this,a),this.uri("/batch"),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}update(e,t){return l(this,null,function*(){let r=yield c(n(this,a),this.uri(),{method:"PUT",body:{filter:{_id:e},update:t}});if(r.code!==200)throw new Error(r.message);return r.data})}delete(e){return l(this,null,function*(){let t=yield c(n(this,a),this.uri(`/${e}`),{method:"DELETE"});if(t.code!==200)throw new Error(t.message)})}deleteMany(e){return l(this,null,function*(){let t=yield c(n(this,a),this.uri("/batch-by-ids"),{method:"DELETE",params:{ids:e}});if(t.code!==200)throw new Error(t.message)})}uri(e=""){return`/lm/${n(this,a).config.projectId}/${this.entityName}/documents${e}`}};a=new WeakMap;var b,T=class{constructor(e){h(this,b);return d(this,b,e),new Proxy(this,{get(t,r){return r in t||(t[r]=new E(n(t,b),r)),t[r]}})}};b=new WeakMap;var C=class{constructor(e){this.config=e,this.auth=new w(this),this.entities=new T(this)}};function F(i){return new C(i)}0&&(module.exports={EntitiesClient,EntityClient,LumiAuthClient,LumiClient,createClient});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/request.ts","../src/utils/common.ts","../src/core/auth-client.ts","../src/core/entity-client.ts","../src/core/entities-client.ts","../src/core/lumi-client.ts"],"sourcesContent":["export * from './core/auth-client'\nexport * from './core/entities-client'\nexport * from './core/entity-client'\nexport * from './core/lumi-client'\n","import type { FetchOptions } from 'ofetch'\nimport type { LumiClient } from '@/core/lumi-client'\nimport { ofetch } from 'ofetch'\n\nexport interface ApiResponse<T> {\n code: number\n message: string\n data: T\n}\n\nexport interface PaginationData<T> {\n total: number\n list: T[]\n}\n\nexport function request<T>(lumi: LumiClient, uri: string, options: FetchOptions<'json'> = {}): Promise<T> {\n if (lumi.auth.accessToken) {\n options.headers = {\n Authorization: `Bearer ${lumi.auth.accessToken}`,\n ...options.headers,\n }\n }\n\n return ofetch<T>(uri, {\n baseURL: lumi.config.apiBaseUrl,\n ...options,\n })\n}\n","export function getIcon(): string | null {\n return document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]')?.href ?? null\n}\n\nexport function getTitle(): string | null {\n return document.title ?? null\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse } from '@/lib/request'\nimport { MessageType, StorageKey } from '@/constants'\nimport { request } from '@/lib/request'\nimport { getIcon, getTitle } from '@/utils/common'\n\nexport interface User {\n userId: string\n email: string\n}\n\nexport interface MessageSignInData {\n projectId: string\n accessToken: string\n user: User\n}\n\nexport type MessageDataReceive = {\n type: MessageType.READY\n} | {\n type: MessageType.SIGN_IN\n data: MessageSignInData\n}\n\nexport interface MessageInitData {\n projectId: string\n icon: string | null\n title: string | null\n}\n\nexport interface MessageDataSend {\n type: MessageType.INIT\n data: MessageInitData\n}\n\nexport class LumiAuthClient {\n readonly #lumi: LumiClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n }\n\n public get accessToken(): string | null {\n return localStorage.getItem(StorageKey.ACCESS_TOKEN)\n }\n\n public set accessToken(accessToken: string | null) {\n if (accessToken)\n localStorage.setItem(StorageKey.ACCESS_TOKEN, accessToken)\n else\n localStorage.removeItem(StorageKey.ACCESS_TOKEN)\n }\n\n public get isAuthenticated(): boolean {\n return !!this.accessToken\n }\n\n /** 登录 */\n public signIn(): Promise<MessageSignInData> {\n const width = 800\n const height = 600\n const left = (window.screen.width - width) / 2\n const top = (window.screen.height - height) / 2\n const popup = window.open(this.#lumi.config.authOrigin, '_blank', `width=${width},height=${height},left=${left},top=${top}`)\n\n let cleanup: () => void\n return new Promise<MessageSignInData>((resolve, reject) => {\n if (!popup)\n return reject(new Error('Open auth window failed'))\n\n const timer = setInterval(() => {\n if (popup.closed)\n reject(new Error('Auth window closed'))\n }, 1000)\n\n const handleMessage = ({ data, origin, source }: MessageEvent<MessageDataReceive | null>): void => {\n if (origin !== this.#lumi.config.authOrigin || source !== popup)\n return\n\n switch (data?.type) {\n case MessageType.READY: {\n popup.postMessage({\n type: MessageType.INIT,\n data: {\n projectId: this.#lumi.config.projectId,\n icon: getIcon(),\n title: getTitle(),\n },\n } satisfies MessageDataSend, this.#lumi.config.authOrigin)\n break\n }\n case MessageType.SIGN_IN: {\n if (data.data.projectId !== this.#lumi.config.projectId)\n break\n popup.close()\n this.accessToken = data.data.accessToken\n resolve(data.data)\n break\n }\n }\n }\n window.addEventListener('message', handleMessage)\n\n cleanup = () => {\n clearInterval(timer)\n window.removeEventListener('message', handleMessage)\n }\n }).finally(() => cleanup?.())\n }\n\n /** 退出登录 */\n public signOut(): void {\n this.accessToken = null\n }\n\n /** 获取当前用户 */\n public async getUser(): Promise<User> {\n const res = await request<ApiResponse<User>>(this.#lumi, '/lm/user/info', {\n method: 'POST',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 监听登录状态变化 */\n public onAuthChange(callback: (isAuthenticated: boolean) => void): () => void {\n const handleStorageChange = (event: StorageEvent): void => {\n if (event.key === StorageKey.ACCESS_TOKEN || event.key === null)\n callback(this.isAuthenticated)\n }\n\n window.addEventListener('storage', handleStorageChange)\n\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n }\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse, PaginationData } from '@/lib/request'\nimport { request } from '@/lib/request'\n\nexport interface Entity extends Record<string, any> {\n id: string\n}\n\nexport class EntityClient {\n readonly #lumi: LumiClient\n public readonly entityName: string\n\n constructor(lumi: LumiClient, entityName: string) {\n this.#lumi = lumi\n this.entityName = entityName\n }\n\n /** 查询文档列表 */\n public async list({ filter, sort, limit, skip }: {\n filter?: any\n sort?: Record<string, 1 | -1>\n limit?: number\n skip?: number\n } = {}): Promise<PaginationData<Entity>> {\n if (!limit) {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/list'), {\n method: 'POST',\n body: { filter, sort },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return {\n total: res.data.length,\n list: res.data,\n }\n }\n else {\n const res = await request<ApiResponse<PaginationData<Entity>>>(this.#lumi, this.uri('/find'), {\n method: 'POST',\n body: { filter, sort, limit, skip },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n }\n\n /** 获取单个文档 */\n public async get(id: string): Promise<Entity | null> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(`/${id}`), {\n method: 'GET',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 创建文档 */\n public async create(data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 批量创建文档 */\n public async createMany(data: Record<string, any>[]): Promise<Entity[]> {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/batch'), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 更新文档 */\n public async update(id: string, data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'PUT',\n body: { filter: { _id: id }, update: data },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 删除文档 */\n public async delete(id: string): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri(`/${id}`), {\n method: 'DELETE',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n /** 批量删除文档 */\n public async deleteMany(ids: string[]): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri('/batch-by-ids'), {\n method: 'DELETE',\n params: { ids },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n private uri(suffix = ''): string {\n return `/lm/${this.#lumi.config.projectId}/${this.entityName}/documents${suffix}`\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport { EntityClient } from '@/core/entity-client'\n\nexport class EntitiesClient {\n readonly #lumi: LumiClient\n [key: string]: EntityClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n return new Proxy(this, {\n get(target: EntitiesClient, p: string) {\n if (!(p in target))\n target[p] = new EntityClient(target.#lumi, p)\n return target[p]\n },\n }) as this\n }\n}\n","import { LumiAuthClient } from '@/core/auth-client'\nimport { EntitiesClient } from '@/core/entities-client'\n\nexport interface LumiClientConfig {\n projectId: string\n apiBaseUrl: string\n authOrigin: string\n}\n\nexport class LumiClient {\n public config: LumiClientConfig\n\n public auth: LumiAuthClient\n public entities: EntitiesClient\n\n constructor(config: LumiClientConfig) {\n this.config = config\n this.auth = new LumiAuthClient(this)\n this.entities = new EntitiesClient(this)\n }\n}\n\nexport function createClient(config: LumiClientConfig): LumiClient {\n return new LumiClient(config)\n}\n"],"mappings":"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","names":["index_exports","__export","EntitiesClient","EntityClient","LumiAuthClient","LumiClient","createClient","__toCommonJS","import_ofetch","request","lumi","uri","options","__spreadValues","getIcon","_a","_b","getTitle","_lumi","LumiAuthClient","lumi","__privateAdd","__privateSet","accessToken","left","top","popup","__privateGet","cleanup","resolve","reject","timer","handleMessage","data","origin","source","getIcon","getTitle","__async","res","request","callback","handleStorageChange","event","_lumi","EntityClient","lumi","entityName","__privateAdd","__privateSet","__async","filter","sort","limit","skip","res","request","__privateGet","id","data","ids","suffix","_lumi","EntitiesClient","lumi","__privateAdd","__privateSet","target","p","EntityClient","__privateGet","LumiClient","config","LumiAuthClient","EntitiesClient","createClient"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/request.ts","../src/utils/common.ts","../src/utils/storage.ts","../src/core/auth-client.ts","../src/core/entity-client.ts","../src/core/entities-client.ts","../src/core/lumi-client.ts"],"sourcesContent":["export * from './core/auth-client'\nexport * from './core/entities-client'\nexport * from './core/entity-client'\nexport * from './core/lumi-client'\n","import type { FetchOptions } from 'ofetch'\nimport type { LumiClient } from '@/core/lumi-client'\nimport { ofetch } from 'ofetch'\n\nexport interface ApiResponse<T> {\n code: number\n message: string\n data: T\n}\n\nexport interface PaginationData<T> {\n total: number\n list: T[]\n}\n\nexport function request<T>(lumi: LumiClient, uri: string, options: FetchOptions<'json'> = {}): Promise<T> {\n if (lumi.auth.accessToken) {\n options.headers = {\n Authorization: `Bearer ${lumi.auth.accessToken}`,\n ...options.headers,\n }\n }\n\n return ofetch<T>(uri, {\n baseURL: lumi.config.apiBaseUrl,\n ...options,\n })\n}\n","export function getIcon(): string | null {\n return document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]')?.href ?? null\n}\n\nexport function getTitle(): string | null {\n return document.title ?? null\n}\n","import type { StorageKey } from '@/constants'\n\nexport function setStorage<T>(key: StorageKey, value: T, storage: Storage = localStorage): void {\n const oldValue = storage.getItem(key)\n const newValue = value ? JSON.stringify(value) : null\n if (newValue)\n storage.setItem(key, newValue)\n else\n storage.removeItem(key)\n\n window.dispatchEvent(new StorageEvent('storage', {\n key,\n oldValue,\n newValue,\n storageArea: storage,\n }))\n}\n\nexport function getStorage<T>(key: StorageKey, storage: Storage = localStorage): T | null {\n const value = storage.getItem(key)\n try {\n return value ? JSON.parse(value) : null\n }\n catch (_e) {\n return null\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse } from '@/lib/request'\nimport { MessageType, StorageKey } from '@/constants'\nimport { request } from '@/lib/request'\nimport { getIcon, getTitle } from '@/utils/common'\nimport { getStorage, setStorage } from '@/utils/storage'\n\nexport interface User {\n userId: string\n email: string\n userName: string\n createdTime: string\n}\n\nexport interface MessageSignInData {\n projectId: string\n accessToken: string\n user: User\n}\n\nexport type MessageDataReceive = {\n type: MessageType.READY\n} | {\n type: MessageType.SIGN_IN\n data: MessageSignInData\n}\n\nexport interface MessageInitData {\n projectId: string\n icon: string | null\n title: string | null\n}\n\nexport interface MessageDataSend {\n type: MessageType.INIT\n data: MessageInitData\n}\n\nexport class LumiAuthClient {\n readonly #lumi: LumiClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n }\n\n /** 访问令牌 */\n public get accessToken(): string | null {\n return getStorage<string>(StorageKey.ACCESS_TOKEN)\n }\n\n public set accessToken(accessToken: string | null) {\n setStorage(StorageKey.ACCESS_TOKEN, accessToken)\n }\n\n /** 用户 */\n public get user(): User | null {\n return getStorage<User>(StorageKey.USER)\n }\n\n public set user(user: User | null) {\n setStorage(StorageKey.USER, user)\n }\n\n public get isAuthenticated(): boolean {\n return !!this.accessToken\n }\n\n /** 登录 */\n public signIn(): Promise<MessageSignInData> {\n const width = 800\n const height = 600\n const left = (window.screen.width - width) / 2\n const top = (window.screen.height - height) / 2\n const popup = window.open(this.#lumi.config.authOrigin, '_blank', `width=${width},height=${height},left=${left},top=${top}`)\n\n let cleanup: () => void\n return new Promise<MessageSignInData>((resolve, reject) => {\n if (!popup)\n return reject(new Error('Open auth window failed'))\n\n const timer = setInterval(() => {\n if (popup.closed)\n reject(new Error('Auth window closed'))\n }, 1000)\n\n const handleMessage = ({ data, origin, source }: MessageEvent<MessageDataReceive | null>): void => {\n if (origin !== this.#lumi.config.authOrigin || source !== popup)\n return\n\n switch (data?.type) {\n case MessageType.READY: {\n popup.postMessage({\n type: MessageType.INIT,\n data: {\n projectId: this.#lumi.config.projectId,\n icon: getIcon(),\n title: getTitle(),\n },\n } satisfies MessageDataSend, this.#lumi.config.authOrigin)\n break\n }\n case MessageType.SIGN_IN: {\n if (data.data.projectId !== this.#lumi.config.projectId)\n break\n popup.close()\n window.focus()\n this.accessToken = data.data.accessToken\n this.user = data.data.user\n resolve(data.data)\n break\n }\n }\n }\n window.addEventListener('message', handleMessage)\n\n cleanup = () => {\n clearInterval(timer)\n window.removeEventListener('message', handleMessage)\n }\n }).finally(() => cleanup?.())\n }\n\n /** 退出登录 */\n public signOut(): void {\n this.accessToken = null\n this.user = null\n }\n\n /** 获取当前用户 */\n public async refreshUser(): Promise<User> {\n const res = await request<ApiResponse<User>>(this.#lumi, '/lm/user/info', {\n method: 'POST',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n this.user = res.data\n return res.data\n }\n\n /** 监听登录状态变化 */\n public onAuthChange(callback: (args: {\n isAuthenticated: boolean\n user: User | null\n }) => void): () => void {\n const handleStorageChange = (event: StorageEvent): void => {\n if (event.key === StorageKey.ACCESS_TOKEN || event.key === StorageKey.USER || event.key === null) {\n callback({\n isAuthenticated: this.isAuthenticated,\n user: this.user,\n })\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n }\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse, PaginationData } from '@/lib/request'\nimport { request } from '@/lib/request'\n\nexport interface Entity extends Record<string, any> {\n id: string\n}\n\nexport class EntityClient {\n readonly #lumi: LumiClient\n public readonly entityName: string\n\n constructor(lumi: LumiClient, entityName: string) {\n this.#lumi = lumi\n this.entityName = entityName\n }\n\n /** 查询文档列表 */\n public async list({ filter, sort, limit, skip }: {\n filter?: any\n sort?: Record<string, 1 | -1>\n limit?: number\n skip?: number\n } = {}): Promise<PaginationData<Entity>> {\n if (!limit) {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/list'), {\n method: 'POST',\n body: { filter, sort },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return {\n total: res.data.length,\n list: res.data,\n }\n }\n else {\n const res = await request<ApiResponse<PaginationData<Entity>>>(this.#lumi, this.uri('/find'), {\n method: 'POST',\n body: { filter, sort, limit, skip },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n }\n\n /** 获取单个文档 */\n public async get(id: string): Promise<Entity | null> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(`/${id}`), {\n method: 'GET',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 创建文档 */\n public async create(data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 批量创建文档 */\n public async createMany(data: Record<string, any>[]): Promise<Entity[]> {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/batch'), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 更新文档 */\n public async update(id: string, data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'PUT',\n body: { filter: { _id: id }, update: data },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 删除文档 */\n public async delete(id: string): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri(`/${id}`), {\n method: 'DELETE',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n /** 批量删除文档 */\n public async deleteMany(ids: string[]): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri('/batch-by-ids'), {\n method: 'DELETE',\n params: { ids },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n private uri(suffix = ''): string {\n return `/lm/${this.#lumi.config.projectId}/${this.entityName}/documents${suffix}`\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport { EntityClient } from '@/core/entity-client'\n\nexport class EntitiesClient {\n readonly #lumi: LumiClient\n [key: string]: EntityClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n return new Proxy(this, {\n get(target: EntitiesClient, p: string) {\n if (!(p in target))\n target[p] = new EntityClient(target.#lumi, p)\n return target[p]\n },\n }) as this\n }\n}\n","import { LumiAuthClient } from '@/core/auth-client'\nimport { EntitiesClient } from '@/core/entities-client'\n\nexport interface LumiClientConfig {\n projectId: string\n apiBaseUrl: string\n authOrigin: string\n}\n\nexport class LumiClient {\n public config: LumiClientConfig\n\n public auth: LumiAuthClient\n public entities: EntitiesClient\n\n constructor(config: LumiClientConfig) {\n this.config = config\n this.auth = new LumiAuthClient(this)\n this.entities = new EntitiesClient(this)\n }\n}\n\nexport function createClient(config: LumiClientConfig): LumiClient {\n return new LumiClient(config)\n}\n"],"mappings":"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","names":["index_exports","__export","EntitiesClient","EntityClient","LumiAuthClient","LumiClient","createClient","__toCommonJS","import_ofetch","request","lumi","uri","options","__spreadValues","getIcon","_a","_b","getTitle","setStorage","key","value","storage","oldValue","newValue","getStorage","_e","_lumi","LumiAuthClient","lumi","__privateAdd","__privateSet","getStorage","accessToken","setStorage","user","left","top","popup","__privateGet","cleanup","resolve","reject","timer","handleMessage","data","origin","source","getIcon","getTitle","__async","res","request","callback","handleStorageChange","event","_lumi","EntityClient","lumi","entityName","__privateAdd","__privateSet","__async","filter","sort","limit","skip","res","request","__privateGet","id","data","ids","suffix","_lumi","EntitiesClient","lumi","__privateAdd","__privateSet","target","p","EntityClient","__privateGet","LumiClient","config","LumiAuthClient","EntitiesClient","createClient"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var D=Object.defineProperty;var A=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var x=i=>{throw TypeError(i)};var L=(i,e,t)=>e in i?D(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,C=(i,e)=>{for(var t in e||(e={}))O.call(e,t)&&L(i,t,e[t]);if(A)for(var t of A(e))N.call(e,t)&&L(i,t,e[t]);return i};var P=(i,e,t)=>e.has(i)||x("Cannot "+t);var r=(i,e,t)=>(P(i,e,"read from private field"),t?t.call(i):e.get(i)),h=(i,e,t)=>e.has(i)?x("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,t),d=(i,e,t,n)=>(P(i,e,"write to private field"),n?n.call(i,t):e.set(i,t),t);var l=(i,e,t)=>new Promise((n,p)=>{var s=c=>{try{f(t.next(c))}catch(y){p(y)}},g=c=>{try{f(t.throw(c))}catch(y){p(y)}},f=c=>c.done?n(c.value):Promise.resolve(c.value).then(s,g);f((t=t.apply(i,e)).next())});import{ofetch as $}from"ofetch";function a(i,e,t={}){return i.auth.accessToken&&(t.headers=C({Authorization:`Bearer ${i.auth.accessToken}`},t.headers)),$(e,C({baseURL:i.config.apiBaseUrl},t))}function R(){var i,e;return(e=(i=document.querySelector('link[rel="icon"]'))==null?void 0:i.href)!=null?e:null}function v(){var i;return(i=document.title)!=null?i:null}var u,E=class{constructor(e){h(this,u);d(this,u,e)}get accessToken(){return localStorage.getItem("lumi-access-token")}set accessToken(e){e?localStorage.setItem("lumi-access-token",e):localStorage.removeItem("lumi-access-token")}get isAuthenticated(){return!!this.accessToken}signIn(){let n=(window.screen.width-800)/2,p=(window.screen.height-600)/2,s=window.open(r(this,u).config.authOrigin,"_blank",`width=800,height=600,left=${n},top=${p}`),g;return new Promise((f,c)=>{if(!s)return c(new Error("Open auth window failed"));let y=setInterval(()=>{s.closed&&c(new Error("Auth window closed"))},1e3),S=({data:m,origin:M,source:k})=>{if(!(M!==r(this,u).config.authOrigin||k!==s))switch(m==null?void 0:m.type){case"lumi-ready":{s.postMessage({type:"lumi-init",data:{projectId:r(this,u).config.projectId,icon:R(),title:v()}},r(this,u).config.authOrigin);break}case"lumi-sign-in":{if(m.data.projectId!==r(this,u).config.projectId)break;s.close(),this.accessToken=m.data.accessToken,f(m.data);break}}};window.addEventListener("message",S),g=()=>{clearInterval(y),window.removeEventListener("message",S)}}).finally(()=>g==null?void 0:g())}signOut(){this.accessToken=null}getUser(){return l(this,null,function*(){let e=yield a(r(this,u),"/lm/user/info",{method:"POST"});if(e.code!==200)throw new Error(e.message);return e.data})}onAuthChange(e){let t=n=>{(n.key==="lumi-access-token"||n.key===null)&&e(this.isAuthenticated)};return window.addEventListener("storage",t),()=>{window.removeEventListener("storage",t)}}};u=new WeakMap;var o,b=class{constructor(e,t){h(this,o);d(this,o,e),this.entityName=t}list(){return l(this,arguments,function*({filter:e,sort:t,limit:n,skip:p}={}){if(n){let s=yield a(r(this,o),this.uri("/find"),{method:"POST",body:{filter:e,sort:t,limit:n,skip:p}});if(s.code!==200)throw new Error(s.message);return s.data}else{let s=yield a(r(this,o),this.uri("/list"),{method:"POST",body:{filter:e,sort:t}});if(s.code!==200)throw new Error(s.message);return{total:s.data.length,list:s.data}}})}get(e){return l(this,null,function*(){let t=yield a(r(this,o),this.uri(`/${e}`),{method:"GET"});if(t.code!==200)throw new Error(t.message);return t.data})}create(e){return l(this,null,function*(){let t=yield a(r(this,o),this.uri(),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}createMany(e){return l(this,null,function*(){let t=yield a(r(this,o),this.uri("/batch"),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}update(e,t){return l(this,null,function*(){let n=yield a(r(this,o),this.uri(),{method:"PUT",body:{filter:{_id:e},update:t}});if(n.code!==200)throw new Error(n.message);return n.data})}delete(e){return l(this,null,function*(){let t=yield a(r(this,o),this.uri(`/${e}`),{method:"DELETE"});if(t.code!==200)throw new Error(t.message)})}deleteMany(e){return l(this,null,function*(){let t=yield a(r(this,o),this.uri("/batch-by-ids"),{method:"DELETE",params:{ids:e}});if(t.code!==200)throw new Error(t.message)})}uri(e=""){return`/lm/${r(this,o).config.projectId}/${this.entityName}/documents${e}`}};o=new WeakMap;var w,T=class{constructor(e){h(this,w);return d(this,w,e),new Proxy(this,{get(t,n){return n in t||(t[n]=new b(r(t,w),n)),t[n]}})}};w=new WeakMap;var I=class{constructor(e){this.config=e,this.auth=new E(this),this.entities=new T(this)}};function ee(i){return new I(i)}export{T as EntitiesClient,b as EntityClient,E as LumiAuthClient,I as LumiClient,ee as createClient};
1
+ var U=Object.defineProperty;var L=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable;var v=i=>{throw TypeError(i)};var R=(i,e,t)=>e in i?U(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,S=(i,e)=>{for(var t in e||(e={}))N.call(e,t)&&R(i,t,e[t]);if(L)for(var t of L(e))$.call(e,t)&&R(i,t,e[t]);return i};var P=(i,e,t)=>e.has(i)||v("Cannot "+t);var n=(i,e,t)=>(P(i,e,"read from private field"),t?t.call(i):e.get(i)),h=(i,e,t)=>e.has(i)?v("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,t),d=(i,e,t,r)=>(P(i,e,"write to private field"),r?r.call(i,t):e.set(i,t),t);var l=(i,e,t)=>new Promise((r,c)=>{var s=u=>{try{f(t.next(u))}catch(y){c(y)}},m=u=>{try{f(t.throw(u))}catch(y){c(y)}},f=u=>u.done?r(u.value):Promise.resolve(u.value).then(s,m);f((t=t.apply(i,e)).next())});import{ofetch as j}from"ofetch";function a(i,e,t={}){return i.auth.accessToken&&(t.headers=S({Authorization:`Bearer ${i.auth.accessToken}`},t.headers)),j(e,S({baseURL:i.config.apiBaseUrl},t))}function M(){var i,e;return(e=(i=document.querySelector('link[rel="icon"]'))==null?void 0:i.href)!=null?e:null}function D(){var i;return(i=document.title)!=null?i:null}function C(i,e,t=localStorage){let r=t.getItem(i),c=e?JSON.stringify(e):null;c?t.setItem(i,c):t.removeItem(i),window.dispatchEvent(new StorageEvent("storage",{key:i,oldValue:r,newValue:c,storageArea:t}))}function I(i,e=localStorage){let t=e.getItem(i);try{return t?JSON.parse(t):null}catch(r){return null}}var g,E=class{constructor(e){h(this,g);d(this,g,e)}get accessToken(){return I("lumi-access-token")}set accessToken(e){C("lumi-access-token",e)}get user(){return I("lumi-user")}set user(e){C("lumi-user",e)}get isAuthenticated(){return!!this.accessToken}signIn(){let r=(window.screen.width-800)/2,c=(window.screen.height-600)/2,s=window.open(n(this,g).config.authOrigin,"_blank",`width=800,height=600,left=${r},top=${c}`),m;return new Promise((f,u)=>{if(!s)return u(new Error("Open auth window failed"));let y=setInterval(()=>{s.closed&&u(new Error("Auth window closed"))},1e3),x=({data:p,origin:O,source:k})=>{if(!(O!==n(this,g).config.authOrigin||k!==s))switch(p==null?void 0:p.type){case"lumi-ready":{s.postMessage({type:"lumi-init",data:{projectId:n(this,g).config.projectId,icon:M(),title:D()}},n(this,g).config.authOrigin);break}case"lumi-sign-in":{if(p.data.projectId!==n(this,g).config.projectId)break;s.close(),window.focus(),this.accessToken=p.data.accessToken,this.user=p.data.user,f(p.data);break}}};window.addEventListener("message",x),m=()=>{clearInterval(y),window.removeEventListener("message",x)}}).finally(()=>m==null?void 0:m())}signOut(){this.accessToken=null,this.user=null}refreshUser(){return l(this,null,function*(){let e=yield a(n(this,g),"/lm/user/info",{method:"POST"});if(e.code!==200)throw new Error(e.message);return this.user=e.data,e.data})}onAuthChange(e){let t=r=>{(r.key==="lumi-access-token"||r.key==="lumi-user"||r.key===null)&&e({isAuthenticated:this.isAuthenticated,user:this.user})};return window.addEventListener("storage",t),()=>{window.removeEventListener("storage",t)}}};g=new WeakMap;var o,T=class{constructor(e,t){h(this,o);d(this,o,e),this.entityName=t}list(){return l(this,arguments,function*({filter:e,sort:t,limit:r,skip:c}={}){if(r){let s=yield a(n(this,o),this.uri("/find"),{method:"POST",body:{filter:e,sort:t,limit:r,skip:c}});if(s.code!==200)throw new Error(s.message);return s.data}else{let s=yield a(n(this,o),this.uri("/list"),{method:"POST",body:{filter:e,sort:t}});if(s.code!==200)throw new Error(s.message);return{total:s.data.length,list:s.data}}})}get(e){return l(this,null,function*(){let t=yield a(n(this,o),this.uri(`/${e}`),{method:"GET"});if(t.code!==200)throw new Error(t.message);return t.data})}create(e){return l(this,null,function*(){let t=yield a(n(this,o),this.uri(),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}createMany(e){return l(this,null,function*(){let t=yield a(n(this,o),this.uri("/batch"),{method:"POST",body:e});if(t.code!==200)throw new Error(t.message);return t.data})}update(e,t){return l(this,null,function*(){let r=yield a(n(this,o),this.uri(),{method:"PUT",body:{filter:{_id:e},update:t}});if(r.code!==200)throw new Error(r.message);return r.data})}delete(e){return l(this,null,function*(){let t=yield a(n(this,o),this.uri(`/${e}`),{method:"DELETE"});if(t.code!==200)throw new Error(t.message)})}deleteMany(e){return l(this,null,function*(){let t=yield a(n(this,o),this.uri("/batch-by-ids"),{method:"DELETE",params:{ids:e}});if(t.code!==200)throw new Error(t.message)})}uri(e=""){return`/lm/${n(this,o).config.projectId}/${this.entityName}/documents${e}`}};o=new WeakMap;var w,b=class{constructor(e){h(this,w);return d(this,w,e),new Proxy(this,{get(t,r){return r in t||(t[r]=new T(n(t,w),r)),t[r]}})}};w=new WeakMap;var A=class{constructor(e){this.config=e,this.auth=new E(this),this.entities=new b(this)}};function ne(i){return new A(i)}export{b as EntitiesClient,T as EntityClient,E as LumiAuthClient,A as LumiClient,ne as createClient};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/request.ts","../src/utils/common.ts","../src/core/auth-client.ts","../src/core/entity-client.ts","../src/core/entities-client.ts","../src/core/lumi-client.ts"],"sourcesContent":["import type { FetchOptions } from 'ofetch'\nimport type { LumiClient } from '@/core/lumi-client'\nimport { ofetch } from 'ofetch'\n\nexport interface ApiResponse<T> {\n code: number\n message: string\n data: T\n}\n\nexport interface PaginationData<T> {\n total: number\n list: T[]\n}\n\nexport function request<T>(lumi: LumiClient, uri: string, options: FetchOptions<'json'> = {}): Promise<T> {\n if (lumi.auth.accessToken) {\n options.headers = {\n Authorization: `Bearer ${lumi.auth.accessToken}`,\n ...options.headers,\n }\n }\n\n return ofetch<T>(uri, {\n baseURL: lumi.config.apiBaseUrl,\n ...options,\n })\n}\n","export function getIcon(): string | null {\n return document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]')?.href ?? null\n}\n\nexport function getTitle(): string | null {\n return document.title ?? null\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse } from '@/lib/request'\nimport { MessageType, StorageKey } from '@/constants'\nimport { request } from '@/lib/request'\nimport { getIcon, getTitle } from '@/utils/common'\n\nexport interface User {\n userId: string\n email: string\n}\n\nexport interface MessageSignInData {\n projectId: string\n accessToken: string\n user: User\n}\n\nexport type MessageDataReceive = {\n type: MessageType.READY\n} | {\n type: MessageType.SIGN_IN\n data: MessageSignInData\n}\n\nexport interface MessageInitData {\n projectId: string\n icon: string | null\n title: string | null\n}\n\nexport interface MessageDataSend {\n type: MessageType.INIT\n data: MessageInitData\n}\n\nexport class LumiAuthClient {\n readonly #lumi: LumiClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n }\n\n public get accessToken(): string | null {\n return localStorage.getItem(StorageKey.ACCESS_TOKEN)\n }\n\n public set accessToken(accessToken: string | null) {\n if (accessToken)\n localStorage.setItem(StorageKey.ACCESS_TOKEN, accessToken)\n else\n localStorage.removeItem(StorageKey.ACCESS_TOKEN)\n }\n\n public get isAuthenticated(): boolean {\n return !!this.accessToken\n }\n\n /** 登录 */\n public signIn(): Promise<MessageSignInData> {\n const width = 800\n const height = 600\n const left = (window.screen.width - width) / 2\n const top = (window.screen.height - height) / 2\n const popup = window.open(this.#lumi.config.authOrigin, '_blank', `width=${width},height=${height},left=${left},top=${top}`)\n\n let cleanup: () => void\n return new Promise<MessageSignInData>((resolve, reject) => {\n if (!popup)\n return reject(new Error('Open auth window failed'))\n\n const timer = setInterval(() => {\n if (popup.closed)\n reject(new Error('Auth window closed'))\n }, 1000)\n\n const handleMessage = ({ data, origin, source }: MessageEvent<MessageDataReceive | null>): void => {\n if (origin !== this.#lumi.config.authOrigin || source !== popup)\n return\n\n switch (data?.type) {\n case MessageType.READY: {\n popup.postMessage({\n type: MessageType.INIT,\n data: {\n projectId: this.#lumi.config.projectId,\n icon: getIcon(),\n title: getTitle(),\n },\n } satisfies MessageDataSend, this.#lumi.config.authOrigin)\n break\n }\n case MessageType.SIGN_IN: {\n if (data.data.projectId !== this.#lumi.config.projectId)\n break\n popup.close()\n this.accessToken = data.data.accessToken\n resolve(data.data)\n break\n }\n }\n }\n window.addEventListener('message', handleMessage)\n\n cleanup = () => {\n clearInterval(timer)\n window.removeEventListener('message', handleMessage)\n }\n }).finally(() => cleanup?.())\n }\n\n /** 退出登录 */\n public signOut(): void {\n this.accessToken = null\n }\n\n /** 获取当前用户 */\n public async getUser(): Promise<User> {\n const res = await request<ApiResponse<User>>(this.#lumi, '/lm/user/info', {\n method: 'POST',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 监听登录状态变化 */\n public onAuthChange(callback: (isAuthenticated: boolean) => void): () => void {\n const handleStorageChange = (event: StorageEvent): void => {\n if (event.key === StorageKey.ACCESS_TOKEN || event.key === null)\n callback(this.isAuthenticated)\n }\n\n window.addEventListener('storage', handleStorageChange)\n\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n }\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse, PaginationData } from '@/lib/request'\nimport { request } from '@/lib/request'\n\nexport interface Entity extends Record<string, any> {\n id: string\n}\n\nexport class EntityClient {\n readonly #lumi: LumiClient\n public readonly entityName: string\n\n constructor(lumi: LumiClient, entityName: string) {\n this.#lumi = lumi\n this.entityName = entityName\n }\n\n /** 查询文档列表 */\n public async list({ filter, sort, limit, skip }: {\n filter?: any\n sort?: Record<string, 1 | -1>\n limit?: number\n skip?: number\n } = {}): Promise<PaginationData<Entity>> {\n if (!limit) {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/list'), {\n method: 'POST',\n body: { filter, sort },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return {\n total: res.data.length,\n list: res.data,\n }\n }\n else {\n const res = await request<ApiResponse<PaginationData<Entity>>>(this.#lumi, this.uri('/find'), {\n method: 'POST',\n body: { filter, sort, limit, skip },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n }\n\n /** 获取单个文档 */\n public async get(id: string): Promise<Entity | null> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(`/${id}`), {\n method: 'GET',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 创建文档 */\n public async create(data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 批量创建文档 */\n public async createMany(data: Record<string, any>[]): Promise<Entity[]> {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/batch'), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 更新文档 */\n public async update(id: string, data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'PUT',\n body: { filter: { _id: id }, update: data },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 删除文档 */\n public async delete(id: string): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri(`/${id}`), {\n method: 'DELETE',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n /** 批量删除文档 */\n public async deleteMany(ids: string[]): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri('/batch-by-ids'), {\n method: 'DELETE',\n params: { ids },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n private uri(suffix = ''): string {\n return `/lm/${this.#lumi.config.projectId}/${this.entityName}/documents${suffix}`\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport { EntityClient } from '@/core/entity-client'\n\nexport class EntitiesClient {\n readonly #lumi: LumiClient\n [key: string]: EntityClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n return new Proxy(this, {\n get(target: EntitiesClient, p: string) {\n if (!(p in target))\n target[p] = new EntityClient(target.#lumi, p)\n return target[p]\n },\n }) as this\n }\n}\n","import { LumiAuthClient } from '@/core/auth-client'\nimport { EntitiesClient } from '@/core/entities-client'\n\nexport interface LumiClientConfig {\n projectId: string\n apiBaseUrl: string\n authOrigin: string\n}\n\nexport class LumiClient {\n public config: LumiClientConfig\n\n public auth: LumiAuthClient\n public entities: EntitiesClient\n\n constructor(config: LumiClientConfig) {\n this.config = config\n this.auth = new LumiAuthClient(this)\n this.entities = new EntitiesClient(this)\n }\n}\n\nexport function createClient(config: LumiClientConfig): LumiClient {\n return new LumiClient(config)\n}\n"],"mappings":"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","names":["ofetch","request","lumi","uri","options","__spreadValues","ofetch","getIcon","_a","_b","getTitle","_lumi","LumiAuthClient","lumi","__privateAdd","__privateSet","accessToken","left","top","popup","__privateGet","cleanup","resolve","reject","timer","handleMessage","data","origin","source","getIcon","getTitle","__async","res","request","callback","handleStorageChange","event","_lumi","EntityClient","lumi","entityName","__privateAdd","__privateSet","__async","filter","sort","limit","skip","res","request","__privateGet","id","data","ids","suffix","_lumi","EntitiesClient","lumi","__privateAdd","__privateSet","target","p","EntityClient","__privateGet","LumiClient","config","LumiAuthClient","EntitiesClient","createClient"]}
1
+ {"version":3,"sources":["../src/lib/request.ts","../src/utils/common.ts","../src/utils/storage.ts","../src/core/auth-client.ts","../src/core/entity-client.ts","../src/core/entities-client.ts","../src/core/lumi-client.ts"],"sourcesContent":["import type { FetchOptions } from 'ofetch'\nimport type { LumiClient } from '@/core/lumi-client'\nimport { ofetch } from 'ofetch'\n\nexport interface ApiResponse<T> {\n code: number\n message: string\n data: T\n}\n\nexport interface PaginationData<T> {\n total: number\n list: T[]\n}\n\nexport function request<T>(lumi: LumiClient, uri: string, options: FetchOptions<'json'> = {}): Promise<T> {\n if (lumi.auth.accessToken) {\n options.headers = {\n Authorization: `Bearer ${lumi.auth.accessToken}`,\n ...options.headers,\n }\n }\n\n return ofetch<T>(uri, {\n baseURL: lumi.config.apiBaseUrl,\n ...options,\n })\n}\n","export function getIcon(): string | null {\n return document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]')?.href ?? null\n}\n\nexport function getTitle(): string | null {\n return document.title ?? null\n}\n","import type { StorageKey } from '@/constants'\n\nexport function setStorage<T>(key: StorageKey, value: T, storage: Storage = localStorage): void {\n const oldValue = storage.getItem(key)\n const newValue = value ? JSON.stringify(value) : null\n if (newValue)\n storage.setItem(key, newValue)\n else\n storage.removeItem(key)\n\n window.dispatchEvent(new StorageEvent('storage', {\n key,\n oldValue,\n newValue,\n storageArea: storage,\n }))\n}\n\nexport function getStorage<T>(key: StorageKey, storage: Storage = localStorage): T | null {\n const value = storage.getItem(key)\n try {\n return value ? JSON.parse(value) : null\n }\n catch (_e) {\n return null\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse } from '@/lib/request'\nimport { MessageType, StorageKey } from '@/constants'\nimport { request } from '@/lib/request'\nimport { getIcon, getTitle } from '@/utils/common'\nimport { getStorage, setStorage } from '@/utils/storage'\n\nexport interface User {\n userId: string\n email: string\n userName: string\n createdTime: string\n}\n\nexport interface MessageSignInData {\n projectId: string\n accessToken: string\n user: User\n}\n\nexport type MessageDataReceive = {\n type: MessageType.READY\n} | {\n type: MessageType.SIGN_IN\n data: MessageSignInData\n}\n\nexport interface MessageInitData {\n projectId: string\n icon: string | null\n title: string | null\n}\n\nexport interface MessageDataSend {\n type: MessageType.INIT\n data: MessageInitData\n}\n\nexport class LumiAuthClient {\n readonly #lumi: LumiClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n }\n\n /** 访问令牌 */\n public get accessToken(): string | null {\n return getStorage<string>(StorageKey.ACCESS_TOKEN)\n }\n\n public set accessToken(accessToken: string | null) {\n setStorage(StorageKey.ACCESS_TOKEN, accessToken)\n }\n\n /** 用户 */\n public get user(): User | null {\n return getStorage<User>(StorageKey.USER)\n }\n\n public set user(user: User | null) {\n setStorage(StorageKey.USER, user)\n }\n\n public get isAuthenticated(): boolean {\n return !!this.accessToken\n }\n\n /** 登录 */\n public signIn(): Promise<MessageSignInData> {\n const width = 800\n const height = 600\n const left = (window.screen.width - width) / 2\n const top = (window.screen.height - height) / 2\n const popup = window.open(this.#lumi.config.authOrigin, '_blank', `width=${width},height=${height},left=${left},top=${top}`)\n\n let cleanup: () => void\n return new Promise<MessageSignInData>((resolve, reject) => {\n if (!popup)\n return reject(new Error('Open auth window failed'))\n\n const timer = setInterval(() => {\n if (popup.closed)\n reject(new Error('Auth window closed'))\n }, 1000)\n\n const handleMessage = ({ data, origin, source }: MessageEvent<MessageDataReceive | null>): void => {\n if (origin !== this.#lumi.config.authOrigin || source !== popup)\n return\n\n switch (data?.type) {\n case MessageType.READY: {\n popup.postMessage({\n type: MessageType.INIT,\n data: {\n projectId: this.#lumi.config.projectId,\n icon: getIcon(),\n title: getTitle(),\n },\n } satisfies MessageDataSend, this.#lumi.config.authOrigin)\n break\n }\n case MessageType.SIGN_IN: {\n if (data.data.projectId !== this.#lumi.config.projectId)\n break\n popup.close()\n window.focus()\n this.accessToken = data.data.accessToken\n this.user = data.data.user\n resolve(data.data)\n break\n }\n }\n }\n window.addEventListener('message', handleMessage)\n\n cleanup = () => {\n clearInterval(timer)\n window.removeEventListener('message', handleMessage)\n }\n }).finally(() => cleanup?.())\n }\n\n /** 退出登录 */\n public signOut(): void {\n this.accessToken = null\n this.user = null\n }\n\n /** 获取当前用户 */\n public async refreshUser(): Promise<User> {\n const res = await request<ApiResponse<User>>(this.#lumi, '/lm/user/info', {\n method: 'POST',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n this.user = res.data\n return res.data\n }\n\n /** 监听登录状态变化 */\n public onAuthChange(callback: (args: {\n isAuthenticated: boolean\n user: User | null\n }) => void): () => void {\n const handleStorageChange = (event: StorageEvent): void => {\n if (event.key === StorageKey.ACCESS_TOKEN || event.key === StorageKey.USER || event.key === null) {\n callback({\n isAuthenticated: this.isAuthenticated,\n user: this.user,\n })\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n }\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport type { ApiResponse, PaginationData } from '@/lib/request'\nimport { request } from '@/lib/request'\n\nexport interface Entity extends Record<string, any> {\n id: string\n}\n\nexport class EntityClient {\n readonly #lumi: LumiClient\n public readonly entityName: string\n\n constructor(lumi: LumiClient, entityName: string) {\n this.#lumi = lumi\n this.entityName = entityName\n }\n\n /** 查询文档列表 */\n public async list({ filter, sort, limit, skip }: {\n filter?: any\n sort?: Record<string, 1 | -1>\n limit?: number\n skip?: number\n } = {}): Promise<PaginationData<Entity>> {\n if (!limit) {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/list'), {\n method: 'POST',\n body: { filter, sort },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return {\n total: res.data.length,\n list: res.data,\n }\n }\n else {\n const res = await request<ApiResponse<PaginationData<Entity>>>(this.#lumi, this.uri('/find'), {\n method: 'POST',\n body: { filter, sort, limit, skip },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n }\n\n /** 获取单个文档 */\n public async get(id: string): Promise<Entity | null> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(`/${id}`), {\n method: 'GET',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 创建文档 */\n public async create(data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 批量创建文档 */\n public async createMany(data: Record<string, any>[]): Promise<Entity[]> {\n const res = await request<ApiResponse<Entity[]>>(this.#lumi, this.uri('/batch'), {\n method: 'POST',\n body: data,\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 更新文档 */\n public async update(id: string, data: Record<string, any>): Promise<Entity> {\n const res = await request<ApiResponse<Entity>>(this.#lumi, this.uri(), {\n method: 'PUT',\n body: { filter: { _id: id }, update: data },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n return res.data\n }\n\n /** 删除文档 */\n public async delete(id: string): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri(`/${id}`), {\n method: 'DELETE',\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n /** 批量删除文档 */\n public async deleteMany(ids: string[]): Promise<void> {\n const res = await request<ApiResponse<null>>(this.#lumi, this.uri('/batch-by-ids'), {\n method: 'DELETE',\n params: { ids },\n })\n if (res.code !== 200)\n throw new Error(res.message)\n }\n\n private uri(suffix = ''): string {\n return `/lm/${this.#lumi.config.projectId}/${this.entityName}/documents${suffix}`\n }\n}\n","import type { LumiClient } from '@/core/lumi-client'\nimport { EntityClient } from '@/core/entity-client'\n\nexport class EntitiesClient {\n readonly #lumi: LumiClient\n [key: string]: EntityClient\n\n constructor(lumi: LumiClient) {\n this.#lumi = lumi\n return new Proxy(this, {\n get(target: EntitiesClient, p: string) {\n if (!(p in target))\n target[p] = new EntityClient(target.#lumi, p)\n return target[p]\n },\n }) as this\n }\n}\n","import { LumiAuthClient } from '@/core/auth-client'\nimport { EntitiesClient } from '@/core/entities-client'\n\nexport interface LumiClientConfig {\n projectId: string\n apiBaseUrl: string\n authOrigin: string\n}\n\nexport class LumiClient {\n public config: LumiClientConfig\n\n public auth: LumiAuthClient\n public entities: EntitiesClient\n\n constructor(config: LumiClientConfig) {\n this.config = config\n this.auth = new LumiAuthClient(this)\n this.entities = new EntitiesClient(this)\n }\n}\n\nexport function createClient(config: LumiClientConfig): LumiClient {\n return new LumiClient(config)\n}\n"],"mappings":"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","names":["ofetch","request","lumi","uri","options","__spreadValues","ofetch","getIcon","_a","_b","getTitle","setStorage","key","value","storage","oldValue","newValue","getStorage","_e","_lumi","LumiAuthClient","lumi","__privateAdd","__privateSet","getStorage","accessToken","setStorage","user","left","top","popup","__privateGet","cleanup","resolve","reject","timer","handleMessage","data","origin","source","getIcon","getTitle","__async","res","request","callback","handleStorageChange","event","_lumi","EntityClient","lumi","entityName","__privateAdd","__privateSet","__async","filter","sort","limit","skip","res","request","__privateGet","id","data","ids","suffix","_lumi","EntitiesClient","lumi","__privateAdd","__privateSet","target","p","EntityClient","__privateGet","LumiClient","config","LumiAuthClient","EntitiesClient","createClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumi.new/sdk",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "SDK for Lumi.new",
5
5
  "sideEffects": false,
6
6
  "main": "dist/index.js",