shutro-erp 0.3.2 → 0.3.4
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/dist/account_portal/.kosh/bindings.js +1 -1
- package/dist/account_portal/.kosh/schema.d.ts +156 -1
- package/dist/accounting/.kosh/bindings.js +1 -1
- package/dist/accounting/.kosh/schema.d.ts +156 -1
- package/dist/assistant/index.js +1 -1
- package/dist/contacts/.kosh/bindings.js +1 -1
- package/dist/contacts/.kosh/schema.d.ts +156 -1
- package/dist/integrations/index.js +12 -0
- package/dist/integrations/web/OAuthAppsPage.d.ts +9 -0
- package/dist/integrations/web/OAuthAppsPage.js +79 -0
- package/dist/integrations/web/index.d.ts +1 -0
- package/dist/integrations/web/index.js +3 -0
- package/dist/integrations/web/messages.js +58 -0
- package/dist/l10n_bd/.kosh/bindings.js +1 -1
- package/dist/l10n_bd/.kosh/schema.d.ts +156 -1
- package/dist/l10n_in/.kosh/bindings.js +1 -1
- package/dist/l10n_in/.kosh/schema.d.ts +156 -4
- package/dist/l10n_in/module.d.ts +0 -62
- package/dist/l10n_in/module.js +2 -4
- package/dist/messaging/web/index.js +1 -1
- package/dist/notify/web/index.js +1 -1
- package/dist/payment/.kosh/bindings.js +1 -1
- package/dist/payment/.kosh/schema.d.ts +157 -2
- package/dist/payment/bkash.d.ts +28 -0
- package/dist/payment/bkash.js +169 -0
- package/dist/payment/index.d.ts +4 -0
- package/dist/payment/index.js +80 -24
- package/dist/payment/module.d.ts +7 -4
- package/dist/payment/module.js +3 -0
- package/dist/payment/money.d.ts +7 -0
- package/dist/payment/money.js +37 -0
- package/dist/payment/providers.d.ts +13 -2
- package/dist/payment/razorpay.d.ts +12 -0
- package/dist/payment/razorpay.js +149 -0
- package/dist/payment/sslcommerz.js +1 -1
- package/dist/payment/stripe.d.ts +15 -0
- package/dist/payment/stripe.js +182 -0
- package/dist/permissions/admin.d.ts +3 -0
- package/dist/permissions/admin.js +108 -10
- package/dist/permissions/index.d.ts +1 -0
- package/dist/permissions/index.js +3 -0
- package/dist/permissions/roles.d.ts +2 -0
- package/dist/permissions/roles.js +236 -0
- package/dist/portal/.kosh/bindings.js +1 -1
- package/dist/portal/.kosh/schema.d.ts +156 -1
- package/dist/product/.kosh/bindings.js +1 -1
- package/dist/product/.kosh/schema.d.ts +156 -1
- package/dist/project/.kosh/bindings.js +1 -1
- package/dist/project/.kosh/schema.d.ts +156 -1
- package/dist/project_portal/.kosh/bindings.js +1 -1
- package/dist/project_portal/.kosh/schema.d.ts +156 -1
- package/dist/purchase/.kosh/bindings.js +1 -1
- package/dist/purchase/.kosh/schema.d.ts +156 -1
- package/dist/purchase_account/.kosh/bindings.js +1 -1
- package/dist/purchase_account/.kosh/schema.d.ts +156 -1
- package/dist/purchase_portal/.kosh/bindings.js +1 -1
- package/dist/purchase_portal/.kosh/schema.d.ts +156 -1
- package/dist/sale_account/.kosh/bindings.js +1 -1
- package/dist/sale_account/.kosh/schema.d.ts +156 -1
- package/dist/sale_portal/.kosh/bindings.js +1 -1
- package/dist/sale_portal/.kosh/schema.d.ts +156 -1
- package/dist/sale_project/.kosh/bindings.js +1 -1
- package/dist/sale_project/.kosh/schema.d.ts +156 -1
- package/dist/sales/.kosh/bindings.js +1 -1
- package/dist/sales/.kosh/schema.d.ts +156 -1
- package/dist/server/auth/base.js +98 -0
- package/dist/server/auth/oauth.d.ts +21 -0
- package/dist/server/auth/oauth.js +579 -0
- package/dist/server/auth/routes.d.ts +3 -0
- package/dist/server/auth/routes.js +29 -0
- package/dist/server/auth/service.d.ts +56 -0
- package/dist/server/auth/service.js +185 -3
- package/dist/server/identity.d.ts +4 -0
- package/dist/server/images.d.ts +12 -0
- package/dist/server/images.js +139 -0
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.js +1 -0
- package/dist/server/server.d.ts +4 -0
- package/dist/server/server.js +20 -4
- package/dist/settings/company.d.ts +34 -0
- package/dist/settings/company.js +189 -0
- package/dist/settings/index.d.ts +10 -10
- package/dist/settings/index.js +159 -30
- package/dist/settings/people.d.ts +16 -0
- package/dist/settings/people.js +507 -0
- package/dist/settings/security.d.ts +13 -0
- package/dist/settings/security.js +158 -0
- package/dist/settings/web/AuditPage.d.ts +8 -0
- package/dist/settings/web/AuditPage.js +74 -0
- package/dist/settings/web/CompaniesPage.d.ts +8 -0
- package/dist/settings/web/CompaniesPage.js +52 -0
- package/dist/settings/web/CompanyPage.d.ts +9 -0
- package/dist/settings/web/CompanyPage.js +105 -0
- package/dist/settings/web/ConnectedAppsPage.d.ts +7 -0
- package/dist/settings/web/ConnectedAppsPage.js +33 -0
- package/dist/settings/web/OverviewPage.d.ts +9 -0
- package/dist/settings/web/OverviewPage.js +77 -0
- package/dist/settings/web/PeoplePage.d.ts +9 -0
- package/dist/settings/web/PeoplePage.js +154 -0
- package/dist/settings/web/ProfilePage.d.ts +14 -0
- package/dist/settings/web/ProfilePage.js +196 -0
- package/dist/settings/web/RolesEditor.d.ts +35 -0
- package/dist/settings/web/RolesEditor.js +49 -0
- package/dist/settings/web/RolesPage.d.ts +9 -0
- package/dist/settings/web/RolesPage.js +296 -0
- package/dist/settings/web/SecurityPage.d.ts +8 -0
- package/dist/settings/web/SecurityPage.js +81 -0
- package/dist/settings/web/index.d.ts +10 -0
- package/dist/settings/web/index.js +31 -1
- package/dist/settings/web/messages.js +594 -0
- package/dist/ui/api.d.ts +8 -0
- package/dist/ui/app.d.ts +5 -0
- package/dist/ui/app.js +143 -33
- package/dist/ui/components/AppIcon.js +11 -1
- package/dist/ui/components/Avatar.d.ts +21 -0
- package/dist/ui/components/Avatar.js +71 -0
- package/dist/ui/components/primitives.d.ts +9 -1
- package/dist/ui/components/primitives.js +12 -4
- package/dist/ui/context.d.ts +10 -1
- package/dist/ui/context.js +60 -2
- package/dist/ui/i18n/messages.d.ts +76 -0
- package/dist/ui/i18n/messages.js +152 -0
- package/dist/ui/index.d.ts +3 -1
- package/dist/ui/index.js +3 -1
- package/dist/ui/lib/accent.d.ts +13 -0
- package/dist/ui/lib/accent.js +36 -0
- package/dist/ui/registry.d.ts +7 -1
- package/dist/ui/registry.js +10 -1
- package/dist/ui/search/ViewTabs.d.ts +14 -0
- package/dist/ui/search/ViewTabs.js +42 -0
- package/dist/ui/shell/Activate.d.ts +6 -0
- package/dist/ui/shell/Activate.js +39 -0
- package/dist/ui/shell/CommandPalette.d.ts +7 -1
- package/dist/ui/shell/CommandPalette.js +16 -2
- package/dist/ui/shell/Consent.d.ts +5 -0
- package/dist/ui/shell/Consent.js +35 -0
- package/dist/ui/shell/Home.js +85 -16
- package/dist/ui/shell/Sidebar.d.ts +27 -0
- package/dist/ui/shell/Sidebar.js +77 -0
- package/dist/ui/shell/TwoFactorSetup.d.ts +5 -0
- package/dist/ui/shell/TwoFactorSetup.js +32 -0
- package/dist/ui/shell/shortcuts.d.ts +3 -0
- package/dist/ui/shell/shortcuts.js +13 -4
- package/dist/ui/styles.css +70 -28
- package/dist/ui/views/DateField.d.ts +10 -0
- package/dist/ui/views/DateField.js +129 -0
- package/dist/ui/views/FormView.js +161 -21
- package/dist/ui/views/ListView.d.ts +2 -0
- package/dist/ui/views/ListView.js +57 -25
- package/dist/ui/views/StatusChip.d.ts +10 -0
- package/dist/ui/views/StatusChip.js +22 -0
- package/dist/ui/views/widgets.d.ts +3 -0
- package/dist/ui/views/widgets.js +26 -8
- package/dist/views/types.d.ts +7 -0
- package/dist/views/validate.js +4 -0
- package/package.json +2 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integrations › OAuth apps (RFC 0017 §5.2): the third-party apps that may ask users for access — their client id,
|
|
3
|
+
* redirect addresses and the scopes they may ask for. A new app's client secret is shown once (public apps have none
|
|
4
|
+
* and use PKCE); a new secret replaces the old at once; an app switched off stops every token it holds. The server
|
|
5
|
+
* checks the addresses and scopes and audits every change.
|
|
6
|
+
*/
|
|
7
|
+
import { type PageProps } from '../../ui/index.js';
|
|
8
|
+
import { type ReactElement } from 'react';
|
|
9
|
+
export declare function OAuthAppsPage({ api }: PageProps): ReactElement;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Integrations › OAuth apps (RFC 0017 §5.2): the third-party apps that may ask users for access — their client id,
|
|
4
|
+
* redirect addresses and the scopes they may ask for. A new app's client secret is shown once (public apps have none
|
|
5
|
+
* and use PKCE); a new secret replaces the old at once; an app switched off stops every token it holds. The server
|
|
6
|
+
* checks the addresses and scopes and audits every change.
|
|
7
|
+
*/
|
|
8
|
+
import { Alert, ApiError, Badge, Button, Checkbox, Dialog, Input, Label, } from '../../ui/index.js';
|
|
9
|
+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
10
|
+
import { Check, Copy, KeyRound, Plus } from 'lucide-react';
|
|
11
|
+
import { useEffect, useId, useState } from 'react';
|
|
12
|
+
import { useTranslation } from 'react-i18next';
|
|
13
|
+
const message = (error) => (error instanceof ApiError ? error.message : String(error));
|
|
14
|
+
/** A value to copy, with a button that says when it is copied. */
|
|
15
|
+
function Copyable({ value, label, }) {
|
|
16
|
+
const { t } = useTranslation('integrations');
|
|
17
|
+
const [copied, setCopied] = useState(false);
|
|
18
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "min-w-0 flex-1 select-all break-all rounded bg-muted px-2 py-1 font-mono text-xs", children: value }), _jsx(Button, { size: "icon", variant: "ghost", "aria-label": t('oauth.copy', { what: label }), onClick: () => {
|
|
19
|
+
void navigator.clipboard?.writeText(value).then(() => setCopied(true));
|
|
20
|
+
}, children: copied ? _jsx(Check, { "aria-hidden": true }) : _jsx(Copy, { "aria-hidden": true }) })] }));
|
|
21
|
+
}
|
|
22
|
+
function NewAppDialog({ api, open, onOpenChange, }) {
|
|
23
|
+
const { t } = useTranslation('integrations');
|
|
24
|
+
const id = useId();
|
|
25
|
+
const queryClient = useQueryClient();
|
|
26
|
+
const [name, setName] = useState('');
|
|
27
|
+
const [uris, setUris] = useState('');
|
|
28
|
+
const [chosen, setChosen] = useState([]);
|
|
29
|
+
const [confidential, setConfidential] = useState(true);
|
|
30
|
+
const scopes = useQuery({
|
|
31
|
+
queryKey: ['auth', 'scopes'],
|
|
32
|
+
queryFn: () => api.call('GET', '/api/v1/auth/scopes'),
|
|
33
|
+
});
|
|
34
|
+
const create = useMutation({
|
|
35
|
+
mutationFn: () => api.call('POST', '/api/v1/oauth/apps', {
|
|
36
|
+
name,
|
|
37
|
+
confidential,
|
|
38
|
+
redirectUris: uris
|
|
39
|
+
.split(/\s+/)
|
|
40
|
+
.map((u) => u.trim())
|
|
41
|
+
.filter((u) => u !== ''),
|
|
42
|
+
scopes: chosen,
|
|
43
|
+
}),
|
|
44
|
+
onSuccess: () => void queryClient.invalidateQueries({ queryKey: ['oauth', 'apps'] }),
|
|
45
|
+
});
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!open) {
|
|
48
|
+
setName('');
|
|
49
|
+
setUris('');
|
|
50
|
+
setChosen([]);
|
|
51
|
+
setConfidential(true);
|
|
52
|
+
create.reset();
|
|
53
|
+
}
|
|
54
|
+
}, [open, create.reset]);
|
|
55
|
+
const made = create.data;
|
|
56
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, title: t('oauth.newTitle'), description: t('oauth.newHint'), wide: true, footer: made === undefined ? (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => onOpenChange(false), children: t('oauth.cancel') }), _jsx(Button, { variant: "primary", busy: create.isPending, disabled: name.trim() === '' || uris.trim() === '' || chosen.length === 0, onClick: () => create.mutate(), children: t('oauth.create') })] })) : (_jsx(Button, { variant: "primary", onClick: () => onOpenChange(false), children: t('oauth.done') })), children: made !== undefined ? (_jsxs("div", { className: "grid gap-3", children: [_jsx(Alert, { tone: "warning", children: made.clientSecret === null ? t('oauth.publicMade') : t('oauth.secretOnce') }), _jsxs("div", { className: "grid gap-1", children: [_jsx("span", { className: "text-sm font-medium", children: t('oauth.clientId') }), _jsx(Copyable, { value: made.clientId, label: t('oauth.clientId') })] }), made.clientSecret === null ? null : (_jsxs("div", { className: "grid gap-1", "data-testid": "oauth-secret", children: [_jsx("span", { className: "text-sm font-medium", children: t('oauth.clientSecret') }), _jsx(Copyable, { value: made.clientSecret, label: t('oauth.clientSecret') })] }))] })) : (_jsxs("div", { className: "grid gap-4", children: [_jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: `${id}-name`, children: t('oauth.name') }), _jsx(Input, { id: `${id}-name`, value: name, onChange: (e) => setName(e.target.value) })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: `${id}-uris`, children: t('oauth.redirects') }), _jsx("textarea", { id: `${id}-uris`, rows: 2, className: "rounded-md border bg-surface px-3 py-2 font-mono text-sm", placeholder: "https://partner.example.com/oauth/callback", value: uris, onChange: (e) => setUris(e.target.value) }), _jsx("p", { className: "text-xs text-muted-foreground", children: t('oauth.redirectsHint') })] }), _jsxs("fieldset", { className: "grid gap-2", children: [_jsx("legend", { className: "mb-1 text-sm font-medium", children: t('oauth.scopes') }), _jsx("div", { className: "grid max-h-48 gap-1.5 overflow-auto rounded-md border p-2 sm:grid-cols-2", children: (scopes.data?.scopes ?? []).map((s) => (_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { id: `${id}-scope-${s.scope}`, checked: chosen.includes(s.scope), onCheckedChange: (on) => setChosen((all) => on === true ? [...all, s.scope] : all.filter((x) => x !== s.scope)) }), _jsx(Label, { htmlFor: `${id}-scope-${s.scope}`, className: "font-normal", children: s.label }), _jsx("code", { className: "ms-auto font-mono text-xs text-muted-foreground", children: s.scope })] }, s.scope))) })] }), _jsxs("div", { className: "flex items-start gap-2 text-sm", children: [_jsx(Checkbox, { id: `${id}-public`, checked: !confidential, onCheckedChange: (on) => setConfidential(on !== true) }), _jsxs(Label, { htmlFor: `${id}-public`, className: "font-normal", children: [t('oauth.public'), _jsx("span", { className: "block text-xs text-muted-foreground", children: t('oauth.publicHint') })] })] }), create.error === null ? null : _jsx(Alert, { tone: "danger", children: message(create.error) })] })) }));
|
|
57
|
+
}
|
|
58
|
+
export function OAuthAppsPage({ api }) {
|
|
59
|
+
const { t } = useTranslation('integrations');
|
|
60
|
+
const queryClient = useQueryClient();
|
|
61
|
+
const [creating, setCreating] = useState(false);
|
|
62
|
+
const [secret, setSecret] = useState(null);
|
|
63
|
+
const apps = useQuery({
|
|
64
|
+
queryKey: ['oauth', 'apps'],
|
|
65
|
+
queryFn: () => api.call('GET', '/api/v1/oauth/apps'),
|
|
66
|
+
});
|
|
67
|
+
const refresh = () => void queryClient.invalidateQueries({ queryKey: ['oauth', 'apps'] });
|
|
68
|
+
const rotate = useMutation({
|
|
69
|
+
mutationFn: (app) => api
|
|
70
|
+
.call('POST', `/api/v1/oauth/apps/${app.id}/secret`)
|
|
71
|
+
.then((r) => setSecret({ app: app.name, value: r.clientSecret })),
|
|
72
|
+
});
|
|
73
|
+
const toggle = useMutation({
|
|
74
|
+
mutationFn: (app) => api.call('PATCH', `/api/v1/oauth/apps/${app.id}`, { active: !app.active }),
|
|
75
|
+
onSuccess: refresh,
|
|
76
|
+
});
|
|
77
|
+
const error = apps.error ?? rotate.error ?? toggle.error;
|
|
78
|
+
return (_jsxs("div", { className: "mx-auto grid max-w-4xl gap-6", children: [_jsxs("header", { className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: t('oauth.title') }), _jsx("p", { className: "text-sm text-muted-foreground", children: t('oauth.intro') })] }), _jsxs(Button, { variant: "primary", onClick: () => setCreating(true), children: [_jsx(Plus, { className: "size-4", "aria-hidden": true }), t('oauth.new')] })] }), error === null ? null : _jsx(Alert, { tone: "danger", children: message(error) }), secret === null ? null : (_jsxs(Alert, { tone: "warning", children: [_jsx("p", { className: "mb-2", children: t('oauth.newSecret', { app: secret.app }) }), _jsx(Copyable, { value: secret.value, label: t('oauth.clientSecret') })] })), apps.data === undefined ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "\u2026" })) : apps.data.apps.length === 0 ? (_jsx("p", { className: "rounded-lg border bg-surface p-6 text-center text-sm text-muted-foreground", children: t('oauth.none') })) : (_jsx("ul", { className: "grid gap-3", children: apps.data.apps.map((a) => (_jsxs("li", { className: "grid gap-3 rounded-lg border bg-surface p-4", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(KeyRound, { className: "size-4 text-muted-foreground", "aria-hidden": true }), _jsx("span", { className: "font-medium", children: a.name }), _jsx(Badge, { tone: a.confidential ? 'neutral' : 'info', children: a.confidential ? t('oauth.confidential') : t('oauth.publicBadge') }), a.active ? null : _jsx(Badge, { tone: "warning", children: t('oauth.inactive') }), _jsx("span", { className: "flex-1" }), a.confidential ? (_jsx(Button, { size: "sm", busy: rotate.isPending && rotate.variables?.id === a.id, onClick: () => rotate.mutate(a), children: t('oauth.rotate') })) : null, _jsx(Button, { size: "sm", variant: "ghost", busy: toggle.isPending && toggle.variables?.id === a.id, onClick: () => toggle.mutate(a), children: a.active ? t('oauth.deactivate') : t('oauth.activate') })] }), _jsxs("dl", { className: "grid gap-2 text-sm sm:grid-cols-[10rem_1fr]", children: [_jsx("dt", { className: "text-muted-foreground", children: t('oauth.clientId') }), _jsx("dd", { children: _jsx(Copyable, { value: a.clientId, label: t('oauth.clientId') }) }), _jsx("dt", { className: "text-muted-foreground", children: t('oauth.redirects') }), _jsx("dd", { className: "break-all font-mono text-xs", children: a.redirectUris.join('\n') }), _jsx("dt", { className: "text-muted-foreground", children: t('oauth.scopes') }), _jsx("dd", { className: "flex flex-wrap gap-1", children: a.scopes.map((s) => (_jsx(Badge, { children: _jsx("span", { className: "font-mono text-xs", children: s }) }, s))) })] })] }, a.id))) })), _jsx(NewAppDialog, { api: api, open: creating, onOpenChange: setCreating })] }));
|
|
79
|
+
}
|
|
@@ -10,6 +10,7 @@ import { messages } from './messages.js';
|
|
|
10
10
|
export { DeliveryTools } from './DeliveryTools.js';
|
|
11
11
|
export { EndpointTools } from './EndpointTools.js';
|
|
12
12
|
export { InboundTools } from './InboundTools.js';
|
|
13
|
+
export { OAuthAppsPage } from './OAuthAppsPage.js';
|
|
13
14
|
export { WebhookTools } from './WebhookTools.js';
|
|
14
15
|
/** Registers the components (and the messages in `i18n`, when given). */
|
|
15
16
|
export declare function registerIntegrationsWeb(registry: Registry, i18n?: i18n): Registry;
|
|
@@ -9,10 +9,12 @@ import { DeliveryTools } from './DeliveryTools.js';
|
|
|
9
9
|
import { EndpointTools } from './EndpointTools.js';
|
|
10
10
|
import { InboundTools } from './InboundTools.js';
|
|
11
11
|
import { messages } from './messages.js';
|
|
12
|
+
import { OAuthAppsPage } from './OAuthAppsPage.js';
|
|
12
13
|
import { WebhookTools } from './WebhookTools.js';
|
|
13
14
|
export { DeliveryTools } from './DeliveryTools.js';
|
|
14
15
|
export { EndpointTools } from './EndpointTools.js';
|
|
15
16
|
export { InboundTools } from './InboundTools.js';
|
|
17
|
+
export { OAuthAppsPage } from './OAuthAppsPage.js';
|
|
16
18
|
export { WebhookTools } from './WebhookTools.js';
|
|
17
19
|
/** Registers the components (and the messages in `i18n`, when given). */
|
|
18
20
|
export function registerIntegrationsWeb(registry, i18n) {
|
|
@@ -20,6 +22,7 @@ export function registerIntegrationsWeb(registry, i18n) {
|
|
|
20
22
|
registry.registerComponent('integrations.DeliveryTools', DeliveryTools);
|
|
21
23
|
registry.registerComponent('integrations.EndpointTools', EndpointTools);
|
|
22
24
|
registry.registerComponent('integrations.InboundTools', InboundTools);
|
|
25
|
+
registry.registerPage('integrations.OAuthApps', OAuthAppsPage);
|
|
23
26
|
if (i18n !== undefined)
|
|
24
27
|
addMessages(i18n, 'integrations', messages);
|
|
25
28
|
return registry;
|
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
/** Messages of the Integrations app (namespace `integrations`), in English and Bangla. */
|
|
2
2
|
export const messages = {
|
|
3
3
|
en: {
|
|
4
|
+
oauth: {
|
|
5
|
+
title: 'OAuth apps',
|
|
6
|
+
intro: 'Apps of other companies that may ask your users for access. Each user decides; an app never does more than its user may.',
|
|
7
|
+
new: 'New app',
|
|
8
|
+
newTitle: 'A new OAuth app',
|
|
9
|
+
newHint: 'Where users are sent back after they allow it, and what it may ask for.',
|
|
10
|
+
name: 'Name',
|
|
11
|
+
redirects: 'Redirect addresses',
|
|
12
|
+
redirectsHint: 'One per line, https (http only for localhost). The address must match exactly.',
|
|
13
|
+
scopes: 'Scopes it may ask for',
|
|
14
|
+
public: 'A public app (phone or browser app: no secret, PKCE only)',
|
|
15
|
+
publicHint: 'It cannot keep a secret, so every sign-in proves itself with PKCE.',
|
|
16
|
+
create: 'Create',
|
|
17
|
+
cancel: 'Cancel',
|
|
18
|
+
done: 'Done',
|
|
19
|
+
clientId: 'Client id',
|
|
20
|
+
clientSecret: 'Client secret',
|
|
21
|
+
secretOnce: 'Copy the client secret now: it is shown only once.',
|
|
22
|
+
publicMade: 'A public app has no secret: give the developer its client id.',
|
|
23
|
+
newSecret: 'The new secret of {{app}}: copy it now. The old one stops working.',
|
|
24
|
+
copy: 'Copy the {{what}}',
|
|
25
|
+
none: 'No OAuth apps yet.',
|
|
26
|
+
confidential: 'Confidential',
|
|
27
|
+
publicBadge: 'Public',
|
|
28
|
+
inactive: 'Switched off',
|
|
29
|
+
rotate: 'New secret',
|
|
30
|
+
deactivate: 'Switch off',
|
|
31
|
+
activate: 'Switch on',
|
|
32
|
+
},
|
|
4
33
|
tools: {
|
|
5
34
|
title: 'Webhook tools',
|
|
6
35
|
ping: 'Send a test event',
|
|
@@ -26,6 +55,35 @@ export const messages = {
|
|
|
26
55
|
},
|
|
27
56
|
},
|
|
28
57
|
bn: {
|
|
58
|
+
oauth: {
|
|
59
|
+
title: 'OAuth অ্যাপ',
|
|
60
|
+
intro: 'অন্য প্রতিষ্ঠানের অ্যাপ যা আপনার ব্যবহারকারীদের কাছে অনুমতি চাইতে পারে। প্রতিটি ব্যবহারকারী নিজে সিদ্ধান্ত নেন।',
|
|
61
|
+
new: 'নতুন অ্যাপ',
|
|
62
|
+
newTitle: 'নতুন OAuth অ্যাপ',
|
|
63
|
+
newHint: 'অনুমতির পর ব্যবহারকারীরা কোথায় ফিরবেন, আর এটি কী চাইতে পারে।',
|
|
64
|
+
name: 'নাম',
|
|
65
|
+
redirects: 'ফেরত ঠিকানা',
|
|
66
|
+
redirectsHint: 'প্রতি লাইনে একটি, https (localhost এর জন্য http)। ঠিকানা হুবহু মিলতে হবে।',
|
|
67
|
+
scopes: 'যে স্কোপ চাইতে পারে',
|
|
68
|
+
public: 'পাবলিক অ্যাপ (ফোন বা ব্রাউজার: সিক্রেট নেই, শুধু PKCE)',
|
|
69
|
+
publicHint: 'এটি সিক্রেট রাখতে পারে না, তাই প্রতিটি সাইন-ইন PKCE দিয়ে প্রমাণ করে।',
|
|
70
|
+
create: 'তৈরি করুন',
|
|
71
|
+
cancel: 'বাতিল',
|
|
72
|
+
done: 'শেষ',
|
|
73
|
+
clientId: 'ক্লায়েন্ট আইডি',
|
|
74
|
+
clientSecret: 'ক্লায়েন্ট সিক্রেট',
|
|
75
|
+
secretOnce: 'এখনই সিক্রেট কপি করুন: এটি একবারই দেখানো হয়।',
|
|
76
|
+
publicMade: 'পাবলিক অ্যাপের সিক্রেট নেই: ডেভেলপারকে ক্লায়েন্ট আইডি দিন।',
|
|
77
|
+
newSecret: '{{app}}-এর নতুন সিক্রেট: এখনই কপি করুন। পুরনোটি আর কাজ করবে না।',
|
|
78
|
+
copy: '{{what}} কপি করুন',
|
|
79
|
+
none: 'এখনো কোনো OAuth অ্যাপ নেই।',
|
|
80
|
+
confidential: 'গোপনীয়',
|
|
81
|
+
publicBadge: 'পাবলিক',
|
|
82
|
+
inactive: 'বন্ধ',
|
|
83
|
+
rotate: 'নতুন সিক্রেট',
|
|
84
|
+
deactivate: 'বন্ধ করুন',
|
|
85
|
+
activate: 'চালু করুন',
|
|
86
|
+
},
|
|
29
87
|
tools: {
|
|
30
88
|
title: 'ওয়েবহুক সরঞ্জাম',
|
|
31
89
|
ping: 'পরীক্ষামূলক ইভেন্ট পাঠান',
|
|
@@ -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: d28665dceee41886
|
|
2
2
|
// Bindings of module `l10n_bd`: 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: d28665dceee41886
|
|
2
2
|
// Schema view of module `l10n_bd` (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
|
|
|
@@ -24,9 +24,11 @@ export interface SchemaView {
|
|
|
24
24
|
readonly 'audit.event': AuditEvent;
|
|
25
25
|
readonly 'auth.api_key': AuthApiKey;
|
|
26
26
|
readonly 'auth.credential': AuthCredential;
|
|
27
|
+
readonly 'auth.policy': AuthPolicy;
|
|
27
28
|
readonly 'auth.session': AuthSession;
|
|
28
29
|
readonly 'auth.user_grant': AuthUserGrant;
|
|
29
30
|
readonly 'auth.user_group': AuthUserGroup;
|
|
31
|
+
readonly 'kosh.image': KoshImage;
|
|
30
32
|
readonly 'kosh.saved_view': KoshSavedView;
|
|
31
33
|
readonly 'mail.activity': MailActivity;
|
|
32
34
|
readonly 'mail.activity.type': MailActivityType;
|
|
@@ -35,6 +37,10 @@ export interface SchemaView {
|
|
|
35
37
|
readonly 'mail.follower': MailFollower;
|
|
36
38
|
readonly 'mail.message': MailMessage;
|
|
37
39
|
readonly 'mail.message.reaction': MailMessageReaction;
|
|
40
|
+
readonly 'oauth.app': OauthApp;
|
|
41
|
+
readonly 'oauth.code': OauthCode;
|
|
42
|
+
readonly 'oauth.grant': OauthGrant;
|
|
43
|
+
readonly 'oauth.token': OauthToken;
|
|
38
44
|
readonly 'product.category': ProductCategory;
|
|
39
45
|
readonly 'product.product': ProductProduct;
|
|
40
46
|
readonly 'report.dashboard': ReportDashboard;
|
|
@@ -635,6 +641,26 @@ export interface AuthCredential {
|
|
|
635
641
|
export interface AuthCredentialMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.credential'> {
|
|
636
642
|
}
|
|
637
643
|
|
|
644
|
+
/** `auth.policy` (owner: base). */
|
|
645
|
+
export interface AuthPolicy {
|
|
646
|
+
readonly name: 'auth.policy';
|
|
647
|
+
readonly fields: {
|
|
648
|
+
readonly id: F.Id<'auth.policy'>;
|
|
649
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
650
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
651
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
652
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
653
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
654
|
+
readonly twoFactor: F.Selection<'administrators' | 'everyone', { readonly required: true; readonly default: true }>;
|
|
655
|
+
readonly sessionDays: F.Integer;
|
|
656
|
+
};
|
|
657
|
+
readonly methods: AuthPolicyMethods;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/** Methods of `auth.policy`: declared ones and transitions. */
|
|
661
|
+
export interface AuthPolicyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.policy'> {
|
|
662
|
+
}
|
|
663
|
+
|
|
638
664
|
/** `auth.session` (owner: base). */
|
|
639
665
|
export interface AuthSession {
|
|
640
666
|
readonly name: 'auth.session';
|
|
@@ -707,6 +733,29 @@ export interface AuthUserGroup {
|
|
|
707
733
|
export interface AuthUserGroupMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.user_group'> {
|
|
708
734
|
}
|
|
709
735
|
|
|
736
|
+
/** `kosh.image` (owner: base). */
|
|
737
|
+
export interface KoshImage {
|
|
738
|
+
readonly name: 'kosh.image';
|
|
739
|
+
readonly fields: {
|
|
740
|
+
readonly id: F.Id<'kosh.image'>;
|
|
741
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
742
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
743
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
744
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
745
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
746
|
+
readonly ownerModel: F.Char<{ readonly required: true }>;
|
|
747
|
+
readonly ownerId: F.Integer<{ readonly required: true }>;
|
|
748
|
+
readonly mime: F.Char<{ readonly required: true }>;
|
|
749
|
+
readonly data: F.Text<{ readonly required: true }>;
|
|
750
|
+
readonly hash: F.Char<{ readonly required: true }>;
|
|
751
|
+
};
|
|
752
|
+
readonly methods: KoshImageMethods;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/** Methods of `kosh.image`: declared ones and transitions. */
|
|
756
|
+
export interface KoshImageMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'kosh.image'> {
|
|
757
|
+
}
|
|
758
|
+
|
|
710
759
|
/** `kosh.saved_view` (owner: base). */
|
|
711
760
|
export interface KoshSavedView {
|
|
712
761
|
readonly name: 'kosh.saved_view';
|
|
@@ -909,6 +958,105 @@ export interface MailMessageReaction {
|
|
|
909
958
|
export interface MailMessageReactionMethods extends F.Methods<typeof import('../../messaging/index.js').messagingShutro, 'mail.message.reaction'> {
|
|
910
959
|
}
|
|
911
960
|
|
|
961
|
+
/** `oauth.app` (owner: base). */
|
|
962
|
+
export interface OauthApp {
|
|
963
|
+
readonly name: 'oauth.app';
|
|
964
|
+
readonly fields: {
|
|
965
|
+
readonly id: F.Id<'oauth.app'>;
|
|
966
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
967
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
968
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
969
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
970
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
971
|
+
readonly name: F.Char<{ readonly required: true }>;
|
|
972
|
+
readonly clientId: F.Char<{ readonly required: true }>;
|
|
973
|
+
readonly secretHash: F.Char;
|
|
974
|
+
readonly confidential: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
975
|
+
readonly redirectUris: F.Text<{ readonly required: true }>;
|
|
976
|
+
readonly scopes: F.Char<{ readonly required: true }>;
|
|
977
|
+
readonly homepage: F.Char;
|
|
978
|
+
readonly active: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
979
|
+
readonly owner: F.Many2one<'res.users'>;
|
|
980
|
+
};
|
|
981
|
+
readonly methods: OauthAppMethods;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
/** Methods of `oauth.app`: declared ones and transitions. */
|
|
985
|
+
export interface OauthAppMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.app'> {
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
/** `oauth.code` (owner: base). */
|
|
989
|
+
export interface OauthCode {
|
|
990
|
+
readonly name: 'oauth.code';
|
|
991
|
+
readonly fields: {
|
|
992
|
+
readonly id: F.Id<'oauth.code'>;
|
|
993
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
994
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
995
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
996
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
997
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
998
|
+
readonly codeHash: F.Char<{ readonly required: true }>;
|
|
999
|
+
readonly grant: F.Many2one<'oauth.grant', { readonly required: true }>;
|
|
1000
|
+
readonly redirectUri: F.Char<{ readonly required: true }>;
|
|
1001
|
+
readonly challenge: F.Char;
|
|
1002
|
+
readonly expiresAt: F.Datetime<{ readonly required: true }>;
|
|
1003
|
+
readonly used: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1004
|
+
};
|
|
1005
|
+
readonly methods: OauthCodeMethods;
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
/** Methods of `oauth.code`: declared ones and transitions. */
|
|
1009
|
+
export interface OauthCodeMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.code'> {
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
/** `oauth.grant` (owner: base). */
|
|
1013
|
+
export interface OauthGrant {
|
|
1014
|
+
readonly name: 'oauth.grant';
|
|
1015
|
+
readonly fields: {
|
|
1016
|
+
readonly id: F.Id<'oauth.grant'>;
|
|
1017
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1018
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1019
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1020
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1021
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
1022
|
+
readonly user: F.Many2one<'res.users', { readonly required: true }>;
|
|
1023
|
+
readonly app: F.Many2one<'oauth.app', { readonly required: true }>;
|
|
1024
|
+
readonly scopes: F.Char<{ readonly required: true }>;
|
|
1025
|
+
readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1026
|
+
readonly lastUsedAt: F.Datetime;
|
|
1027
|
+
};
|
|
1028
|
+
readonly methods: OauthGrantMethods;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
/** Methods of `oauth.grant`: declared ones and transitions. */
|
|
1032
|
+
export interface OauthGrantMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.grant'> {
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
/** `oauth.token` (owner: base). */
|
|
1036
|
+
export interface OauthToken {
|
|
1037
|
+
readonly name: 'oauth.token';
|
|
1038
|
+
readonly fields: {
|
|
1039
|
+
readonly id: F.Id<'oauth.token'>;
|
|
1040
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1041
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1042
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1043
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1044
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
1045
|
+
readonly grant: F.Many2one<'oauth.grant', { readonly required: true }>;
|
|
1046
|
+
readonly accessHash: F.Char<{ readonly required: true }>;
|
|
1047
|
+
readonly refreshHash: F.Char<{ readonly required: true }>;
|
|
1048
|
+
readonly accessExpiresAt: F.Datetime<{ readonly required: true }>;
|
|
1049
|
+
readonly refreshExpiresAt: F.Datetime<{ readonly required: true }>;
|
|
1050
|
+
readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1051
|
+
readonly rotated: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1052
|
+
};
|
|
1053
|
+
readonly methods: OauthTokenMethods;
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
/** Methods of `oauth.token`: declared ones and transitions. */
|
|
1057
|
+
export interface OauthTokenMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.token'> {
|
|
1058
|
+
}
|
|
1059
|
+
|
|
912
1060
|
/** `product.category` (owner: product). */
|
|
913
1061
|
export interface ProductCategory {
|
|
914
1062
|
readonly name: 'product.category';
|
|
@@ -1129,6 +1277,13 @@ export interface ResCompany {
|
|
|
1129
1277
|
readonly name: F.Char<{ readonly required: true }>;
|
|
1130
1278
|
readonly currency: F.Many2one<'res.currency', { readonly required: true }>;
|
|
1131
1279
|
readonly numberGrouping: F.Selection<'international' | 'lakh', { readonly required: true; readonly default: true }>;
|
|
1280
|
+
readonly accentColor: F.Char;
|
|
1281
|
+
readonly street: F.Char;
|
|
1282
|
+
readonly city: F.Char;
|
|
1283
|
+
readonly zip: F.Char;
|
|
1284
|
+
readonly email: F.Char;
|
|
1285
|
+
readonly phone: F.Char;
|
|
1286
|
+
readonly website: F.Char;
|
|
1132
1287
|
readonly fiscalYearStart: F.Integer<{ readonly required: true; readonly default: true }>; // accounting
|
|
1133
1288
|
readonly chartTemplate: F.Char; // accounting
|
|
1134
1289
|
readonly country: F.Char; // accounting
|
|
@@ -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: c1be73bb58451058
|
|
2
2
|
// Bindings of module `l10n_in`: 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: c1be73bb58451058
|
|
2
2
|
// Schema view of module `l10n_in` (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
|
|
|
@@ -24,9 +24,11 @@ export interface SchemaView {
|
|
|
24
24
|
readonly 'audit.event': AuditEvent;
|
|
25
25
|
readonly 'auth.api_key': AuthApiKey;
|
|
26
26
|
readonly 'auth.credential': AuthCredential;
|
|
27
|
+
readonly 'auth.policy': AuthPolicy;
|
|
27
28
|
readonly 'auth.session': AuthSession;
|
|
28
29
|
readonly 'auth.user_grant': AuthUserGrant;
|
|
29
30
|
readonly 'auth.user_group': AuthUserGroup;
|
|
31
|
+
readonly 'kosh.image': KoshImage;
|
|
30
32
|
readonly 'kosh.saved_view': KoshSavedView;
|
|
31
33
|
readonly 'l10n_in.einvoice': L10nInEinvoice;
|
|
32
34
|
readonly 'mail.activity': MailActivity;
|
|
@@ -36,6 +38,10 @@ export interface SchemaView {
|
|
|
36
38
|
readonly 'mail.follower': MailFollower;
|
|
37
39
|
readonly 'mail.message': MailMessage;
|
|
38
40
|
readonly 'mail.message.reaction': MailMessageReaction;
|
|
41
|
+
readonly 'oauth.app': OauthApp;
|
|
42
|
+
readonly 'oauth.code': OauthCode;
|
|
43
|
+
readonly 'oauth.grant': OauthGrant;
|
|
44
|
+
readonly 'oauth.token': OauthToken;
|
|
39
45
|
readonly 'product.category': ProductCategory;
|
|
40
46
|
readonly 'product.product': ProductProduct;
|
|
41
47
|
readonly 'report.dashboard': ReportDashboard;
|
|
@@ -657,6 +663,26 @@ export interface AuthCredential {
|
|
|
657
663
|
export interface AuthCredentialMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.credential'> {
|
|
658
664
|
}
|
|
659
665
|
|
|
666
|
+
/** `auth.policy` (owner: base). */
|
|
667
|
+
export interface AuthPolicy {
|
|
668
|
+
readonly name: 'auth.policy';
|
|
669
|
+
readonly fields: {
|
|
670
|
+
readonly id: F.Id<'auth.policy'>;
|
|
671
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
672
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
673
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
674
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
675
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
676
|
+
readonly twoFactor: F.Selection<'administrators' | 'everyone', { readonly required: true; readonly default: true }>;
|
|
677
|
+
readonly sessionDays: F.Integer;
|
|
678
|
+
};
|
|
679
|
+
readonly methods: AuthPolicyMethods;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/** Methods of `auth.policy`: declared ones and transitions. */
|
|
683
|
+
export interface AuthPolicyMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.policy'> {
|
|
684
|
+
}
|
|
685
|
+
|
|
660
686
|
/** `auth.session` (owner: base). */
|
|
661
687
|
export interface AuthSession {
|
|
662
688
|
readonly name: 'auth.session';
|
|
@@ -729,6 +755,29 @@ export interface AuthUserGroup {
|
|
|
729
755
|
export interface AuthUserGroupMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'auth.user_group'> {
|
|
730
756
|
}
|
|
731
757
|
|
|
758
|
+
/** `kosh.image` (owner: base). */
|
|
759
|
+
export interface KoshImage {
|
|
760
|
+
readonly name: 'kosh.image';
|
|
761
|
+
readonly fields: {
|
|
762
|
+
readonly id: F.Id<'kosh.image'>;
|
|
763
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
764
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
765
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
766
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
767
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
768
|
+
readonly ownerModel: F.Char<{ readonly required: true }>;
|
|
769
|
+
readonly ownerId: F.Integer<{ readonly required: true }>;
|
|
770
|
+
readonly mime: F.Char<{ readonly required: true }>;
|
|
771
|
+
readonly data: F.Text<{ readonly required: true }>;
|
|
772
|
+
readonly hash: F.Char<{ readonly required: true }>;
|
|
773
|
+
};
|
|
774
|
+
readonly methods: KoshImageMethods;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
/** Methods of `kosh.image`: declared ones and transitions. */
|
|
778
|
+
export interface KoshImageMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'kosh.image'> {
|
|
779
|
+
}
|
|
780
|
+
|
|
732
781
|
/** `kosh.saved_view` (owner: base). */
|
|
733
782
|
export interface KoshSavedView {
|
|
734
783
|
readonly name: 'kosh.saved_view';
|
|
@@ -966,6 +1015,105 @@ export interface MailMessageReaction {
|
|
|
966
1015
|
export interface MailMessageReactionMethods extends F.Methods<typeof import('../../messaging/index.js').messagingShutro, 'mail.message.reaction'> {
|
|
967
1016
|
}
|
|
968
1017
|
|
|
1018
|
+
/** `oauth.app` (owner: base). */
|
|
1019
|
+
export interface OauthApp {
|
|
1020
|
+
readonly name: 'oauth.app';
|
|
1021
|
+
readonly fields: {
|
|
1022
|
+
readonly id: F.Id<'oauth.app'>;
|
|
1023
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1024
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1025
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1026
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1027
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
1028
|
+
readonly name: F.Char<{ readonly required: true }>;
|
|
1029
|
+
readonly clientId: F.Char<{ readonly required: true }>;
|
|
1030
|
+
readonly secretHash: F.Char;
|
|
1031
|
+
readonly confidential: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1032
|
+
readonly redirectUris: F.Text<{ readonly required: true }>;
|
|
1033
|
+
readonly scopes: F.Char<{ readonly required: true }>;
|
|
1034
|
+
readonly homepage: F.Char;
|
|
1035
|
+
readonly active: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1036
|
+
readonly owner: F.Many2one<'res.users'>;
|
|
1037
|
+
};
|
|
1038
|
+
readonly methods: OauthAppMethods;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
/** Methods of `oauth.app`: declared ones and transitions. */
|
|
1042
|
+
export interface OauthAppMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.app'> {
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
/** `oauth.code` (owner: base). */
|
|
1046
|
+
export interface OauthCode {
|
|
1047
|
+
readonly name: 'oauth.code';
|
|
1048
|
+
readonly fields: {
|
|
1049
|
+
readonly id: F.Id<'oauth.code'>;
|
|
1050
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1051
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1052
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1053
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1054
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
1055
|
+
readonly codeHash: F.Char<{ readonly required: true }>;
|
|
1056
|
+
readonly grant: F.Many2one<'oauth.grant', { readonly required: true }>;
|
|
1057
|
+
readonly redirectUri: F.Char<{ readonly required: true }>;
|
|
1058
|
+
readonly challenge: F.Char;
|
|
1059
|
+
readonly expiresAt: F.Datetime<{ readonly required: true }>;
|
|
1060
|
+
readonly used: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1061
|
+
};
|
|
1062
|
+
readonly methods: OauthCodeMethods;
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
/** Methods of `oauth.code`: declared ones and transitions. */
|
|
1066
|
+
export interface OauthCodeMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.code'> {
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
/** `oauth.grant` (owner: base). */
|
|
1070
|
+
export interface OauthGrant {
|
|
1071
|
+
readonly name: 'oauth.grant';
|
|
1072
|
+
readonly fields: {
|
|
1073
|
+
readonly id: F.Id<'oauth.grant'>;
|
|
1074
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1075
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1076
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1077
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1078
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
1079
|
+
readonly user: F.Many2one<'res.users', { readonly required: true }>;
|
|
1080
|
+
readonly app: F.Many2one<'oauth.app', { readonly required: true }>;
|
|
1081
|
+
readonly scopes: F.Char<{ readonly required: true }>;
|
|
1082
|
+
readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1083
|
+
readonly lastUsedAt: F.Datetime;
|
|
1084
|
+
};
|
|
1085
|
+
readonly methods: OauthGrantMethods;
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
/** Methods of `oauth.grant`: declared ones and transitions. */
|
|
1089
|
+
export interface OauthGrantMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.grant'> {
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
/** `oauth.token` (owner: base). */
|
|
1093
|
+
export interface OauthToken {
|
|
1094
|
+
readonly name: 'oauth.token';
|
|
1095
|
+
readonly fields: {
|
|
1096
|
+
readonly id: F.Id<'oauth.token'>;
|
|
1097
|
+
readonly createdAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1098
|
+
readonly updatedAt: F.Datetime<{ readonly required: true; readonly readonly: true }>;
|
|
1099
|
+
readonly createdBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1100
|
+
readonly updatedBy: F.Many2one<'res.users', { readonly readonly: true }>;
|
|
1101
|
+
readonly displayName: F.Char<{ readonly required: true; readonly readonly: true; readonly compute: true }>;
|
|
1102
|
+
readonly grant: F.Many2one<'oauth.grant', { readonly required: true }>;
|
|
1103
|
+
readonly accessHash: F.Char<{ readonly required: true }>;
|
|
1104
|
+
readonly refreshHash: F.Char<{ readonly required: true }>;
|
|
1105
|
+
readonly accessExpiresAt: F.Datetime<{ readonly required: true }>;
|
|
1106
|
+
readonly refreshExpiresAt: F.Datetime<{ readonly required: true }>;
|
|
1107
|
+
readonly revoked: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1108
|
+
readonly rotated: F.Bool<{ readonly required: true; readonly default: true }>;
|
|
1109
|
+
};
|
|
1110
|
+
readonly methods: OauthTokenMethods;
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
/** Methods of `oauth.token`: declared ones and transitions. */
|
|
1114
|
+
export interface OauthTokenMethods extends F.Methods<typeof import('../../server/index.js').baseShutro, 'oauth.token'> {
|
|
1115
|
+
}
|
|
1116
|
+
|
|
969
1117
|
/** `product.category` (owner: product). */
|
|
970
1118
|
export interface ProductCategory {
|
|
971
1119
|
readonly name: 'product.category';
|
|
@@ -1187,6 +1335,13 @@ export interface ResCompany {
|
|
|
1187
1335
|
readonly name: F.Char<{ readonly required: true }>;
|
|
1188
1336
|
readonly currency: F.Many2one<'res.currency', { readonly required: true }>;
|
|
1189
1337
|
readonly numberGrouping: F.Selection<'international' | 'lakh', { readonly required: true; readonly default: true }>;
|
|
1338
|
+
readonly accentColor: F.Char;
|
|
1339
|
+
readonly street: F.Char;
|
|
1340
|
+
readonly city: F.Char;
|
|
1341
|
+
readonly zip: F.Char;
|
|
1342
|
+
readonly email: F.Char;
|
|
1343
|
+
readonly phone: F.Char;
|
|
1344
|
+
readonly website: F.Char;
|
|
1190
1345
|
readonly fiscalYearStart: F.Integer<{ readonly required: true; readonly default: true }>; // accounting
|
|
1191
1346
|
readonly chartTemplate: F.Char; // accounting
|
|
1192
1347
|
readonly country: F.Char; // accounting
|
|
@@ -1200,9 +1355,6 @@ export interface ResCompany {
|
|
|
1200
1355
|
readonly accountRetainedEarnings: F.Many2one<'account.account'>; // accounting
|
|
1201
1356
|
readonly gstin: F.Char; // l10n_in
|
|
1202
1357
|
readonly pan: F.Char; // l10n_in
|
|
1203
|
-
readonly street: F.Char; // l10n_in
|
|
1204
|
-
readonly city: F.Char; // l10n_in
|
|
1205
|
-
readonly zip: F.Char; // l10n_in
|
|
1206
1358
|
readonly einvoiceEnabled: F.Bool<{ readonly required: true; readonly default: true }>; // l10n_in
|
|
1207
1359
|
};
|
|
1208
1360
|
readonly methods: ResCompanyMethods;
|