shutro-erp 0.3.0 → 0.3.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.
Files changed (96) hide show
  1. package/README.md +58 -58
  2. package/dist/account_portal/.kosh/bindings.js +1 -1
  3. package/dist/account_portal/.kosh/schema.d.ts +31 -1
  4. package/dist/accounting/.kosh/bindings.js +1 -1
  5. package/dist/accounting/.kosh/schema.d.ts +31 -1
  6. package/dist/assistant/routes.js +1 -1
  7. package/dist/automation/engine.js +1 -1
  8. package/dist/automation/web/messages.js +2 -2
  9. package/dist/cli/apps.d.ts +1 -1
  10. package/dist/cli/apps.js +14 -14
  11. package/dist/cli/bin.js +3 -0
  12. package/dist/cli/index.js +11 -11
  13. package/dist/cli/init.d.ts +1 -1
  14. package/dist/cli/init.js +58 -36
  15. package/dist/cli/launch.js +2 -2
  16. package/dist/cli/project.d.ts +7 -7
  17. package/dist/cli/project.js +25 -25
  18. package/dist/cli/prompt.js +2 -2
  19. package/dist/cli/templates.d.ts +3 -3
  20. package/dist/cli/templates.js +29 -27
  21. package/dist/cli/ui.d.ts +1 -8
  22. package/dist/cli/ui.js +17 -11
  23. package/dist/contacts/.kosh/bindings.js +1 -1
  24. package/dist/contacts/.kosh/schema.d.ts +31 -1
  25. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  26. package/dist/l10n_bd/.kosh/schema.d.ts +31 -1
  27. package/dist/l10n_in/.kosh/bindings.js +1 -1
  28. package/dist/l10n_in/.kosh/schema.d.ts +31 -1
  29. package/dist/l10n_in/einvoice.js +1 -1
  30. package/dist/l10n_in/web/messages.js +2 -2
  31. package/dist/mail/index.js +2 -2
  32. package/dist/modules-sdk/loader.js +2 -2
  33. package/dist/notify/messages.js +3 -3
  34. package/dist/notify/routes.js +1 -1
  35. package/dist/notify/web/messages.js +1 -1
  36. package/dist/portal/.kosh/bindings.js +1 -1
  37. package/dist/portal/.kosh/schema.d.ts +31 -1
  38. package/dist/product/.kosh/bindings.js +1 -1
  39. package/dist/product/.kosh/schema.d.ts +31 -1
  40. package/dist/project/.kosh/bindings.js +1 -1
  41. package/dist/project/.kosh/schema.d.ts +31 -1
  42. package/dist/project_portal/.kosh/bindings.js +1 -1
  43. package/dist/project_portal/.kosh/schema.d.ts +31 -1
  44. package/dist/purchase/.kosh/bindings.js +1 -1
  45. package/dist/purchase/.kosh/schema.d.ts +31 -1
  46. package/dist/purchase_account/.kosh/bindings.js +1 -1
  47. package/dist/purchase_account/.kosh/schema.d.ts +31 -1
  48. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  49. package/dist/purchase_portal/.kosh/schema.d.ts +31 -1
  50. package/dist/sale_account/.kosh/bindings.js +1 -1
  51. package/dist/sale_account/.kosh/schema.d.ts +31 -1
  52. package/dist/sale_portal/.kosh/bindings.js +1 -1
  53. package/dist/sale_portal/.kosh/schema.d.ts +31 -1
  54. package/dist/sale_project/.kosh/bindings.js +1 -1
  55. package/dist/sale_project/.kosh/schema.d.ts +31 -1
  56. package/dist/sales/.kosh/bindings.js +1 -1
  57. package/dist/sales/.kosh/schema.d.ts +31 -1
  58. package/dist/server/api/client.js +1 -1
  59. package/dist/server/api/openapi.js +17 -1
  60. package/dist/server/apps.js +5 -5
  61. package/dist/server/auth/api-keys.d.ts +13 -0
  62. package/dist/server/auth/api-keys.js +65 -0
  63. package/dist/server/auth/base.js +24 -0
  64. package/dist/server/auth/crypto.js +1 -1
  65. package/dist/server/auth/scopes.d.ts +12 -0
  66. package/dist/server/auth/scopes.js +51 -0
  67. package/dist/server/auth/service.d.ts +57 -1
  68. package/dist/server/auth/service.js +229 -5
  69. package/dist/server/demo.d.ts +1 -1
  70. package/dist/server/demo.js +1 -1
  71. package/dist/server/env-names.d.ts +2 -0
  72. package/dist/server/env-names.js +16 -0
  73. package/dist/server/host.js +5 -1
  74. package/dist/server/identity.d.ts +7 -0
  75. package/dist/server/index.d.ts +1 -0
  76. package/dist/server/index.js +1 -0
  77. package/dist/server/registry.js +1 -1
  78. package/dist/server/server.d.ts +5 -0
  79. package/dist/server/server.js +45 -5
  80. package/dist/settings/routes.js +1 -1
  81. package/dist/settings/web/ApiKeysPage.d.ts +8 -0
  82. package/dist/settings/web/ApiKeysPage.js +70 -0
  83. package/dist/settings/web/index.d.ts +1 -0
  84. package/dist/settings/web/index.js +4 -0
  85. package/dist/settings/web/messages.js +62 -0
  86. package/dist/storage/routes.js +1 -1
  87. package/dist/studio/build.js +1 -1
  88. package/dist/studio/generate.js +4 -4
  89. package/dist/studio/module.js +5 -5
  90. package/dist/studio/web/messages.js +2 -2
  91. package/dist/ui/app.js +26 -3
  92. package/dist/ui/i18n/messages.js +2 -2
  93. package/dist/ui/pwa/worker.js +2 -2
  94. package/dist/ui/registry.d.ts +15 -0
  95. package/dist/ui/registry.js +20 -0
  96. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 5d099798463eb84a
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 86d7229d7b275957
2
2
  // Schema view of module `product` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -6,6 +6,7 @@ import type { F } from '../../server/orm.js';
