@ztimson/momentum 0.53.0 → 0.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node --no-warnings
2
+
3
+ import fs from 'fs';
4
+ import {join} from 'path';
5
+ import {Momentum} from '../dist/index.mjs';
6
+ import * as readline from 'node:readline';
7
+ import {camelCase, formatDate} from '@ztimson/utils';
8
+
9
+ export function ask(prompt, hide = false) {
10
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });
11
+ return new Promise((resolve) => {
12
+ if (!hide) {
13
+ rl.question(prompt, (answer) => (rl.close(), resolve(answer)));
14
+ } else {
15
+ let input = '';
16
+ const onKeyPress = (char, key) => {
17
+ if (key && key.name === 'return') {
18
+ rl.input.setRawMode(false);
19
+ rl.input.removeListener('keypress', onKeyPress);
20
+ rl.close();
21
+ resolve(input);
22
+ } else {
23
+ if (key && key.name === 'backspace') {
24
+ if (input.length > 0) input = input.slice(0, -1);
25
+ } else {
26
+ input += char;
27
+ }
28
+ rl.output.write(`\r${prompt}${'*'.repeat(input.length)} `);
29
+ }
30
+ };
31
+
32
+ // Attach keypress event
33
+ rl.input.on('keypress', onKeyPress);
34
+ rl.input.setRawMode(true);
35
+ rl.input.resume();
36
+ rl.output.write(prompt);
37
+ }
38
+ });
39
+ }
40
+
41
+ function createProp(column) {
42
+ let prop = column.prop;
43
+ if(column.type == 'formula' || column.type == 'javascript') prop = `readonly ${prop}`;
44
+ prop += column.required ? ': ' : '?: ';
45
+ if(column.type == 'formula' || column.type == 'javascript') prop += 'any';
46
+ else if(column.type == 'link') prop += 'string';
47
+ else if(column.type == 'timestamp') prop += 'Date';
48
+ else prop += `${column.type}`;
49
+ return prop;
50
+ }
51
+
52
+ // Main loop
53
+ (async () => {
54
+ try {
55
+ // Arguments
56
+ let [,, destination, url, username, password] = process.argv;
57
+ const packageFile = await import('../package.json', {with: { type: 'json' }});
58
+ console.log(`Momentum v${packageFile.default.version}`);
59
+ let momentum;
60
+
61
+ // Login
62
+ do {
63
+ while(!url) url = await ask('URL: ');
64
+ while(!username) username = await ask('Username: ');
65
+ while(!password) password = await ask('Password: ', true);
66
+
67
+ if(!url.startsWith('http')) url = 'http://' + url;
68
+ momentum = new Momentum(url);
69
+ await momentum.auth.login(username, password)
70
+ .catch(err => {
71
+ url = username = password = '';
72
+ console.log('Failed to authenticate');
73
+ });
74
+ } while(!momentum?.auth.user);
75
+ console.log('Login Succeeded!\n');
76
+
77
+ if(!destination) destination = await ask('Destination (src/models): ');
78
+ if(!destination) destination = 'src/models';
79
+ let path = join(process.cwd(), destination);
80
+ if(!fs.existsSync(path)) fs.mkdirSync(path);
81
+
82
+ console.log('\nCollecting Schemas...');
83
+ const schemas = await momentum.data.schema.read();
84
+ schemas.forEach(schema => {
85
+ const fileName = camelCase(schema.path) + '.ts';
86
+ console.log(`Creating Model: ${schema.path} -> ${fileName}`);
87
+ const path = join(process.cwd(), destination, fileName);
88
+ fs.writeFileSync(path, `import {Meta} from '@ztimson/momentum';
89
+
90
+ /**
91
+ * ${schema.path}
92
+ *
93
+ * ${schema.description}
94
+ *
95
+ * Generated by Momentum v${packageFile.default.version} - ${formatDate('YYYY-MM-DD')}
96
+ */
97
+ export interface ${camelCase(schema.path)} extends Meta${schema.columns.length ? '' : ', Record<string, any>'} {
98
+ ${schema.columns.map(column => `\t${createProp(column)};`).join('\n')}
99
+ }
100
+ `);
101
+ });
102
+ console.log('Done!');
103
+ process.exit();
104
+ } catch(err) {
105
+ console.error(`\n${err.stack || err.stackTrace || err.message || err.toString()}`);
106
+ process.exit(1);
107
+ }
108
+ })();
package/dist/ai.d.ts CHANGED
@@ -24,5 +24,13 @@ export declare class Ai extends PathEventEmitter {
24
24
  role: string;
25
25
  content: string;
26
26
  }[]>;
27
+ /**
28
+ * Get model info
29
+ * @return {Promise<{host: string, model: string}>} Model Info
30
+ */
31
+ info(): Promise<{
32
+ host: string;
33
+ model: string;
34
+ }>;
27
35
  }
28
36
  //# sourceMappingURL=ai.d.ts.map
