shutro-erp 0.3.0 → 0.3.2
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 +58 -58
- package/dist/account_portal/.kosh/bindings.js +1 -1
- package/dist/account_portal/.kosh/schema.d.ts +31 -1
- package/dist/account_portal/index.js +3 -2
- package/dist/accounting/.kosh/bindings.js +1 -1
- package/dist/accounting/.kosh/schema.d.ts +31 -1
- package/dist/accounting/index.js +4 -0
- package/dist/assistant/routes.js +1 -1
- package/dist/automation/engine.js +1 -1
- package/dist/automation/web/messages.js +2 -2
- package/dist/cli/apps.d.ts +1 -1
- package/dist/cli/apps.js +14 -14
- package/dist/cli/bin.js +3 -0
- package/dist/cli/index.js +11 -11
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +60 -36
- package/dist/cli/launch.js +10 -7
- package/dist/cli/project.d.ts +7 -7
- package/dist/cli/project.js +25 -25
- package/dist/cli/prompt.js +2 -2
- package/dist/cli/templates.d.ts +3 -3
- package/dist/cli/templates.js +33 -28
- package/dist/cli/ui.d.ts +1 -8
- package/dist/cli/ui.js +36 -12
- package/dist/contacts/.kosh/bindings.js +1 -1
- package/dist/contacts/.kosh/schema.d.ts +31 -1
- package/dist/integrations/inbound.d.ts +36 -0
- package/dist/integrations/inbound.js +171 -0
- package/dist/integrations/index.d.ts +18 -0
- package/dist/integrations/index.js +400 -0
- package/dist/integrations/models.d.ts +6 -0
- package/dist/integrations/models.js +119 -0
- package/dist/integrations/web/DeliveryTools.d.ts +4 -0
- package/dist/integrations/web/DeliveryTools.js +15 -0
- package/dist/integrations/web/EndpointTools.d.ts +7 -0
- package/dist/integrations/web/EndpointTools.js +25 -0
- package/dist/integrations/web/InboundTools.d.ts +4 -0
- package/dist/integrations/web/InboundTools.js +15 -0
- package/dist/integrations/web/WebhookTools.d.ts +7 -0
- package/dist/integrations/web/WebhookTools.js +25 -0
- package/dist/integrations/web/index.d.ts +16 -0
- package/dist/integrations/web/index.js +27 -0
- package/dist/integrations/web/messages.d.ts +2 -0
- package/dist/integrations/web/messages.js +53 -0
- package/dist/integrations/webhooks.d.ts +63 -0
- package/dist/integrations/webhooks.js +217 -0
- package/dist/l10n_bd/.kosh/bindings.js +1 -1
- package/dist/l10n_bd/.kosh/schema.d.ts +31 -1
- package/dist/l10n_in/.kosh/bindings.js +1 -1
- package/dist/l10n_in/.kosh/schema.d.ts +31 -1
- package/dist/l10n_in/einvoice.js +1 -1
- package/dist/l10n_in/web/messages.js +2 -2
- package/dist/mail/index.js +2 -2
- package/dist/modules-sdk/index.d.ts +1 -1
- package/dist/modules-sdk/loader.js +2 -2
- package/dist/modules-sdk/manifest.d.ts +48 -0
- package/dist/notify/messages.js +3 -3
- package/dist/notify/routes.js +1 -1
- package/dist/notify/web/messages.js +1 -1
- package/dist/payment/.kosh/bindings.d.ts +22 -0
- package/dist/payment/.kosh/bindings.js +15 -0
- package/dist/payment/.kosh/schema.d.ts +1553 -0
- package/dist/payment/index.d.ts +34 -0
- package/dist/payment/index.js +375 -0
- package/dist/payment/module.d.ts +6853 -0
- package/dist/payment/module.js +74 -0
- package/dist/payment/providers.d.ts +64 -0
- package/dist/payment/providers.js +77 -0
- package/dist/payment/settle.d.ts +11 -0
- package/dist/payment/settle.js +59 -0
- package/dist/payment/sslcommerz.d.ts +12 -0
- package/dist/payment/sslcommerz.js +185 -0
- package/dist/portal/.kosh/bindings.js +1 -1
- package/dist/portal/.kosh/schema.d.ts +31 -1
- package/dist/portal/routes-documents.js +5 -0
- package/dist/product/.kosh/bindings.js +1 -1
- package/dist/product/.kosh/schema.d.ts +31 -1
- package/dist/project/.kosh/bindings.js +1 -1
- package/dist/project/.kosh/schema.d.ts +31 -1
- package/dist/project_portal/.kosh/bindings.js +1 -1
- package/dist/project_portal/.kosh/schema.d.ts +31 -1
- package/dist/purchase/.kosh/bindings.js +1 -1
- package/dist/purchase/.kosh/schema.d.ts +31 -1
- package/dist/purchase_account/.kosh/bindings.js +1 -1
- package/dist/purchase_account/.kosh/schema.d.ts +31 -1
- package/dist/purchase_portal/.kosh/bindings.js +1 -1
- package/dist/purchase_portal/.kosh/schema.d.ts +31 -1
- package/dist/sale_account/.kosh/bindings.js +1 -1
- package/dist/sale_account/.kosh/schema.d.ts +31 -1
- package/dist/sale_portal/.kosh/bindings.js +1 -1
- package/dist/sale_portal/.kosh/schema.d.ts +31 -1
- package/dist/sale_project/.kosh/bindings.js +1 -1
- package/dist/sale_project/.kosh/schema.d.ts +31 -1
- package/dist/sales/.kosh/bindings.js +1 -1
- package/dist/sales/.kosh/schema.d.ts +31 -1
- package/dist/sales/index.js +2 -0
- package/dist/server/api/client.js +1 -1
- package/dist/server/api/openapi.js +17 -1
- package/dist/server/api/rest.d.ts +6 -1
- package/dist/server/api/rest.js +11 -0
- package/dist/server/apps.js +5 -5
- package/dist/server/auth/api-keys.d.ts +13 -0
- package/dist/server/auth/api-keys.js +65 -0
- package/dist/server/auth/base.js +24 -0
- package/dist/server/auth/crypto.js +1 -1
- package/dist/server/auth/scopes.d.ts +12 -0
- package/dist/server/auth/scopes.js +51 -0
- package/dist/server/auth/service.d.ts +57 -1
- package/dist/server/auth/service.js +229 -5
- package/dist/server/demo.d.ts +1 -1
- package/dist/server/demo.js +1 -1
- package/dist/server/env-names.d.ts +2 -0
- package/dist/server/env-names.js +16 -0
- package/dist/server/host.js +5 -1
- package/dist/server/identity.d.ts +7 -0
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.js +2 -1
- package/dist/server/registry.js +1 -1
- package/dist/server/server.d.ts +5 -0
- package/dist/server/server.js +45 -5
- package/dist/settings/routes.js +1 -1
- package/dist/settings/web/ApiKeysPage.d.ts +8 -0
- package/dist/settings/web/ApiKeysPage.js +70 -0
- package/dist/settings/web/index.d.ts +1 -0
- package/dist/settings/web/index.js +4 -0
- package/dist/settings/web/messages.js +62 -0
- package/dist/storage/routes.js +1 -1
- package/dist/studio/build.js +1 -1
- package/dist/studio/generate.js +4 -4
- package/dist/studio/module.js +5 -5
- package/dist/studio/web/messages.js +2 -2
- package/dist/ui/app.js +26 -3
- package/dist/ui/i18n/messages.js +2 -2
- package/dist/ui/pwa/worker.js +2 -2
- package/dist/ui/registry.d.ts +15 -0
- package/dist/ui/registry.js +20 -0
- package/package.json +15 -3
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
// GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
}
|
package/dist/sales/index.js
CHANGED
|
@@ -17,6 +17,8 @@ export const sales = defineModule({
|
|
|
17
17
|
kosh: '^0.1.0',
|
|
18
18
|
hooks: { demo: salesDemo },
|
|
19
19
|
depends: [contacts, product, messaging],
|
|
20
|
+
// What webhooks may subscribe to besides record changes (RFC 0017 §5.3).
|
|
21
|
+
events: [{ topic: 'sale.order.confirmed', model: 'sale.order', label: 'Sales order confirmed' }],
|
|
20
22
|
app: {
|
|
21
23
|
code: 'sales',
|
|
22
24
|
label: 'Sales',
|
|
@@ -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 \`
|
|
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);
|
|
@@ -282,7 +282,23 @@ export function openApiDocument(models, info) {
|
|
|
282
282
|
openapi: '3.1.0',
|
|
283
283
|
info,
|
|
284
284
|
paths: Object.assign({}, ...list.map(modelPaths)),
|
|
285
|
+
// A session (sign-in) or an API key (RFC 0017 §5.1); cookie sessions also send X-CSRF-Token on changes.
|
|
286
|
+
security: [{ session: [] }, { apiKey: [] }, { cookie: [] }],
|
|
285
287
|
components: {
|
|
288
|
+
securitySchemes: {
|
|
289
|
+
session: {
|
|
290
|
+
type: 'http',
|
|
291
|
+
scheme: 'bearer',
|
|
292
|
+
description: 'A session token from POST /api/v1/auth/login.',
|
|
293
|
+
},
|
|
294
|
+
apiKey: {
|
|
295
|
+
type: 'apiKey',
|
|
296
|
+
in: 'header',
|
|
297
|
+
name: 'X-Api-Key',
|
|
298
|
+
description: 'An API key (sk_…; also accepted as Authorization: Bearer). Its scopes — *, read:<app>, write:<app> — narrow the user’s rights.',
|
|
299
|
+
},
|
|
300
|
+
cookie: { type: 'apiKey', in: 'cookie', name: 'kosh_session' },
|
|
301
|
+
},
|
|
286
302
|
schemas: {
|
|
287
303
|
Problem: {
|
|
288
304
|
type: 'object',
|
|
@@ -344,5 +360,5 @@ export function openApiDocument(models, info) {
|
|
|
344
360
|
*/
|
|
345
361
|
export function openApiOf(modules) {
|
|
346
362
|
const models = publicApiModels(buildKoshRegistry(modules));
|
|
347
|
-
return openApiDocument(models.values(), { title: '
|
|
363
|
+
return openApiDocument(models.values(), { title: 'Shutro ERP API', version: KOSH_VERSION });
|
|
348
364
|
}
|
|
@@ -17,8 +17,13 @@
|
|
|
17
17
|
* - `GET /api/v1/openapi.json` the OpenAPI 3.1 document
|
|
18
18
|
*/
|
|
19
19
|
import type { FastifyInstance } from 'fastify';
|
|
20
|
-
import type { Driver } from '../orm.js';
|
|
20
|
+
import type { Driver, Env } from '../orm.js';
|
|
21
21
|
import { type ApiModel } from './metadata.js';
|
|
22
|
+
/**
|
|
23
|
+
* A record as `GET /api/v1/models/<model>/<id>` returns it to `env`'s user (their readable default fields), or null
|
|
24
|
+
* when they cannot see it: what webhooks send (RFC 0017 §5.3).
|
|
25
|
+
*/
|
|
26
|
+
export declare function readApiRecord(env: Env, model: ApiModel, id: number): Promise<Record<string, unknown> | null>;
|
|
22
27
|
/** Registers the generated routes for `models`. */
|
|
23
28
|
export declare function registerRestApi(app: FastifyInstance, options: {
|
|
24
29
|
readonly models: ReadonlyMap<string, ApiModel>;
|