6
6
  export interface SchemaView {
7
7
  readonly 'account.tax': AccountTax;
8
8
  readonly 'audit.event': AuditEvent;
9
+ readonly 'auth.api_key': AuthApiKey;
9
10
  readonly 'auth.credential': AuthCredential;
10
11
  readonly 'auth.session': AuthSession;
11
12
  readonly 'auth.user_grant': AuthUserGrant;
@@ -73,6 +74,34 @@ export interface AuditEvent {
73
74
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
74
75
  }
75
76
 
77
+ /** `auth.api_key` (owner: base). */
78
+ export interface AuthApiKey {
79
+ readonly name: 'auth.api_key';
80
+ readonly fields: {
81
+ readonly id: F.Id<'auth.api_key'>;
82
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
83
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
84
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
85
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
86
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
87
+ readonly name: F.Char<{ readonly required: true }>;
88
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
89
+ readonly tokenHash: F.Char<{ readonly required: true }>;
90
+ readonly prefix: F.Char<{ readonly required: true }>;
91
+ readonly scopes: F.Text<{ readonly required: true }>;
92
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
93
+ readonly lastUsedAt: F.Datetime;
94
+ readonly lastUsedIp: F.Char;
95
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
96
+ readonly issuedBy: F.Many2one<'res.users'>;
97
+ };
98
+ readonly methods: AuthApiKeyMethods;
99
+ }
100
+
101
+ /** Methods of `auth.api_key`: declared ones and transitions. */
102
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
103
+ }
104
+
76
105
  /** `auth.credential` (owner: base). */
77
106
  export interface AuthCredential {
78
107
  readonly name: 'auth.credential';
@@ -307,6 +336,7 @@ export interface ResUsers {
307
336
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
308
337
  readonly lang: F.Char<{ readonly default: true }>;
309
338
  readonly tz: F.Char<{ readonly default: true }>;
339
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
310
340
  };
311
341
  readonly methods: ResUsersMethods;
312
342
  }
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 1aabc867063cb52e
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 8538c294f98318cd
2
2
  // Bindings of module `project`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,10 +1,11 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 1aabc867063cb52e
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 8538c294f98318cd
2
2
  // Schema view of module `project` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
5
5
  /** Model name → model type (RFC 0002 §7.7). */