package/dist/ai.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAM,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,sBAAsB;AACtB,qBAAa,EAAG,SAAQ,gBAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAO;gBAEf,GAAG,EAAE,GAAG,GAAG,MAAM;IAK7B;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrD;;;OAGG;IACH,KAAK;IAKL;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;CAMrD"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAM,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,sBAAsB;AACtB,qBAAa,EAAG,SAAQ,gBAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAO;gBAEf,GAAG,EAAE,GAAG,GAAG,MAAM;IAK7B;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrD;;;OAGG;IACH,KAAK;IAKL;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAOrD;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;CAG9C"}
package/dist/api.d.ts CHANGED
@@ -35,6 +35,7 @@ export declare class Api extends Http implements IPathEventEmitter {
35
35
  private pending;
36
36
  private storageKey;
37
37
  readonly host: string;
38
+ get sameOrigin(): boolean;
38
39
  private _token;
39
40
  /** Current API token */
40
41
  get token(): string | null;
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,IAAI,EACJ,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EACf,MAAM,gBAAgB,CAAC;AAExB,8BAA8B;AAC9B,MAAM,MAAM,MAAM,GAAG;IACpB,sBAAsB;IACtB,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IAChD,qBAAqB;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB;IAChB,EAAE,EAAE,YAAY,CAAC;IACjB,sBAAsB;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,sBAAsB;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;CACf,CAAA;AAED,6BAA6B;AAC7B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,kBAAkB;AAClB,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC;AAEF,0BAA0B;AAC1B,qBAAa,GAAI,SAAQ,IAAK,YAAW,iBAAiB;aAqB7B,GAAG,EAAE,MAAM;aAAoC,IAAI,EAAE,UAAU;IApB3F,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,UAAU,CAAU;IAE5B,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAC;IAEvB,OAAO,CAAC,MAAM,CAAuB;IACrC,wBAAwB;IACxB,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAAwB;IAClD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAS7B;gBAE2B,GAAG,GAAE,MAAwB,EAAkB,IAAI,GAAE,UAAe;IAWhG,IAAI,+EAAwC;IAC5C,GAAG,4DAAuC;IAC1C,EAAE,0HAAsC;IACxC,IAAI,+FAAwC;IAC5C,WAAW,uCAA+C;IAE1D;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAO9B;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAAC,CAAC,CAAC;CAgB3D"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,IAAI,EACJ,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EACf,MAAM,gBAAgB,CAAC;AAExB,8BAA8B;AAC9B,MAAM,MAAM,MAAM,GAAG;IACpB,sBAAsB;IACtB,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IAChD,qBAAqB;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB;IAChB,EAAE,EAAE,YAAY,CAAC;IACjB,sBAAsB;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,sBAAsB;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;CACf,CAAA;AAED,6BAA6B;AAC7B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,kBAAkB;AAClB,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC;AAEF,0BAA0B;AAC1B,qBAAa,GAAI,SAAQ,IAAK,YAAW,iBAAiB;aA0B7B,GAAG,EAAE,MAAM;aAAoC,IAAI,EAAE,UAAU;IAzB3F,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,UAAU,CAAU;IAE5B,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAC;IAEvB,IAAI,UAAU,YAGb;IAED,OAAO,CAAC,MAAM,CAAuB;IACrC,wBAAwB;IACxB,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAAwB;IAClD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAS7B;gBAE2B,GAAG,GAAE,MAAwB,EAAkB,IAAI,GAAE,UAAe;IAWhG,IAAI,+EAAwC;IAC5C,GAAG,4DAAuC;IAC1C,EAAE,0HAAsC;IACxC,IAAI,+FAAwC;IAC5C,WAAW,uCAA+C;IAE1D;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAO9B;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAAC,CAAC,CAAC;CAgB3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAM,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnF,qBAAa,MAAO,SAAQ,gBAAgB;IA6C/B,OAAO,CAAC,GAAG;IAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ;IA3CvD,uBAAuB;IACvB,IAAI,MAAM,IAAI,OAAO,CAAyC;IAE9D,6BAA6B;IAC7B,IAAI,MAAM,IAAI,OAAO,CAAuD;IAE5E,OAAO,CAAC,cAAc,CAAS;IAC/B,gCAAgC;IAChC,IAAI,aAAa,IAAI,OAAO,CAAgC;IAC5D,OAAO,KAAK,aAAa,QAGxB;IAED,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,oCAAoC;IACpC,IAAI,QAAQ,IAAI,QAAQ,CAWvB;IAED,iCAAiC;IACjC,IAAI,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGvD;IAED,OAAO,CAAC,IAAI,CAAC,CAAU;IACvB,gCAAgC;IAChC,IAAI,GAAG,IAAI,OAAO,CAIjB;gBAEmB,GAAG,EAAE,GAAG,EAAmB,QAAQ,EAAE,QAAQ;IAKjE;;;;OAIG;IACG,IAAI,CAAC,IAAI,GAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAM;IA2FvD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK;IAqItC;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3C"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAM,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnF,qBAAa,MAAO,SAAQ,gBAAgB;IA6C/B,OAAO,CAAC,GAAG;IAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ;IA3CvD,uBAAuB;IACvB,IAAI,MAAM,IAAI,OAAO,CAAyC;IAE9D,6BAA6B;IAC7B,IAAI,MAAM,IAAI,OAAO,CAAuD;IAE5E,OAAO,CAAC,cAAc,CAAS;IAC/B,gCAAgC;IAChC,IAAI,aAAa,IAAI,OAAO,CAAgC;IAC5D,OAAO,KAAK,aAAa,QAGxB;IAED,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,oCAAoC;IACpC,IAAI,QAAQ,IAAI,QAAQ,CAWvB;IAED,iCAAiC;IACjC,IAAI,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGvD;IAED,OAAO,CAAC,IAAI,CAAC,CAAU;IACvB,gCAAgC;IAChC,IAAI,GAAG,IAAI,OAAO,CAIjB;gBAEmB,GAAG,EAAE,GAAG,EAAmB,QAAQ,EAAE,QAAQ;IAKjE;;;;OAIG;IACG,IAAI,CAAC,IAAI,GAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAM;IA4FvD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK;IAqItC;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3C"}
package/dist/data.d.ts CHANGED
@@ -14,16 +14,12 @@ export type Schema = Meta & {
14
14
  path: string;
15
15
  /** Description of data */
16
16
  description?: string;
17
- /** Last index number */
18
- autoIncrement?: number;
19
17
  /** Associated form for viewing/editing */
20
18
  form?: string;
21
19
  /** Hide columns */
22
20
  hide?: string[];
23
21
  /** Lock collection from changes */
24
22
  lock?: boolean;
25
- /** Display column letters */
26
- showLetters?: boolean;
27
23
  /** Data must match defined columns */
28
24
  strict?: boolean;
29
25
  /** Allow updates to create row if missing */
@@ -45,17 +41,37 @@ export type SchemaColumn = {
45
41
  /** Must have value */
46
42
  required?: boolean;
47
43
  /** Style */
48
- style?: {
49
- width?: string;
50
- };
44
+ style: SchemaColumnStyle;
45
+ };
46
+ export type SchemaColumnStyle = {
47
+ /** Align column content */
48
+ align?: 'center' | 'left' | 'right';
49
+ /** Background color */
50
+ background?: string;
51
+ /** Bold column text */
52
+ bold?: boolean;
53
+ /** Column text color */
54
+ color?: string;
55
+ /** Italicize column text */
56
+ italics?: boolean;
57
+ /** Strikethrough column text */
58
+ strike?: boolean;
59
+ /** Underline column text */
60
+ underline?: boolean;
61
+ /** Column width */
62
+ width?: string;
63
+ /** Conditional formating */
64
+ conditional: (Omit<SchemaColumnStyle, 'conditional'> & {
65
+ condition: string;
66
+ })[];
51
67
  };
52
68
  declare class Schemas extends PathEventEmitter {
53
69
  private api;
54
70
  constructor(api: Api);
55
71
  delete(path: string): PromiseProgress<any>;
56
72
  read(tree?: false): Promise<Schema[]>;
57
- read(tree?: boolean): Promise<TreeNode<Schema>[]>;
58
- read(path?: string): Promise<Schema>;
73
+ read(tree: true): Promise<TreeNode<Schema>[]>;
74
+ read(path: string): Promise<Schema>;
59
75
  update(schema: Partial<Schema> & {
60
76
  path: string;
61
77
  }): PromiseProgress<Schema>;
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
package/dist/forms.d.ts CHANGED
@@ -1,17 +1,37 @@
1
1
  import { Cache, PathEventEmitter } from '@ztimson/utils';
2
2
  import { Api } from './api';
3
3
  import { Meta, TreeNode } from './core';
4
- export type Form = Meta & {
4
+ export type Form<T = any> = Meta & {
5
5
  path: string;
6
+ collection: string;
6
7
  description?: string;
8
+ schema: {
9
+ type: string;
10
+ label?: string;
11
+ prop?: string;
12
+ default?: any;
13
+ required?: boolean;
14
+ options?: {
15
+ choices?: string[];
16
+ placeholder?: string;
17
+ min?: number;
18
+ max?: number;
19
+ step?: number;
20
+ };
21
+ style?: {
22
+ inline?: boolean;
23
+ width?: string;
24
+ };
25
+ }[];
26
+ data?: T;
7
27
  };
8
28
  export declare class Forms extends PathEventEmitter {
9
29
  readonly api: Api;
10
- cache: Cache<string, Form>;
30
+ cache: Cache<string, Form<any>>;
11
31
  constructor(api: Api | string);
12
32
  all(tree?: false): Promise<string[]>;
13
- all(tree?: boolean): Promise<TreeNode<Form>[]>;
14
- all(path?: string): Promise<Form>;
33
+ all(tree: true): Promise<TreeNode<Form>[]>;
34
+ all(path: string): Promise<Form>;
15
35
  delete(key: string): Promise<void>;
16
36
  read(path: string, reload?: boolean): Promise<Form | null>;
17
37
  update(form: Form): Promise<Form>;
@@ -1 +1 @@
1
- {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../src/forms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,gBAAgB,EAAuB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,qBAAa,KAAM,SAAQ,gBAAgB;IAC1C,QAAQ,CAAC,GAAG,EAAG,GAAG,CAAC;IAEnB,KAAK,sBAAiC;gBAE1B,GAAG,EAAE,GAAG,GAAG,MAAM;IAK7B,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IACpC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,UAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAUtD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAQjC"}
1
+ {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../src/forms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,gBAAgB,EAAuB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE;YACT,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;YACnB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;QACF,KAAK,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,OAAO,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC;SACf,CAAA;KACD,EAAE,CAAC;IACJ,IAAI,CAAC,EAAE,CAAC,CAAC;CACT,CAAA;AAED,qBAAa,KAAM,SAAQ,gBAAgB;IAC1C,QAAQ,CAAC,GAAG,EAAG,GAAG,CAAC;IAEnB,KAAK,2BAAiC;gBAE1B,GAAG,EAAE,GAAG,GAAG,MAAM;IAK7B,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IACpC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,UAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAUtD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAQjC"}
package/dist/index.cjs CHANGED
@@ -19,6 +19,13 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
19
19
  }
20
20
  return obj;
21
21
  }
22
+ function deepCopy(value2) {
23
+ try {
24
+ return structuredClone(value2);
25
+ } catch {
26
+ return JSON.parse(JSONSanitize(value2));
27
+ }
28
+ }
22
29
  function isEqual(a2, b2) {
23
30
  const ta = typeof a2, tb = typeof b2;
24
31
  if (ta != "object" || a2 == null || (tb != "object" || b2 == null))
@@ -177,11 +184,11 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
177
184
  return new Proxy(this, {
178
185
  get: (target, prop2) => {
179
186
  if (prop2 in target) return target[prop2];
180
- return target.store[prop2];
187
+ return deepCopy(target.store[prop2]);
181
188
  },
182
189
  set: (target, prop2, value2) => {
183
190
  if (prop2 in target) target[prop2] = value2;
184
- else target.store[prop2] = value2;
191
+ else this.set(prop2, value2);
185
192
  return true;
186
193
  }
187
194
  });
@@ -196,7 +203,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
196
203
  * @return {T[]} Array of items
197
204
  */
198
205
  all() {
199
- return Object.values(this.store);
206
+ return deepCopy(Object.values(this.store));
200
207
  }
201
208
  /**
202
209
  * Add a new item to the cache. Like set, but finds key automatically
@@ -251,7 +258,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
251
258
  * @return {T} Cached item
252
259
  */
253
260
  get(key) {
254
- return this.store[key];
261
+ return deepCopy(this.store[key]);
255
262
  }
256
263
  /**
257
264
  * Get a list of cached keys
@@ -267,7 +274,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
267
274
  * @return {Record<K, T>}
268
275
  */
269
276
  map() {
270
- return structuredClone(this.store);
277
+ return deepCopy(this.store);
271
278
  }
272
279
  /**
273
280
  * Add an item to the cache manually specifying the key
@@ -337,6 +344,106 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
337
344
  return this.from(super.finally(res));
338
345
  }
339
346
  }
347
+ function formatDate(format = "YYYY-MM-DD H:mm", date = /* @__PURE__ */ new Date(), tz) {
348
+ const timezones = [
349
+ ["IDLW", -12],
350
+ ["SST", -11],
351
+ ["HST", -10],
352
+ ["AKST", -9],
353
+ ["PST", -8],
354
+ ["MST", -7],
355
+ ["CST", -6],
356
+ ["EST", -5],
357
+ ["AST", -4],
358
+ ["BRT", -3],
359
+ ["MAT", -2],
360
+ ["AZOT", -1],
361
+ ["UTC", 0],
362
+ ["CET", 1],
363
+ ["EET", 2],
364
+ ["MSK", 3],
365
+ ["AST", 4],
366
+ ["PKT", 5],
367
+ ["IST", 5.5],
368
+ ["BST", 6],
369
+ ["ICT", 7],
370
+ ["CST", 8],
371
+ ["JST", 9],
372
+ ["AEST", 10],
373
+ ["SBT", 11],
374
+ ["FJT", 12],
375
+ ["TOT", 13],
376
+ ["LINT", 14]
377
+ ];
378
+ function adjustTz(date2, gmt) {
379
+ const currentOffset = date2.getTimezoneOffset();
380
+ const adjustedOffset = gmt * 60;
381
+ return new Date(date2.getTime() + (adjustedOffset + currentOffset) * 6e4);
382
+ }
383
+ function day(num) {
384
+ return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][num] || "Unknown";
385
+ }
386
+ function doy(date2) {
387
+ const start = /* @__PURE__ */ new Date(`${date2.getFullYear()}-01-01 0:00:00`);
388
+ return Math.ceil((date2.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24));
389
+ }
390
+ function month(num) {
391
+ return ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][num] || "Unknown";
392
+ }
393
+ function suffix(num) {
394
+ if (num % 100 >= 11 && num % 100 <= 13) return `${num}th`;
395
+ switch (num % 10) {
396
+ case 1:
397
+ return `${num}st`;
398
+ case 2:
399
+ return `${num}nd`;
400
+ case 3:
401
+ return `${num}rd`;
402
+ default:
403
+ return `${num}th`;
404
+ }
405
+ }
406
+ function tzOffset(offset) {
407
+ const hours = ~~(offset / 60);
408
+ const minutes = offset % 60;
409
+ return (offset > 0 ? "-" : "") + `${hours}:${minutes.toString().padStart(2, "0")}`;
410
+ }
411
+ if (typeof date == "number" || typeof date == "string") date = new Date(date);
412
+ let t;
413
+ if (tz == null) tz = -(date.getTimezoneOffset() / 60);
414
+ t = timezones.find((t2) => isNaN(tz) ? t2[0] == tz : t2[1] == tz);
415
+ if (!t) throw new Error(`Unknown timezone: ${tz}`);
416
+ date = adjustTz(date, t[1]);
417
+ const tokens = {
418
+ "YYYY": date.getFullYear().toString(),
419
+ "YY": date.getFullYear().toString().slice(2),
420
+ "MMMM": month(date.getMonth()),
421
+ "MMM": month(date.getMonth()).slice(0, 3),
422
+ "MM": (date.getMonth() + 1).toString().padStart(2, "0"),
423
+ "M": (date.getMonth() + 1).toString(),
424
+ "DDD": doy(date).toString(),
425
+ "DD": date.getDate().toString().padStart(2, "0"),
426
+ "Do": suffix(date.getDate()),
427
+ "D": date.getDate().toString(),
428
+ "dddd": day(date.getDay()),
429
+ "ddd": day(date.getDay()).slice(0, 3),
430
+ "HH": date.getHours().toString().padStart(2, "0"),
431
+ "H": date.getHours().toString(),
432
+ "hh": (date.getHours() % 12 || 12).toString().padStart(2, "0"),
433
+ "h": (date.getHours() % 12 || 12).toString(),
434
+ "mm": date.getMinutes().toString().padStart(2, "0"),
435
+ "m": date.getMinutes().toString(),
436
+ "ss": date.getSeconds().toString().padStart(2, "0"),
437
+ "s": date.getSeconds().toString(),
438
+ "SSS": date.getMilliseconds().toString().padStart(3, "0"),
439
+ "A": date.getHours() >= 12 ? "PM" : "AM",
440
+ "a": date.getHours() >= 12 ? "pm" : "am",
441
+ "ZZ": tzOffset(t[1] * 60).replace(":", ""),
442
+ "Z": tzOffset(t[1] * 60),
443
+ "z": typeof tz == "string" ? tz : t[0]
444
+ };
445
+ return format.replace(/YYYY|YY|MMMM|MMM|MM|M|DDD|DD|Do|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|SSS|A|a|ZZ|Z|z/g, (token) => tokens[token]);
446
+ }
340
447
  function downloadFile(blob, name) {
341
448
  if (!(blob instanceof Blob)) blob = new Blob(makeArray(blob));
342
449
  const url = URL.createObjectURL(blob);
@@ -368,7 +475,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
368
475
  }
369
476
  function timestampFilename(name, date = /* @__PURE__ */ new Date()) {
370
477
  if (typeof date == "number" || typeof date == "string") date = new Date(date);
371
- const timestamp = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}_${date.getHours().toString().padStart(2, "0")}-${date.getMinutes().toString().padStart(2, "0")}-${date.getSeconds().toString().padStart(2, "0")}`;
478
+ const timestamp = formatDate("YYYY-MM-DD_HH:mm:ss", date);
372
479
  return timestamp;
373
480
  }
374
481
  function uploadWithProgress(options) {
@@ -986,6 +1093,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
986
1093
  if (token) this.token = token;
987
1094
  }
988
1095
  }
1096
+ get sameOrigin() {
1097
+ if (typeof window == "undefined" || !(window == null ? void 0 : window.location)) return false;
1098
+ return window.location.host == this.host;
1099
+ }
989
1100
  /** Current API token */
990
1101
  get token() {
991
1102
  return this._token;
@@ -1019,7 +1130,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1019
1130
  const key = JSONSanitize(options);
1020
1131
  const method = options.method == "GET" ? "r" : options.method == "POST" ? "c" : options.method == "DELETE" ? "d" : "u";
1021
1132
  if (this.pending[key] != null) return this.pending[key];
1022
- this.pending[key] = super.request(options).then((response) => {
1133
+ this.pending[key] = super.request({ ...options, credentials: "include" }).then((response) => {
1023
1134
  this.emit(PES`api/response:${method}`, { request: options, response });
1024
1135
  return options.decode === false ? response : response.data;
1025
1136
  }).catch((err) => {
@@ -1163,6 +1274,13 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1163
1274
  return resp;
1164
1275
  });
1165
1276
  }
1277
+ /**
1278
+ * Get model info
1279
+ * @return {Promise<{host: string, model: string}>} Model Info
1280
+ */
1281
+ info() {
1282
+ return this.api.request({ url: "/api/ai/info" });
1283
+ }
1166
1284
  }
1167
1285
  class Analytics extends PathEventEmitter {
1168
1286
  constructor(api) {
@@ -1386,6 +1504,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1386
1504
  logout() {
1387
1505
  this.emit(PES`auth/logout:d`, this.user);
1388
1506
  this.api.token = null;
1507
+ this.api.request({ url: "/api/auth/logout", method: "DELETE" });
1389
1508
  this.user = null;
1390
1509
  }
1391
1510
  /**
@@ -1397,8 +1516,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1397
1516
  var _a;
1398
1517
  if (!user.username || !user.password) throw new Error("Cannot register user, missing username or password");
1399
1518
  const u = await this.api.request({ url: "/api/auth/register", body: { ...user } });
1400
- if ((_a = u == null ? void 0 : u.image) == null ? void 0 : _a.startsWith("/")) u.image = `${this.api.url}${u.image}?token=${this.api.token}`;
1401
- this.emit(PES`auth/register:c`, u);
1519
+ if ((_a = u == null ? void 0 : u.image) == null ? void 0 : _a.startsWith("/")) u.image = `${this.api.url}${u.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
1520
+ this.user = u;
1521
+ this.permissions = [];
1522
+ this.emit(PES`auth/register:u`, u);
1402
1523
  return u;
1403
1524
  }
1404
1525
  reset(emailOrPass, token) {
@@ -1429,7 +1550,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1429
1550
  this.emit(PES`auth/session:r`, session);
1430
1551
  if (set) {
1431
1552
  this.api.token = token;
1432
- if (session == null ? void 0 : session.user) session.user.image = `${this.api.url}${session.user.image}?token=${this.api.token}`;
1553
+ if (session == null ? void 0 : session.user) session.user.image = `${this.api.url}${session.user.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
1433
1554
  this.user = (session == null ? void 0 : session.user) || null;
1434
1555
  this.permissions = (session == null ? void 0 : session.permissions) || [];
1435
1556
  if (session) this.emit(PES`auth/login:c`, session.user);
@@ -1531,7 +1652,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1531
1652
  if (!this.settings.cache.keys().length) opts.reload = true;
1532
1653
  let settings = await (opts.reload ? this.settings.all(false, true) : this.settings.cache);
1533
1654
  if (opts.reload == null) this.settings.all(false, true).then(() => this.init({ reload: false }));
1534
- if (settings["title"]) document.querySelectorAll(".momentum-title").forEach((el) => el.innerText = settings["title"]);
1655
+ if (settings["title"]) document.querySelectorAll(".momentum-title").forEach((el) => el.innerText = el.innerText.includes("|") ? `${el.innerText.split("|")[0].trim()} | ${settings["title"]}` : settings["title"]);
1535
1656
  if (settings["description"]) document.querySelectorAll(".momentum-description").forEach((el) => el.innerText = settings["description"]);
1536
1657
  if (settings["version"]) document.querySelectorAll(".momentum-version").forEach((el) => el.innerText = settings["version"]);
1537
1658
  if (settings["logo"]) document.querySelectorAll(".momentum-logo").forEach((el) => el.src = settings["logo"]);
@@ -2002,7 +2123,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
2002
2123
  if (LOG_LEVEL[logLevel] >= 0) {
2003
2124
  console.error = (...args) => {
2004
2125
  this.console.error(...args);
2005
- this.error(...args);
2126
+ this.error(args);
2006
2127
  };
2007
2128
  window.addEventListener("unhandledrejection", async (event) => {
2008
2129
  var _a, _b, _c, _d;
@@ -2017,25 +2138,25 @@ ${log}`;
2017
2138
  if (LOG_LEVEL[logLevel] >= 1) {
2018
2139
  console.warn = (...args) => {
2019
2140
  this.console.warn(...args);
2020
- this.warn(...args);
2141
+ this.warn(args);
2021
2142
  };
2022
2143
  }
2023
2144
  if (LOG_LEVEL[logLevel] >= 2) {
2024
2145
  console.info = (...args) => {
2025
2146
  this.console.info(...args);
2026
- this.info(...args);
2147
+ this.info(args);
2027
2148
  };
2028
2149
  }
2029
2150
  if (LOG_LEVEL[logLevel] >= 3) {
2030
2151
  console.log = (...args) => {
2031
2152
  this.console.log(...args);
2032
- this.log(...args);
2153
+ this.log(args);
2033
2154
  };
2034
2155
  }
2035
2156
  if (LOG_LEVEL[logLevel] >= 4) {
2036
2157
  console.debug = (...args) => {
2037
2158
  this.console.debug(...args);
2038
- this.debug(...args);
2159
+ this.debug(args);
2039
2160
  };
2040
2161
  }
2041
2162
  }
@@ -2378,7 +2499,7 @@ ${log}`;
2378
2499
  }
2379
2500
  open(path, target = "_blank") {
2380
2501
  if (!path) throw new Error("Cannot download file, missing path");
2381
- const link = `${this.api.url}/api/` + PES`${this.path}/${path}` + (this.api.token ? `?token=${this.api.token}` : "");
2502
+ const link = `${this.api.url}/api/` + PES`${this.path}/${path}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
2382
2503
  if (!target) return link;
2383
2504
  this.emit(PES`${this.path}/${path}:r`, path);
2384
2505
  return window.open(link, target);
@@ -2427,7 +2548,7 @@ ${log}`;
2427
2548
  if (!reload && this.cache.complete) return this.cache.all();
2428
2549
  return this.api.request({ url: "/api/" + PES`users` }).then((resp) => {
2429
2550
  resp == null ? void 0 : resp.forEach((r) => {
2430
- r.image = this.api.url + r.image + `?token=${this.api.token}`;
2551
+ r.image = `${this.api.url}${r.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
2431
2552
  return r;
2432
2553
  });
2433
2554
  this.cache.addAll(resp);
@@ -2450,7 +2571,7 @@ ${log}`;
2450
2571
  if (!reload && this.cache.get(username)) return this.cache.get(username);
2451
2572
  return this.api.request({ url: "/api/" + PES`users/${username}` }).then((resp) => {
2452
2573
  if (resp) {
2453
- resp.image = this.api.url + resp.image + `?token=${this.api.token}`;
2574
+ resp.image = `${this.api.url}${resp.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
2454
2575
  this.cache.add(resp);
2455
2576
  }
2456
2577
  this.emit(PES`users/${username}:r`, resp);
package/dist/index.mjs CHANGED
@@ -15,6 +15,13 @@ function clean(obj, undefinedOnly = false) {
15
15
  }
16
16
  return obj;
17
17
  }
18
+ function deepCopy(value2) {
19
+ try {
20
+ return structuredClone(value2);
21
+ } catch {
22
+ return JSON.parse(JSONSanitize(value2));
23
+ }
24
+ }
18
25
  function isEqual(a2, b2) {
19
26
  const ta = typeof a2, tb = typeof b2;
20
27
  if (ta != "object" || a2 == null || (tb != "object" || b2 == null))
@@ -173,11 +180,11 @@ class Cache {
173
180
  return new Proxy(this, {
174
181
  get: (target, prop2) => {
175
182
  if (prop2 in target) return target[prop2];
176
- return target.store[prop2];
183
+ return deepCopy(target.store[prop2]);
177
184
  },
178
185
  set: (target, prop2, value2) => {
179
186
  if (prop2 in target) target[prop2] = value2;
180
- else target.store[prop2] = value2;
187
+ else this.set(prop2, value2);
181
188
  return true;
182
189
  }
183
190
  });
@@ -192,7 +199,7 @@ class Cache {
192
199
  * @return {T[]} Array of items
193
200
  */
194
201
  all() {
195
- return Object.values(this.store);
202
+ return deepCopy(Object.values(this.store));
196
203
  }
197
204
  /**
198
205
  * Add a new item to the cache. Like set, but finds key automatically
@@ -247,7 +254,7 @@ class Cache {
247
254
  * @return {T} Cached item
248
255
  */
249
256
  get(key) {
250
- return this.store[key];
257
+ return deepCopy(this.store[key]);
251
258
  }
252
259
  /**
253
260
  * Get a list of cached keys
@@ -263,7 +270,7 @@ class Cache {
263
270
  * @return {Record<K, T>}
264
271
  */
265
272
  map() {
266
- return structuredClone(this.store);
273
+ return deepCopy(this.store);
267
274
  }
268
275
  /**
269
276
  * Add an item to the cache manually specifying the key
@@ -333,6 +340,106 @@ class PromiseProgress extends Promise {
333
340
  return this.from(super.finally(res));
334
341
  }
335
342
  }
343
+ function formatDate(format = "YYYY-MM-DD H:mm", date = /* @__PURE__ */ new Date(), tz) {
344
+ const timezones = [
345
+ ["IDLW", -12],
346
+ ["SST", -11],
347
+ ["HST", -10],
348
+ ["AKST", -9],
349
+ ["PST", -8],
350
+ ["MST", -7],
351
+ ["CST", -6],
352
+ ["EST", -5],
353
+ ["AST", -4],
354
+ ["BRT", -3],
355
+ ["MAT", -2],
356
+ ["AZOT", -1],
357
+ ["UTC", 0],
358
+ ["CET", 1],
359
+ ["EET", 2],
360
+ ["MSK", 3],
361
+ ["AST", 4],
362
+ ["PKT", 5],
363
+ ["IST", 5.5],
364
+ ["BST", 6],
365
+ ["ICT", 7],
366
+ ["CST", 8],
367
+ ["JST", 9],
368
+ ["AEST", 10],
369
+ ["SBT", 11],
370
+ ["FJT", 12],
371
+ ["TOT", 13],
372
+ ["LINT", 14]
373
+ ];
374
+ function adjustTz(date2, gmt) {
375
+ const currentOffset = date2.getTimezoneOffset();
376
+ const adjustedOffset = gmt * 60;
377
+ return new Date(date2.getTime() + (adjustedOffset + currentOffset) * 6e4);
378
+ }
379
+ function day(num) {
380
+ return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][num] || "Unknown";
381
+ }
382
+ function doy(date2) {
383
+ const start = /* @__PURE__ */ new Date(`${date2.getFullYear()}-01-01 0:00:00`);
384
+ return Math.ceil((date2.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24));
385
+ }
386
+ function month(num) {
387
+ return ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][num] || "Unknown";
388
+ }
389
+ function suffix(num) {
390
+ if (num % 100 >= 11 && num % 100 <= 13) return `${num}th`;
391
+ switch (num % 10) {
392
+ case 1:
393
+ return `${num}st`;
394
+ case 2:
395
+ return `${num}nd`;
396
+ case 3:
397
+ return `${num}rd`;
398
+ default:
399
+ return `${num}th`;
400
+ }
401
+ }
402
+ function tzOffset(offset) {
403
+ const hours = ~~(offset / 60);
404
+ const minutes = offset % 60;
405
+ return (offset > 0 ? "-" : "") + `${hours}:${minutes.toString().padStart(2, "0")}`;
406
+ }
407
+ if (typeof date == "number" || typeof date == "string") date = new Date(date);
408
+ let t;
409
+ if (tz == null) tz = -(date.getTimezoneOffset() / 60);
410
+ t = timezones.find((t2) => isNaN(tz) ? t2[0] == tz : t2[1] == tz);
411
+ if (!t) throw new Error(`Unknown timezone: ${tz}`);
412
+ date = adjustTz(date, t[1]);
413
+ const tokens = {
414
+ "YYYY": date.getFullYear().toString(),
415
+ "YY": date.getFullYear().toString().slice(2),
416
+ "MMMM": month(date.getMonth()),
417
+ "MMM": month(date.getMonth()).slice(0, 3),
418
+ "MM": (date.getMonth() + 1).toString().padStart(2, "0"),
419
+ "M": (date.getMonth() + 1).toString(),
420
+ "DDD": doy(date).toString(),
421
+ "DD": date.getDate().toString().padStart(2, "0"),
422
+ "Do": suffix(date.getDate()),
423
+ "D": date.getDate().toString(),
424
+ "dddd": day(date.getDay()),
425
+ "ddd": day(date.getDay()).slice(0, 3),
426
+ "HH": date.getHours().toString().padStart(2, "0"),
427
+ "H": date.getHours().toString(),
428
+ "hh": (date.getHours() % 12 || 12).toString().padStart(2, "0"),
429
+ "h": (date.getHours() % 12 || 12).toString(),
430
+ "mm": date.getMinutes().toString().padStart(2, "0"),
431
+ "m": date.getMinutes().toString(),
432
+ "ss": date.getSeconds().toString().padStart(2, "0"),
433
+ "s": date.getSeconds().toString(),
434
+ "SSS": date.getMilliseconds().toString().padStart(3, "0"),
435
+ "A": date.getHours() >= 12 ? "PM" : "AM",
436
+ "a": date.getHours() >= 12 ? "pm" : "am",
437
+ "ZZ": tzOffset(t[1] * 60).replace(":", ""),
438
+ "Z": tzOffset(t[1] * 60),
439
+ "z": typeof tz == "string" ? tz : t[0]
440
+ };
441
+ return format.replace(/YYYY|YY|MMMM|MMM|MM|M|DDD|DD|Do|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|SSS|A|a|ZZ|Z|z/g, (token) => tokens[token]);
442
+ }
336
443
  function downloadFile(blob, name) {
337
444
  if (!(blob instanceof Blob)) blob = new Blob(makeArray(blob));
338
445
  const url = URL.createObjectURL(blob);
@@ -364,7 +471,7 @@ function fileBrowser(options = {}) {
364
471
  }
365
472
  function timestampFilename(name, date = /* @__PURE__ */ new Date()) {
366
473
  if (typeof date == "number" || typeof date == "string") date = new Date(date);
367
- const timestamp = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}_${date.getHours().toString().padStart(2, "0")}-${date.getMinutes().toString().padStart(2, "0")}-${date.getSeconds().toString().padStart(2, "0")}`;
474
+ const timestamp = formatDate("YYYY-MM-DD_HH:mm:ss", date);
368
475
  return timestamp;
369
476
  }
370
477
  function uploadWithProgress(options) {
@@ -982,6 +1089,10 @@ class Api extends Http {
982
1089
  if (token) this.token = token;
983
1090
  }
984
1091
  }
1092
+ get sameOrigin() {
1093
+ if (typeof window == "undefined" || !(window == null ? void 0 : window.location)) return false;
1094
+ return window.location.host == this.host;
1095
+ }
985
1096
  /** Current API token */
986
1097
  get token() {
987
1098
  return this._token;
@@ -1015,7 +1126,7 @@ class Api extends Http {
1015
1126
  const key = JSONSanitize(options);
1016
1127
  const method = options.method == "GET" ? "r" : options.method == "POST" ? "c" : options.method == "DELETE" ? "d" : "u";
1017
1128
  if (this.pending[key] != null) return this.pending[key];
1018
- this.pending[key] = super.request(options).then((response) => {
1129
+ this.pending[key] = super.request({ ...options, credentials: "include" }).then((response) => {
1019
1130
  this.emit(PES`api/response:${method}`, { request: options, response });
1020
1131
  return options.decode === false ? response : response.data;
1021
1132
  }).catch((err) => {
@@ -1159,6 +1270,13 @@ class Ai extends PathEventEmitter {
1159
1270
  return resp;
1160
1271
  });
1161
1272
  }
1273
+ /**
1274
+ * Get model info
1275
+ * @return {Promise<{host: string, model: string}>} Model Info
1276
+ */
1277
+ info() {
1278
+ return this.api.request({ url: "/api/ai/info" });
1279
+ }
1162
1280
  }
1163
1281
  class Analytics extends PathEventEmitter {
1164
1282
  constructor(api) {
@@ -1382,6 +1500,7 @@ class Auth extends PathEventEmitter {
1382
1500
  logout() {
1383
1501
  this.emit(PES`auth/logout:d`, this.user);
1384
1502
  this.api.token = null;
1503
+ this.api.request({ url: "/api/auth/logout", method: "DELETE" });
1385
1504
  this.user = null;
1386
1505
  }
1387
1506
  /**
@@ -1393,8 +1512,10 @@ class Auth extends PathEventEmitter {
1393
1512
  var _a;
1394
1513
  if (!user.username || !user.password) throw new Error("Cannot register user, missing username or password");
1395
1514
  const u = await this.api.request({ url: "/api/auth/register", body: { ...user } });
1396
- if ((_a = u == null ? void 0 : u.image) == null ? void 0 : _a.startsWith("/")) u.image = `${this.api.url}${u.image}?token=${this.api.token}`;
1397
- this.emit(PES`auth/register:c`, u);
1515
+ if ((_a = u == null ? void 0 : u.image) == null ? void 0 : _a.startsWith("/")) u.image = `${this.api.url}${u.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
1516
+ this.user = u;
1517
+ this.permissions = [];
1518
+ this.emit(PES`auth/register:u`, u);
1398
1519
  return u;
1399
1520
  }
1400
1521
  reset(emailOrPass, token) {
@@ -1425,7 +1546,7 @@ class Auth extends PathEventEmitter {
1425
1546
  this.emit(PES`auth/session:r`, session);
1426
1547
  if (set) {
1427
1548
  this.api.token = token;
1428
- if (session == null ? void 0 : session.user) session.user.image = `${this.api.url}${session.user.image}?token=${this.api.token}`;
1549
+ if (session == null ? void 0 : session.user) session.user.image = `${this.api.url}${session.user.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
1429
1550
  this.user = (session == null ? void 0 : session.user) || null;
1430
1551
  this.permissions = (session == null ? void 0 : session.permissions) || [];
1431
1552
  if (session) this.emit(PES`auth/login:c`, session.user);
@@ -1527,7 +1648,7 @@ class Client extends PathEventEmitter {
1527
1648
  if (!this.settings.cache.keys().length) opts.reload = true;
1528
1649
  let settings = await (opts.reload ? this.settings.all(false, true) : this.settings.cache);
1529
1650
  if (opts.reload == null) this.settings.all(false, true).then(() => this.init({ reload: false }));
1530
- if (settings["title"]) document.querySelectorAll(".momentum-title").forEach((el) => el.innerText = settings["title"]);
1651
+ if (settings["title"]) document.querySelectorAll(".momentum-title").forEach((el) => el.innerText = el.innerText.includes("|") ? `${el.innerText.split("|")[0].trim()} | ${settings["title"]}` : settings["title"]);
1531
1652
  if (settings["description"]) document.querySelectorAll(".momentum-description").forEach((el) => el.innerText = settings["description"]);
1532
1653
  if (settings["version"]) document.querySelectorAll(".momentum-version").forEach((el) => el.innerText = settings["version"]);
1533
1654
  if (settings["logo"]) document.querySelectorAll(".momentum-logo").forEach((el) => el.src = settings["logo"]);
@@ -1998,7 +2119,7 @@ class Logger extends PathEventEmitter {
1998
2119
  if (LOG_LEVEL[logLevel] >= 0) {
1999
2120
  console.error = (...args) => {
2000
2121
  this.console.error(...args);
2001
- this.error(...args);
2122
+ this.error(args);
2002
2123
  };
2003
2124
  window.addEventListener("unhandledrejection", async (event) => {
2004
2125
  var _a, _b, _c, _d;
@@ -2013,25 +2134,25 @@ ${log}`;
2013
2134
  if (LOG_LEVEL[logLevel] >= 1) {
2014
2135
  console.warn = (...args) => {
2015
2136
  this.console.warn(...args);
2016
- this.warn(...args);
2137
+ this.warn(args);
2017
2138
  };
2018
2139
  }
2019
2140
  if (LOG_LEVEL[logLevel] >= 2) {
2020
2141
  console.info = (...args) => {
2021
2142
  this.console.info(...args);
2022
- this.info(...args);
2143
+ this.info(args);
2023
2144
  };
2024
2145
  }
2025
2146
  if (LOG_LEVEL[logLevel] >= 3) {
2026
2147
  console.log = (...args) => {
2027
2148
  this.console.log(...args);
2028
- this.log(...args);
2149
+ this.log(args);
2029
2150
  };
2030
2151
  }
2031
2152
  if (LOG_LEVEL[logLevel] >= 4) {
2032
2153
  console.debug = (...args) => {
2033
2154
  this.console.debug(...args);
2034
- this.debug(...args);
2155
+ this.debug(args);
2035
2156
  };
2036
2157
  }
2037
2158
  }
@@ -2374,7 +2495,7 @@ let Storage$1 = class Storage2 extends PathEventEmitter {
2374
2495
  }
2375
2496
  open(path, target = "_blank") {
2376
2497
  if (!path) throw new Error("Cannot download file, missing path");
2377
- const link = `${this.api.url}/api/` + PES`${this.path}/${path}` + (this.api.token ? `?token=${this.api.token}` : "");
2498
+ const link = `${this.api.url}/api/` + PES`${this.path}/${path}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
2378
2499
  if (!target) return link;
2379
2500
  this.emit(PES`${this.path}/${path}:r`, path);
2380
2501
  return window.open(link, target);
@@ -2423,7 +2544,7 @@ class Users extends PathEventEmitter {
2423
2544
  if (!reload && this.cache.complete) return this.cache.all();
2424
2545
  return this.api.request({ url: "/api/" + PES`users` }).then((resp) => {
2425
2546
  resp == null ? void 0 : resp.forEach((r) => {
2426
- r.image = this.api.url + r.image + `?token=${this.api.token}`;
2547
+ r.image = `${this.api.url}${r.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
2427
2548
  return r;
2428
2549
  });
2429
2550
  this.cache.addAll(resp);
@@ -2446,7 +2567,7 @@ class Users extends PathEventEmitter {
2446
2567
  if (!reload && this.cache.get(username)) return this.cache.get(username);
2447
2568
  return this.api.request({ url: "/api/" + PES`users/${username}` }).then((resp) => {
2448
2569
  if (resp) {
2449
- resp.image = this.api.url + resp.image + `?token=${this.api.token}`;
2570
+ resp.image = `${this.api.url}${resp.image}${!this.api.sameOrigin && this.api.token ? `?token=${this.api.token}` : ""}`;
2450
2571
  this.cache.add(resp);
2451
2572
  }
2452
2573
  this.emit(PES`users/${username}:r`, resp);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ztimson/momentum",
3
- "version": "0.53.0",
3
+ "version": "0.53.1",
4
4
  "description": "Client library for momentum",
5
5
  "keywords": ["Momentum"],
6
6
  "author": "Zak Timson <zaktimson@gmail.com>",
@@ -12,6 +12,9 @@
12
12
  "module": "dist/index.mjs",
13
13
  "types": "dist/index.d.ts",
14
14
  "typings": "dist/index.d.ts",
15
+ "bin": {
16
+ "build-models": "./bin/build-models.mjs"
17
+ },
15
18
  "exports": {
16
19
  "import": "./dist/index.mjs",
17
20
  "require": "./dist/index.cjs",
@@ -21,10 +24,11 @@
21
24
  "start": "vite build --watch",
22
25
  "prebuild": "node -e \"const fs=require('fs');fs.cpSync('../README.md','./README.md')\"",
23
26
  "build": "tsc && vite build",
27
+ "build-models": "node --no-warnings ./bin/build-models.mjs",
24
28
  "postbuild": "node -e \"const fs=require('fs');fs.cpSync('dist/index.mjs','../server/public/momentum.mjs');fs.cpSync('dist/index.cjs','../server/public/momentum.js');fs.cpSync('dist/momentum.worker.js','../server/public/momentum.worker.js')\""
25
29
  },
26
30
  "dependencies": {
27
- "@ztimson/utils": "0.23.12",
31
+ "@ztimson/utils": "0.23.15",
28
32
  "var-persist": "^1.0.1"
29
33
  },
30
34
  "devDependencies": {