6
6
  export interface SchemaView {
7
7
  readonly 'audit.event': AuditEvent;
8
+ readonly 'auth.api_key': AuthApiKey;
8
9
  readonly 'auth.credential': AuthCredential;
9
10
  readonly 'auth.session': AuthSession;
10
11
  readonly 'auth.user_grant': AuthUserGrant;
@@ -54,6 +55,34 @@ export interface AuditEvent {
54
55
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
55
56
  }
56
57
 
58
+ /** `auth.api_key` (owner: base). */
59
+ export interface AuthApiKey {
60
+ readonly name: 'auth.api_key';
61
+ readonly fields: {
62
+ readonly id: F.Id<'auth.api_key'>;
63
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
64
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
65
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
66
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
67
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
68
+ readonly name: F.Char<{ readonly required: true }>;
69
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
70
+ readonly tokenHash: F.Char<{ readonly required: true }>;
71
+ readonly prefix: F.Char<{ readonly required: true }>;
72
+ readonly scopes: F.Text<{ readonly required: true }>;
73
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
74
+ readonly lastUsedAt: F.Datetime;
75
+ readonly lastUsedIp: F.Char;
76
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
77
+ readonly issuedBy: F.Many2one<'res.users'>;
78
+ };
79
+ readonly methods: AuthApiKeyMethods;
80
+ }
81
+
82
+ /** Methods of `auth.api_key`: declared ones and transitions. */
83
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
84
+ }
85
+
57
86
  /** `auth.credential` (owner: base). */
58
87
  export interface AuthCredential {
59
88
  readonly name: 'auth.credential';
@@ -560,6 +589,7 @@ export interface ResUsers {
560
589
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
561
590
  readonly lang: F.Char<{ readonly default: true }>;
562
591
  readonly tz: F.Char<{ readonly default: true }>;
592
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
563
593
  };
564
594
  readonly methods: ResUsersMethods;
565
595
  }
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: b801d3f400fa92ad
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 0440c5ae846a11ac
2
2
  // Bindings of module `project_portal`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,10 +1,11 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: b801d3f400fa92ad
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 0440c5ae846a11ac
2
2
  // Schema view of module `project_portal` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
5
5
  /** Model name → model type (RFC 0002 §7.7). */
6
6
  export interface SchemaView {
7
7
  readonly 'audit.event': AuditEvent;
8
+ readonly 'auth.api_key': AuthApiKey;
8
9
  readonly 'auth.credential': AuthCredential;
9
10
  readonly 'auth.session': AuthSession;
10
11
  readonly 'auth.user_grant': AuthUserGrant;
@@ -57,6 +58,34 @@ export interface AuditEvent {
57
58
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
58
59
  }
59
60
 
61
+ /** `auth.api_key` (owner: base). */
62
+ export interface AuthApiKey {
63
+ readonly name: 'auth.api_key';
64
+ readonly fields: {
65
+ readonly id: F.Id<'auth.api_key'>;
66
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
67
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
68
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
69
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
70
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
71
+ readonly name: F.Char<{ readonly required: true }>;
72
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
73
+ readonly tokenHash: F.Char<{ readonly required: true }>;
74
+ readonly prefix: F.Char<{ readonly required: true }>;
75
+ readonly scopes: F.Text<{ readonly required: true }>;
76
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
77
+ readonly lastUsedAt: F.Datetime;
78
+ readonly lastUsedIp: F.Char;
79
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
80
+ readonly issuedBy: F.Many2one<'res.users'>;
81
+ };
82
+ readonly methods: AuthApiKeyMethods;
83
+ }
84
+
85
+ /** Methods of `auth.api_key`: declared ones and transitions. */
86
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
87
+ }
88
+
60
89
  /** `auth.credential` (owner: base). */
61
90
  export interface AuthCredential {
62
91
  readonly name: 'auth.credential';
@@ -636,6 +665,7 @@ export interface ResUsers {
636
665
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
637
666
  readonly lang: F.Char<{ readonly default: true }>;
638
667
  readonly tz: F.Char<{ readonly default: true }>;
668
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
639
669
  readonly portalPartner: F.Many2one<'res.partner'>; // portal
640
670
  };
641
671
  readonly methods: ResUsersMethods;
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: d7f70059c723acf9
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: c5ae4567ecbd3b97
2
2
  // Bindings of module `purchase`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: d7f70059c723acf9
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: c5ae4567ecbd3b97
2
2
  // Schema view of module `purchase` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -9,6 +9,7 @@ export interface SchemaView {
9
9
  readonly 'approval.policy': ApprovalPolicy;
10
10
  readonly 'approval.request': ApprovalRequest;
11
11
  readonly 'audit.event': AuditEvent;
12
+ readonly 'auth.api_key': AuthApiKey;
12
13
  readonly 'auth.credential': AuthCredential;
13
14
  readonly 'auth.session': AuthSession;
14
15
  readonly 'auth.user_grant': AuthUserGrant;
@@ -167,6 +168,34 @@ export interface AuditEvent {
167
168
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
168
169
  }
169
170
 
171
+ /** `auth.api_key` (owner: base). */
172
+ export interface AuthApiKey {
173
+ readonly name: 'auth.api_key';
174
+ readonly fields: {
175
+ readonly id: F.Id<'auth.api_key'>;
176
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
177
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
178
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
179
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
180
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
181
+ readonly name: F.Char<{ readonly required: true }>;
182
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
183
+ readonly tokenHash: F.Char<{ readonly required: true }>;
184
+ readonly prefix: F.Char<{ readonly required: true }>;
185
+ readonly scopes: F.Text<{ readonly required: true }>;
186
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
187
+ readonly lastUsedAt: F.Datetime;
188
+ readonly lastUsedIp: F.Char;
189
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
190
+ readonly issuedBy: F.Many2one<'res.users'>;
191
+ };
192
+ readonly methods: AuthApiKeyMethods;
193
+ }
194
+
195
+ /** Methods of `auth.api_key`: declared ones and transitions. */
196
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
197
+ }
198
+
170
199
  /** `auth.credential` (owner: base). */
171
200
  export interface AuthCredential {
172
201
  readonly name: 'auth.credential';
@@ -688,6 +717,7 @@ export interface ResUsers {
688
717
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
689
718
  readonly lang: F.Char<{ readonly default: true }>;
690
719
  readonly tz: F.Char<{ readonly default: true }>;
720
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
691
721
  };
692
722
  readonly methods: ResUsersMethods;
693
723
  }
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 3208f1c12068264a
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 81a33d0265524052
2
2
  // Bindings of module `purchase_account`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 3208f1c12068264a
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 81a33d0265524052
2
2
  // Schema view of module `purchase_account` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -22,6 +22,7 @@ export interface SchemaView {
22
22
  readonly 'approval.policy': ApprovalPolicy;
23
23
  readonly 'approval.request': ApprovalRequest;
24
24
  readonly 'audit.event': AuditEvent;
25
+ readonly 'auth.api_key': AuthApiKey;
25
26
  readonly 'auth.credential': AuthCredential;
26
27
  readonly 'auth.session': AuthSession;
27
28
  readonly 'auth.user_grant': AuthUserGrant;
@@ -582,6 +583,34 @@ export interface AuditEvent {
582
583
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
583
584
  }
584
585
 
586
+ /** `auth.api_key` (owner: base). */
587
+ export interface AuthApiKey {
588
+ readonly name: 'auth.api_key';
589
+ readonly fields: {
590
+ readonly id: F.Id<'auth.api_key'>;
591
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
592
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
593
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
594
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
595
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
596
+ readonly name: F.Char<{ readonly required: true }>;
597
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
598
+ readonly tokenHash: F.Char<{ readonly required: true }>;
599
+ readonly prefix: F.Char<{ readonly required: true }>;
600
+ readonly scopes: F.Text<{ readonly required: true }>;
601
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
602
+ readonly lastUsedAt: F.Datetime;
603
+ readonly lastUsedIp: F.Char;
604
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
605
+ readonly issuedBy: F.Many2one<'res.users'>;
606
+ };
607
+ readonly methods: AuthApiKeyMethods;
608
+ }
609
+
610
+ /** Methods of `auth.api_key`: declared ones and transitions. */
611
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
612
+ }
613
+
585
614
  /** `auth.credential` (owner: base). */
586
615
  export interface AuthCredential {
587
616
  readonly name: 'auth.credential';
@@ -1293,6 +1322,7 @@ export interface ResUsers {
1293
1322
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
1294
1323
  readonly lang: F.Char<{ readonly default: true }>;
1295
1324
  readonly tz: F.Char<{ readonly default: true }>;
1325
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
1296
1326
  };
1297
1327
  readonly methods: ResUsersMethods;
1298
1328
  }
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 722b2450c4211d64
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 64da9b36804c7c1a
2
2
  // Bindings of module `purchase_portal`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 722b2450c4211d64
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 64da9b36804c7c1a
2
2
  // Schema view of module `purchase_portal` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -9,6 +9,7 @@ export interface SchemaView {
9
9
  readonly 'approval.policy': ApprovalPolicy;
10
10
  readonly 'approval.request': ApprovalRequest;
11
11
  readonly 'audit.event': AuditEvent;
12
+ readonly 'auth.api_key': AuthApiKey;
12
13
  readonly 'auth.credential': AuthCredential;
13
14
  readonly 'auth.session': AuthSession;
14
15
  readonly 'auth.user_grant': AuthUserGrant;
@@ -170,6 +171,34 @@ export interface AuditEvent {
170
171
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
171
172
  }
172
173
 
174
+ /** `auth.api_key` (owner: base). */
175
+ export interface AuthApiKey {
176
+ readonly name: 'auth.api_key';
177
+ readonly fields: {
178
+ readonly id: F.Id<'auth.api_key'>;
179
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
180
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
181
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
182
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
183
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
184
+ readonly name: F.Char<{ readonly required: true }>;
185
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
186
+ readonly tokenHash: F.Char<{ readonly required: true }>;
187
+ readonly prefix: F.Char<{ readonly required: true }>;
188
+ readonly scopes: F.Text<{ readonly required: true }>;
189
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
190
+ readonly lastUsedAt: F.Datetime;
191
+ readonly lastUsedIp: F.Char;
192
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
193
+ readonly issuedBy: F.Many2one<'res.users'>;
194
+ };
195
+ readonly methods: AuthApiKeyMethods;
196
+ }
197
+
198
+ /** Methods of `auth.api_key`: declared ones and transitions. */
199
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
200
+ }
201
+
173
202
  /** `auth.credential` (owner: base). */
174
203
  export interface AuthCredential {
175
204
  readonly name: 'auth.credential';
@@ -764,6 +793,7 @@ export interface ResUsers {
764
793
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
765
794
  readonly lang: F.Char<{ readonly default: true }>;
766
795
  readonly tz: F.Char<{ readonly default: true }>;
796
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
767
797
  readonly portalPartner: F.Many2one<'res.partner'>; // portal
768
798
  };
769
799
  readonly methods: ResUsersMethods;
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: dbbbc1f6d027934e
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: e1b93f7adda98b39
2
2
  // Bindings of module `sale_account`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: dbbbc1f6d027934e
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: e1b93f7adda98b39
2
2
  // Schema view of module `sale_account` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -22,6 +22,7 @@ export interface SchemaView {
22
22
  readonly 'approval.policy': ApprovalPolicy;
23
23
  readonly 'approval.request': ApprovalRequest;
24
24
  readonly 'audit.event': AuditEvent;
25
+ readonly 'auth.api_key': AuthApiKey;
25
26
  readonly 'auth.credential': AuthCredential;
26
27
  readonly 'auth.session': AuthSession;
27
28
  readonly 'auth.user_grant': AuthUserGrant;
@@ -582,6 +583,34 @@ export interface AuditEvent {
582
583
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
583
584
  }
584
585
 
586
+ /** `auth.api_key` (owner: base). */
587
+ export interface AuthApiKey {
588
+ readonly name: 'auth.api_key';
589
+ readonly fields: {
590
+ readonly id: F.Id<'auth.api_key'>;
591
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
592
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
593
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
594
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
595
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
596
+ readonly name: F.Char<{ readonly required: true }>;
597
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
598
+ readonly tokenHash: F.Char<{ readonly required: true }>;
599
+ readonly prefix: F.Char<{ readonly required: true }>;
600
+ readonly scopes: F.Text<{ readonly required: true }>;
601
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
602
+ readonly lastUsedAt: F.Datetime;
603
+ readonly lastUsedIp: F.Char;
604
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
605
+ readonly issuedBy: F.Many2one<'res.users'>;
606
+ };
607
+ readonly methods: AuthApiKeyMethods;
608
+ }
609
+
610
+ /** Methods of `auth.api_key`: declared ones and transitions. */
611
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
612
+ }
613
+
585
614
  /** `auth.credential` (owner: base). */
586
615
  export interface AuthCredential {
587
616
  readonly name: 'auth.credential';
@@ -1219,6 +1248,7 @@ export interface ResUsers {
1219
1248
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
1220
1249
  readonly lang: F.Char<{ readonly default: true }>;
1221
1250
  readonly tz: F.Char<{ readonly default: true }>;
1251
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
1222
1252
  };
1223
1253
  readonly methods: ResUsersMethods;
1224
1254
  }
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 94aad39e31b4d644
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 5a5c7561d67ef3cf
2
2
  // Bindings of module `sale_portal`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 94aad39e31b4d644
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 5a5c7561d67ef3cf
2
2
  // Schema view of module `sale_portal` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -6,6 +6,7 @@ import type { F } from '../../server/orm.js';
6
6
  export interface SchemaView {
7
7
  readonly 'account.tax': AccountTax;
8
8
  readonly 'audit.event': AuditEvent;
9
+ readonly 'auth.api_key': AuthApiKey;
9
10
  readonly 'auth.credential': AuthCredential;
10
11
  readonly 'auth.session': AuthSession;
11
12
  readonly 'auth.user_grant': AuthUserGrant;
@@ -87,6 +88,34 @@ export interface AuditEvent {
87
88
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
88
89
  }
89
90
 
91
+ /** `auth.api_key` (owner: base). */
92
+ export interface AuthApiKey {
93
+ readonly name: 'auth.api_key';
94
+ readonly fields: {
95
+ readonly id: F.Id<'auth.api_key'>;
96
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
97
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
98
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
99
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
100
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
101
+ readonly name: F.Char<{ readonly required: true }>;
102
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
103
+ readonly tokenHash: F.Char<{ readonly required: true }>;
104
+ readonly prefix: F.Char<{ readonly required: true }>;
105
+ readonly scopes: F.Text<{ readonly required: true }>;
106
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
107
+ readonly lastUsedAt: F.Datetime;
108
+ readonly lastUsedIp: F.Char;
109
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
110
+ readonly issuedBy: F.Many2one<'res.users'>;
111
+ };
112
+ readonly methods: AuthApiKeyMethods;
113
+ }
114
+
115
+ /** Methods of `auth.api_key`: declared ones and transitions. */
116
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
117
+ }
118
+
90
119
  /** `auth.credential` (owner: base). */
91
120
  export interface AuthCredential {
92
121
  readonly name: 'auth.credential';
@@ -610,6 +639,7 @@ export interface ResUsers {
610
639
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
611
640
  readonly lang: F.Char<{ readonly default: true }>;
612
641
  readonly tz: F.Char<{ readonly default: true }>;
642
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
613
643
  readonly portalPartner: F.Many2one<'res.partner'>; // portal
614
644
  };
615
645
  readonly methods: ResUsersMethods;
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 66e39244c2b28050
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 698d6a45d2c40df8
2
2
  // Bindings of module `sale_project`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 66e39244c2b28050
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 698d6a45d2c40df8
2
2
  // Schema view of module `sale_project` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -6,6 +6,7 @@ import type { F } from '../../server/orm.js';
6
6
  export interface SchemaView {
7
7
  readonly 'account.tax': AccountTax;
8
8
  readonly 'audit.event': AuditEvent;
9
+ readonly 'auth.api_key': AuthApiKey;
9
10
  readonly 'auth.credential': AuthCredential;
10
11
  readonly 'auth.session': AuthSession;
11
12
  readonly 'auth.user_grant': AuthUserGrant;
@@ -88,6 +89,34 @@ export interface AuditEvent {
88
89
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
89
90
  }
90
91
 
92
+ /** `auth.api_key` (owner: base). */
93
+ export interface AuthApiKey {
94
+ readonly name: 'auth.api_key';
95
+ readonly fields: {
96
+ readonly id: F.Id<'auth.api_key'>;
97
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
98
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
99
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
100
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
101
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
102
+ readonly name: F.Char<{ readonly required: true }>;
103
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
104
+ readonly tokenHash: F.Char<{ readonly required: true }>;
105
+ readonly prefix: F.Char<{ readonly required: true }>;
106
+ readonly scopes: F.Text<{ readonly required: true }>;
107
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
108
+ readonly lastUsedAt: F.Datetime;
109
+ readonly lastUsedIp: F.Char;
110
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
111
+ readonly issuedBy: F.Many2one<'res.users'>;
112
+ };
113
+ readonly methods: AuthApiKeyMethods;
114
+ }
115
+
116
+ /** Methods of `auth.api_key`: declared ones and transitions. */
117
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
118
+ }
119
+
91
120
  /** `auth.credential` (owner: base). */
92
121
  export interface AuthCredential {
93
122
  readonly name: 'auth.credential';
@@ -653,6 +682,7 @@ export interface ResUsers {
653
682
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
654
683
  readonly lang: F.Char<{ readonly default: true }>;
655
684
  readonly tz: F.Char<{ readonly default: true }>;
685
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
656
686
  };
657
687
  readonly methods: ResUsersMethods;
658
688
  }
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 531f9724f4925363
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: b513566045fc25a0
2
2
  // Bindings of module `sales`: import the definition API from here to get types scoped to what it can see.
3
3
  export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
4
4
  import { definitions } from '../../server/orm.js';
@@ -1,4 +1,4 @@
1
- // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 531f9724f4925363
1
+ // GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: b513566045fc25a0
2
2
  // Schema view of module `sales` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
3
3
  import type { F } from '../../server/orm.js';
4
4
 
@@ -6,6 +6,7 @@ import type { F } from '../../server/orm.js';
6
6
  export interface SchemaView {
7
7
  readonly 'account.tax': AccountTax;
8
8
  readonly 'audit.event': AuditEvent;
9
+ readonly 'auth.api_key': AuthApiKey;
9
10
  readonly 'auth.credential': AuthCredential;
10
11
  readonly 'auth.session': AuthSession;
11
12
  readonly 'auth.user_grant': AuthUserGrant;
@@ -84,6 +85,34 @@ export interface AuditEvent {
84
85
  export interface AuditEventMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'audit.event'> {
85
86
  }
86
87
 
88
+ /** `auth.api_key` (owner: base). */
89
+ export interface AuthApiKey {
90
+ readonly name: 'auth.api_key';
91
+ readonly fields: {
92
+ readonly id: F.Id<'auth.api_key'>;
93
+ readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
94
+ readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
95
+ readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
96
+ readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
97
+ readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
98
+ readonly name: F.Char<{ readonly required: true }>;
99
+ readonly user: F.Many2one<'res.users', { readonly required: true }>;
100
+ readonly tokenHash: F.Char<{ readonly required: true }>;
101
+ readonly prefix: F.Char<{ readonly required: true }>;
102
+ readonly scopes: F.Text<{ readonly required: true }>;
103
+ readonly expiresAt: F.Datetime<{ readonly required: true }>;
104
+ readonly lastUsedAt: F.Datetime;
105
+ readonly lastUsedIp: F.Char;
106
+ readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
107
+ readonly issuedBy: F.Many2one<'res.users'>;
108
+ };
109
+ readonly methods: AuthApiKeyMethods;
110
+ }
111
+
112
+ /** Methods of `auth.api_key`: declared ones and transitions. */
113
+ export interface AuthApiKeyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.api_key'> {
114
+ }
115
+
87
116
  /** `auth.credential` (owner: base). */
88
117
  export interface AuthCredential {
89
118
  readonly name: 'auth.credential';
@@ -534,6 +563,7 @@ export interface ResUsers {
534
563
  readonly companies: F.Many2many<'res.company', { readonly required: true }>;
535
564
  readonly lang: F.Char<{ readonly default: true }>;
536
565
  readonly tz: F.Char<{ readonly default: true }>;
566
+ readonly isService: F.Bool<{ readonly required: true; readonly default: true }>;
537
567
  };
538
568
  readonly methods: ResUsersMethods;
539
569
  }
@@ -93,7 +93,7 @@ export function generateClient(document) {
93
93
  const schemas = asSchema(asSchema(document['components'])['schemas']);
94
94
  const models = modelsOf(asSchema(document['paths']));
95
95
  const out = [];
96
- out.push(`// Generated by \`kosh generate client\` from ${JSON.stringify(String(info['title'] ?? 'Kosh API'))} ${String(info['version'] ?? '')}. Do not edit: regenerate.`, '', '// ------------------------------------------------------------------------------------------------- schemas', '');
96
+ out.push(`// Generated by \`shutro-erp generate client\` from ${JSON.stringify(String(info['title'] ?? 'Shutro ERP API'))} ${String(info['version'] ?? '')}. Do not edit: regenerate.`, '', '// ------------------------------------------------------------------------------------------------- schemas', '');
97
97
  for (const name of Object.keys(schemas).sort()) {
98
98
  const schema = asSchema(schemas[name]);
99
99
  const body = typeOf(schema);