@arcblock/did-connect-service 4.0.5 → 4.0.7
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/assets/fonts/noto-sans-sc-regular.otf +0 -0
- package/dist/_generated/asset-bytes.d.ts +3 -0
- package/dist/_generated/asset-bytes.d.ts.map +1 -0
- package/dist/_generated/asset-bytes.js +2 -0
- package/dist/_generated/asset-bytes.js.map +1 -0
- package/dist/_generated/asset-manifest.d.ts +3 -0
- package/dist/_generated/asset-manifest.d.ts.map +1 -0
- package/dist/_generated/asset-manifest.js +12 -0
- package/dist/_generated/asset-manifest.js.map +1 -0
- package/dist/asset-registry.d.ts +38 -0
- package/dist/asset-registry.d.ts.map +1 -0
- package/dist/asset-registry.js +73 -0
- package/dist/asset-registry.js.map +1 -0
- package/dist/assets/admin-core.c0b5af61.js +1393 -0
- package/dist/assets/admin-extra.7ca9c16b.js +2529 -0
- package/dist/assets/admin.c26bb17a.css +2219 -0
- package/dist/assets/design.99dc4ddc.css +97 -0
- package/dist/assets/did-address.7df30f28.js +51 -0
- package/dist/assets/header.94d9e46b.js +136 -0
- package/dist/assets/login.7b12c6dc.css +662 -0
- package/dist/assets/login.d3f05790.js +720 -0
- package/dist/assets/qr.c0d203ca.js +3 -0
- package/dist/embedded.d.ts +32 -0
- package/dist/embedded.d.ts.map +1 -1
- package/dist/embedded.js +3 -0
- package/dist/embedded.js.map +1 -1
- package/dist/handlers/auth-handler.d.ts +5 -0
- package/dist/handlers/auth-handler.d.ts.map +1 -1
- package/dist/handlers/auth-handler.js +11 -32
- package/dist/handlers/auth-handler.js.map +1 -1
- package/dist/handlers/branding-handler.d.ts +17 -0
- package/dist/handlers/branding-handler.d.ts.map +1 -1
- package/dist/handlers/branding-handler.js +107 -5
- package/dist/handlers/branding-handler.js.map +1 -1
- package/dist/identity/gravatar.d.ts +0 -2
- package/dist/identity/gravatar.d.ts.map +1 -1
- package/dist/identity/gravatar.js +0 -9
- package/dist/identity/gravatar.js.map +1 -1
- package/dist/og/emoji.d.ts +12 -0
- package/dist/og/emoji.d.ts.map +1 -0
- package/dist/og/emoji.js +71 -0
- package/dist/og/emoji.js.map +1 -0
- package/dist/og/generator.d.ts +3 -0
- package/dist/og/generator.d.ts.map +1 -0
- package/dist/og/generator.js +338 -0
- package/dist/og/generator.js.map +1 -0
- package/dist/og/index.d.ts +6 -0
- package/dist/og/index.d.ts.map +1 -0
- package/dist/og/index.js +4 -0
- package/dist/og/index.js.map +1 -0
- package/dist/og/passport-svg.d.ts +52 -0
- package/dist/og/passport-svg.d.ts.map +1 -0
- package/dist/og/passport-svg.js +157 -0
- package/dist/og/passport-svg.js.map +1 -0
- package/dist/og/ssrf-guard.d.ts +38 -0
- package/dist/og/ssrf-guard.d.ts.map +1 -0
- package/dist/og/ssrf-guard.js +188 -0
- package/dist/og/ssrf-guard.js.map +1 -0
- package/dist/og/templates.d.ts +26 -0
- package/dist/og/templates.d.ts.map +1 -0
- package/dist/og/templates.js +302 -0
- package/dist/og/templates.js.map +1 -0
- package/dist/og/types.d.ts +74 -0
- package/dist/og/types.d.ts.map +1 -0
- package/dist/og/types.js +14 -0
- package/dist/og/types.js.map +1 -0
- package/dist/pages/admin/index.d.ts.map +1 -1
- package/dist/pages/admin/index.js +25 -41
- package/dist/pages/admin/index.js.map +1 -1
- package/dist/pages/admin/tab-access.d.ts +1 -1
- package/dist/pages/admin/tab-access.d.ts.map +1 -1
- package/dist/pages/admin/tab-access.js +5 -2
- package/dist/pages/admin/tab-access.js.map +1 -1
- package/dist/pages/admin/tab-appearance.d.ts +1 -1
- package/dist/pages/admin/tab-appearance.d.ts.map +1 -1
- package/dist/pages/admin/tab-appearance.js +4 -2
- package/dist/pages/admin/tab-appearance.js.map +1 -1
- package/dist/pages/admin/tab-branding.d.ts.map +1 -1
- package/dist/pages/admin/tab-branding.js +4 -2
- package/dist/pages/admin/tab-branding.js.map +1 -1
- package/dist/pages/admin/tab-profile-accounts.d.ts.map +1 -1
- package/dist/pages/admin/tab-profile-accounts.js +4 -2
- package/dist/pages/admin/tab-profile-accounts.js.map +1 -1
- package/dist/pages/admin/tab-settings.d.ts.map +1 -1
- package/dist/pages/admin/tab-settings.js +4 -2
- package/dist/pages/admin/tab-settings.js.map +1 -1
- package/dist/pages/admin-instances-page.d.ts.map +1 -1
- package/dist/pages/admin-instances-page.js +4 -6
- package/dist/pages/admin-instances-page.js.map +1 -1
- package/dist/pages/error-page.d.ts.map +1 -1
- package/dist/pages/error-page.js +3 -2
- package/dist/pages/error-page.js.map +1 -1
- package/dist/pages/gen-access-key-page.d.ts.map +1 -1
- package/dist/pages/gen-access-key-page.js +3 -4
- package/dist/pages/gen-access-key-page.js.map +1 -1
- package/dist/pages/homepage.d.ts.map +1 -1
- package/dist/pages/homepage.js +4 -3
- package/dist/pages/homepage.js.map +1 -1
- package/dist/pages/invite-page.d.ts.map +1 -1
- package/dist/pages/invite-page.js +4 -4
- package/dist/pages/invite-page.js.map +1 -1
- package/dist/pages/login-page.d.ts.map +1 -1
- package/dist/pages/login-page.js +3 -4
- package/dist/pages/login-page.js.map +1 -1
- package/package.json +21 -5
- package/dist/access-key-handler.d.ts +0 -37
- package/dist/access-key-handler.d.ts.map +0 -1
- package/dist/access-key-handler.js +0 -316
- package/dist/access-key-handler.js.map +0 -1
- package/dist/access-key-util.d.ts +0 -19
- package/dist/access-key-util.d.ts.map +0 -1
- package/dist/access-key-util.js +0 -45
- package/dist/access-key-util.js.map +0 -1
- package/dist/access-policy.d.ts +0 -53
- package/dist/access-policy.d.ts.map +0 -1
- package/dist/access-policy.js +0 -153
- package/dist/access-policy.js.map +0 -1
- package/dist/auth-client.d.ts +0 -20
- package/dist/auth-client.d.ts.map +0 -1
- package/dist/auth-client.js +0 -42
- package/dist/auth-client.js.map +0 -1
- package/dist/auth-entrypoint.d.ts +0 -45
- package/dist/auth-entrypoint.d.ts.map +0 -1
- package/dist/auth-entrypoint.js +0 -31
- package/dist/auth-entrypoint.js.map +0 -1
- package/dist/auth-handler.d.ts +0 -136
- package/dist/auth-handler.d.ts.map +0 -1
- package/dist/auth-handler.js +0 -408
- package/dist/auth-handler.js.map +0 -1
- package/dist/auth-rpc-types.d.ts +0 -139
- package/dist/auth-rpc-types.d.ts.map +0 -1
- package/dist/auth-rpc-types.js +0 -11
- package/dist/auth-rpc-types.js.map +0 -1
- package/dist/auth-rpc.d.ts +0 -80
- package/dist/auth-rpc.d.ts.map +0 -1
- package/dist/auth-rpc.js +0 -257
- package/dist/auth-rpc.js.map +0 -1
- package/dist/auth-worker.d.ts +0 -42
- package/dist/auth-worker.d.ts.map +0 -1
- package/dist/auth-worker.js +0 -120
- package/dist/auth-worker.js.map +0 -1
- package/dist/blocklet-js-handler.d.ts +0 -22
- package/dist/blocklet-js-handler.d.ts.map +0 -1
- package/dist/blocklet-js-handler.js +0 -205
- package/dist/blocklet-js-handler.js.map +0 -1
- package/dist/branding-handler.d.ts +0 -42
- package/dist/branding-handler.d.ts.map +0 -1
- package/dist/branding-handler.js +0 -326
- package/dist/branding-handler.js.map +0 -1
- package/dist/d1-token-storage.d.ts +0 -31
- package/dist/d1-token-storage.d.ts.map +0 -1
- package/dist/d1-token-storage.js +0 -83
- package/dist/d1-token-storage.js.map +0 -1
- package/dist/did-connect-handler.d.ts +0 -57
- package/dist/did-connect-handler.d.ts.map +0 -1
- package/dist/did-connect-handler.js +0 -182
- package/dist/did-connect-handler.js.map +0 -1
- package/dist/did.d.ts +0 -14
- package/dist/did.d.ts.map +0 -1
- package/dist/did.js +0 -17
- package/dist/did.js.map +0 -1
- package/dist/email-login-handler.d.ts +0 -50
- package/dist/email-login-handler.d.ts.map +0 -1
- package/dist/email-login-handler.js +0 -238
- package/dist/email-login-handler.js.map +0 -1
- package/dist/federation-utils.d.ts +0 -23
- package/dist/federation-utils.d.ts.map +0 -1
- package/dist/federation-utils.js +0 -25
- package/dist/federation-utils.js.map +0 -1
- package/dist/handler.d.ts +0 -90
- package/dist/handler.d.ts.map +0 -1
- package/dist/handler.js +0 -591
- package/dist/handler.js.map +0 -1
- package/dist/identity/csrf.d.ts +0 -17
- package/dist/identity/csrf.d.ts.map +0 -1
- package/dist/identity/csrf.js +0 -56
- package/dist/identity/csrf.js.map +0 -1
- package/dist/identity/invitation-util.d.ts +0 -7
- package/dist/identity/invitation-util.d.ts.map +0 -1
- package/dist/identity/invitation-util.js +0 -66
- package/dist/identity/invitation-util.js.map +0 -1
- package/dist/instance-role.d.ts +0 -10
- package/dist/instance-role.d.ts.map +0 -1
- package/dist/instance-role.js +0 -20
- package/dist/instance-role.js.map +0 -1
- package/dist/jwt.d.ts +0 -7
- package/dist/jwt.d.ts.map +0 -1
- package/dist/jwt.js +0 -72
- package/dist/jwt.js.map +0 -1
- package/dist/login-entry.d.ts +0 -9
- package/dist/login-entry.d.ts.map +0 -1
- package/dist/login-entry.js +0 -9
- package/dist/login-entry.js.map +0 -1
- package/dist/membership-handler.d.ts +0 -27
- package/dist/membership-handler.d.ts.map +0 -1
- package/dist/membership-handler.js +0 -111
- package/dist/membership-handler.js.map +0 -1
- package/dist/oauth-callback-page.d.ts +0 -9
- package/dist/oauth-callback-page.d.ts.map +0 -1
- package/dist/oauth-callback-page.js +0 -31
- package/dist/oauth-callback-page.js.map +0 -1
- package/dist/oauth-handler.d.ts +0 -72
- package/dist/oauth-handler.d.ts.map +0 -1
- package/dist/oauth-handler.js +0 -423
- package/dist/oauth-handler.js.map +0 -1
- package/dist/page.d.ts +0 -33
- package/dist/page.d.ts.map +0 -1
- package/dist/page.js +0 -59
- package/dist/page.js.map +0 -1
- package/dist/pages/auth-script.d.ts +0 -18
- package/dist/pages/auth-script.d.ts.map +0 -1
- package/dist/pages/auth-script.js +0 -185
- package/dist/pages/auth-script.js.map +0 -1
- package/dist/pages/design-tokens.d.ts +0 -86
- package/dist/pages/design-tokens.d.ts.map +0 -1
- package/dist/pages/design-tokens.js +0 -159
- package/dist/pages/design-tokens.js.map +0 -1
- package/dist/pages/did-connect-script.d.ts +0 -16
- package/dist/pages/did-connect-script.d.ts.map +0 -1
- package/dist/pages/did-connect-script.js +0 -105
- package/dist/pages/did-connect-script.js.map +0 -1
- package/dist/pages/shared-styles.d.ts +0 -6
- package/dist/pages/shared-styles.d.ts.map +0 -1
- package/dist/pages/shared-styles.js +0 -109
- package/dist/pages/shared-styles.js.map +0 -1
- package/dist/rbac.d.ts +0 -19
- package/dist/rbac.d.ts.map +0 -1
- package/dist/rbac.js +0 -76
- package/dist/rbac.js.map +0 -1
- package/dist/session-context.d.ts +0 -35
- package/dist/session-context.d.ts.map +0 -1
- package/dist/session-context.js +0 -39
- package/dist/session-context.js.map +0 -1
- package/dist/store.d.ts +0 -222
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -1366
- package/dist/store.js.map +0 -1
- package/dist/team-handler.d.ts +0 -90
- package/dist/team-handler.d.ts.map +0 -1
- package/dist/team-handler.js +0 -1225
- package/dist/team-handler.js.map +0 -1
- package/dist/ticket-handler.d.ts +0 -28
- package/dist/ticket-handler.d.ts.map +0 -1
- package/dist/ticket-handler.js +0 -74
- package/dist/ticket-handler.js.map +0 -1
- package/dist/wallet-identity.d.ts +0 -32
- package/dist/wallet-identity.d.ts.map +0 -1
- package/dist/wallet-identity.js +0 -43
- package/dist/wallet-identity.js.map +0 -1
- package/dist/webauthn.d.ts +0 -65
- package/dist/webauthn.d.ts.map +0 -1
- package/dist/webauthn.js +0 -112
- package/dist/webauthn.js.map +0 -1
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared CSS styles — base component classes for login, invite, and admin pages.
|
|
3
|
-
* Design tokens are imported from design-tokens.ts.
|
|
4
|
-
*/
|
|
5
|
-
import { DESIGN_RESET_CSS, DESIGN_TOKENS_CSS } from "./design-tokens.js";
|
|
6
|
-
export const SHARED_STYLES = /* css */ `
|
|
7
|
-
${DESIGN_TOKENS_CSS}
|
|
8
|
-
${DESIGN_RESET_CSS}
|
|
9
|
-
|
|
10
|
-
body {
|
|
11
|
-
min-height: 100vh;
|
|
12
|
-
display: flex;
|
|
13
|
-
align-items: center;
|
|
14
|
-
justify-content: center;
|
|
15
|
-
}
|
|
16
|
-
.card {
|
|
17
|
-
background: var(--bg-card);
|
|
18
|
-
border: 1px solid var(--border);
|
|
19
|
-
border-radius: var(--radius-lg);
|
|
20
|
-
padding: 48px 40px;
|
|
21
|
-
max-width: 400px;
|
|
22
|
-
width: 100%;
|
|
23
|
-
text-align: center;
|
|
24
|
-
}
|
|
25
|
-
h1 {
|
|
26
|
-
font-size: 24px;
|
|
27
|
-
font-weight: 600;
|
|
28
|
-
margin-bottom: 8px;
|
|
29
|
-
color: var(--text-white);
|
|
30
|
-
letter-spacing: -0.01em;
|
|
31
|
-
line-height: 1.25;
|
|
32
|
-
}
|
|
33
|
-
.subtitle {
|
|
34
|
-
font-size: 14px;
|
|
35
|
-
color: var(--text-secondary);
|
|
36
|
-
margin-bottom: 24px;
|
|
37
|
-
line-height: 1.5;
|
|
38
|
-
}
|
|
39
|
-
.input {
|
|
40
|
-
width: 100%;
|
|
41
|
-
height: 36px;
|
|
42
|
-
padding: 0 12px;
|
|
43
|
-
font-size: 14px;
|
|
44
|
-
color: var(--text);
|
|
45
|
-
background: var(--bg-input);
|
|
46
|
-
border: 1px solid var(--border-strong);
|
|
47
|
-
border-radius: var(--radius-sm);
|
|
48
|
-
outline: none;
|
|
49
|
-
margin-bottom: 16px;
|
|
50
|
-
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
51
|
-
}
|
|
52
|
-
.input:focus { border-color: var(--blue); box-shadow: var(--shadow-focus); }
|
|
53
|
-
.input::placeholder { color: var(--text-placeholder); }
|
|
54
|
-
.btn {
|
|
55
|
-
display: inline-flex;
|
|
56
|
-
align-items: center;
|
|
57
|
-
justify-content: center;
|
|
58
|
-
gap: 6px;
|
|
59
|
-
width: 100%;
|
|
60
|
-
height: 36px;
|
|
61
|
-
padding: 0 16px;
|
|
62
|
-
font-size: 14px;
|
|
63
|
-
font-weight: 500;
|
|
64
|
-
color: #fff;
|
|
65
|
-
background: var(--blue);
|
|
66
|
-
border: none;
|
|
67
|
-
border-radius: var(--radius-sm);
|
|
68
|
-
cursor: pointer;
|
|
69
|
-
transition: background-color 0.15s ease;
|
|
70
|
-
line-height: 1;
|
|
71
|
-
}
|
|
72
|
-
.btn:hover { background: var(--blue-hover); }
|
|
73
|
-
.btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }
|
|
74
|
-
.btn:focus-visible { box-shadow: var(--shadow-focus); }
|
|
75
|
-
.btn svg { width: 18px; height: 18px; }
|
|
76
|
-
.btn-secondary {
|
|
77
|
-
background: transparent;
|
|
78
|
-
border: 1px solid var(--border-strong);
|
|
79
|
-
color: var(--text);
|
|
80
|
-
}
|
|
81
|
-
.btn-secondary:hover { background: var(--bg-hover); border-color: rgba(255,255,255,0.20); }
|
|
82
|
-
.btn-danger {
|
|
83
|
-
background: var(--red);
|
|
84
|
-
}
|
|
85
|
-
.btn-danger:hover { background: #c22a2a; }
|
|
86
|
-
.status {
|
|
87
|
-
margin-top: 16px;
|
|
88
|
-
font-size: 13px;
|
|
89
|
-
min-height: 20px;
|
|
90
|
-
color: var(--text-secondary);
|
|
91
|
-
}
|
|
92
|
-
.status.error { color: var(--red-text); }
|
|
93
|
-
.badge {
|
|
94
|
-
display: inline-flex;
|
|
95
|
-
align-items: center;
|
|
96
|
-
padding: 2px 8px;
|
|
97
|
-
border-radius: var(--radius-full);
|
|
98
|
-
font-size: 11px;
|
|
99
|
-
font-weight: 500;
|
|
100
|
-
line-height: 1.45;
|
|
101
|
-
white-space: nowrap;
|
|
102
|
-
}
|
|
103
|
-
.badge-owner { background: var(--blue-light); color: var(--blue-muted); }
|
|
104
|
-
.badge-admin { background: var(--info-light); color: var(--info-text); }
|
|
105
|
-
.badge-member { background: rgba(255,255,255,0.08); color: var(--text-secondary); }
|
|
106
|
-
.badge-guest { background: rgba(255,255,255,0.04); color: var(--text-secondary); font-style: italic; }
|
|
107
|
-
.text-muted { color: var(--text-secondary); }
|
|
108
|
-
`;
|
|
109
|
-
//# sourceMappingURL=shared-styles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared-styles.js","sourceRoot":"","sources":["../../src/pages/shared-styles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;IACnC,iBAAiB;IACjB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGnB,CAAC"}
|
package/dist/rbac.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RBAC — Role-Based Access Control for team management.
|
|
3
|
-
*
|
|
4
|
-
* Fixed 4-tier hierarchy: owner (3) > admin (2) > member (1) > guest (0).
|
|
5
|
-
*/
|
|
6
|
-
import type { Role } from "./types.js";
|
|
7
|
-
/**
|
|
8
|
-
* Check if a caller with `callerRole` is allowed to perform `action`.
|
|
9
|
-
* For actions targeting another user, pass `targetRole`.
|
|
10
|
-
*/
|
|
11
|
-
export declare function hasPermission(callerRole: Role, action: string, targetRole?: Role): boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Throws if the caller lacks permission. Use in request handlers.
|
|
14
|
-
*/
|
|
15
|
-
export declare function requirePermission(callerRole: Role, action: string, targetRole?: Role): void;
|
|
16
|
-
export declare class PermissionError extends Error {
|
|
17
|
-
constructor(message: string);
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=rbac.d.ts.map
|
package/dist/rbac.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../src/rbac.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AASvC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,OAAO,CAkD1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAI3F;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/rbac.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RBAC — Role-Based Access Control for team management.
|
|
3
|
-
*
|
|
4
|
-
* Fixed 4-tier hierarchy: owner (3) > admin (2) > member (1) > guest (0).
|
|
5
|
-
*/
|
|
6
|
-
const ROLE_LEVEL = {
|
|
7
|
-
owner: 3,
|
|
8
|
-
admin: 2,
|
|
9
|
-
member: 1,
|
|
10
|
-
guest: 0,
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Check if a caller with `callerRole` is allowed to perform `action`.
|
|
14
|
-
* For actions targeting another user, pass `targetRole`.
|
|
15
|
-
*/
|
|
16
|
-
export function hasPermission(callerRole, action, targetRole) {
|
|
17
|
-
const level = ROLE_LEVEL[callerRole] ?? 0;
|
|
18
|
-
switch (action) {
|
|
19
|
-
case "team.list_members":
|
|
20
|
-
case "team.view_member":
|
|
21
|
-
case "team.create_invitation":
|
|
22
|
-
case "team.view_audit_logs":
|
|
23
|
-
return level >= 2; // admin+
|
|
24
|
-
case "team.delete_invitation":
|
|
25
|
-
return level >= 2; // admin+ (handler checks ownership for admin)
|
|
26
|
-
case "team.remove_member":
|
|
27
|
-
case "team.block_member":
|
|
28
|
-
case "team.unblock_member":
|
|
29
|
-
if (!targetRole)
|
|
30
|
-
return false;
|
|
31
|
-
if (callerRole === "owner")
|
|
32
|
-
return true;
|
|
33
|
-
if (callerRole === "admin")
|
|
34
|
-
return ROLE_LEVEL[targetRole] < 2; // admin can only act on member
|
|
35
|
-
return false;
|
|
36
|
-
case "team.change_role":
|
|
37
|
-
case "team.transfer_ownership":
|
|
38
|
-
case "access_policy.create":
|
|
39
|
-
case "access_policy.update":
|
|
40
|
-
case "access_policy.delete":
|
|
41
|
-
case "security_rule.create":
|
|
42
|
-
case "security_rule.update":
|
|
43
|
-
case "security_rule.delete":
|
|
44
|
-
return callerRole === "owner";
|
|
45
|
-
case "access_policy.list":
|
|
46
|
-
case "security_rule.list":
|
|
47
|
-
case "settings.view":
|
|
48
|
-
case "audit.view":
|
|
49
|
-
return level >= 2; // admin+
|
|
50
|
-
case "settings.edit":
|
|
51
|
-
return callerRole === "owner";
|
|
52
|
-
case "accessKey.list":
|
|
53
|
-
case "accessKey.view":
|
|
54
|
-
case "accessKey.create":
|
|
55
|
-
case "accessKey.update":
|
|
56
|
-
case "accessKey.delete":
|
|
57
|
-
return level >= 0; // all authenticated roles (handler enforces ownership for non-admin)
|
|
58
|
-
default:
|
|
59
|
-
return level >= 1; // any authenticated user
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Throws if the caller lacks permission. Use in request handlers.
|
|
64
|
-
*/
|
|
65
|
-
export function requirePermission(callerRole, action, targetRole) {
|
|
66
|
-
if (!hasPermission(callerRole, action, targetRole)) {
|
|
67
|
-
throw new PermissionError("Insufficient permissions");
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
export class PermissionError extends Error {
|
|
71
|
-
constructor(message) {
|
|
72
|
-
super(message);
|
|
73
|
-
this.name = "PermissionError";
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=rbac.js.map
|
package/dist/rbac.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.js","sourceRoot":"","sources":["../src/rbac.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,GAAyB;IACvC,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;CACT,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,UAAgB,EAAE,MAAc,EAAE,UAAiB;IAC/E,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE1C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,mBAAmB,CAAC;QACzB,KAAK,kBAAkB,CAAC;QACxB,KAAK,wBAAwB,CAAC;QAC9B,KAAK,sBAAsB;YACzB,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS;QAE9B,KAAK,wBAAwB;YAC3B,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,8CAA8C;QAEnE,KAAK,oBAAoB,CAAC;QAC1B,KAAK,mBAAmB,CAAC;QACzB,KAAK,qBAAqB;YACxB,IAAI,CAAC,UAAU;gBAAE,OAAO,KAAK,CAAC;YAC9B,IAAI,UAAU,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YACxC,IAAI,UAAU,KAAK,OAAO;gBAAE,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,+BAA+B;YAC9F,OAAO,KAAK,CAAC;QAEf,KAAK,kBAAkB,CAAC;QACxB,KAAK,yBAAyB,CAAC;QAC/B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB;YACzB,OAAO,UAAU,KAAK,OAAO,CAAC;QAEhC,KAAK,oBAAoB,CAAC;QAC1B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,eAAe,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS;QAE9B,KAAK,eAAe;YAClB,OAAO,UAAU,KAAK,OAAO,CAAC;QAEhC,KAAK,gBAAgB,CAAC;QACtB,KAAK,gBAAgB,CAAC;QACtB,KAAK,kBAAkB,CAAC;QACxB,KAAK,kBAAkB,CAAC;QACxB,KAAK,kBAAkB;YACrB,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,qEAAqE;QAE1F;YACE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAgB,EAAE,MAAc,EAAE,UAAiB;IACnF,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,eAAe,CAAC,0BAA0B,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionContext — unified session identity flowing through HTTP → WebSocket → AUP → AFS exec.
|
|
3
|
-
*
|
|
4
|
-
* Four auth methods produce the same structure:
|
|
5
|
-
* 1. ARC Owner passkey login → authMethod = "passkey"
|
|
6
|
-
* 2. Visitor DID Connect → authMethod = "did-connect"
|
|
7
|
-
* 3. Access Key bearer token → authMethod = "access-key"
|
|
8
|
-
*/
|
|
9
|
-
import type { CallerIdentity, Role } from "./types.js";
|
|
10
|
-
export interface SessionContext {
|
|
11
|
-
/** User's DID (owner passkey DID or visitor DID). */
|
|
12
|
-
did: string;
|
|
13
|
-
/** Public key (base64 for passkey, hex for Ed25519). */
|
|
14
|
-
pk?: string;
|
|
15
|
-
/** Display name (from users table or DID Connect profile). */
|
|
16
|
-
displayName?: string;
|
|
17
|
-
/** How this identity was established. */
|
|
18
|
-
authMethod: "passkey" | "did-connect" | "access-key";
|
|
19
|
-
/** Instance this session targets (filled by instanceResolveMiddleware). */
|
|
20
|
-
instanceDid?: string;
|
|
21
|
-
/** Role within this instance (from memberships table; system role if no instance). */
|
|
22
|
-
role?: Role;
|
|
23
|
-
/** DID Space routing key = instanceDid ?? blockletDid ?? blockletId. */
|
|
24
|
-
appId?: string;
|
|
25
|
-
}
|
|
26
|
-
/** Build SessionContext from CallerIdentity + instance resolution result. */
|
|
27
|
-
export declare function buildSessionContext(caller: CallerIdentity | null, options?: {
|
|
28
|
-
instanceDid?: string;
|
|
29
|
-
membershipRole?: Role | null;
|
|
30
|
-
appId?: string;
|
|
31
|
-
authMethod?: SessionContext["authMethod"];
|
|
32
|
-
}): SessionContext | null;
|
|
33
|
-
export declare function serializeSessionContext(ctx: SessionContext): string;
|
|
34
|
-
export declare function deserializeSessionContext(json: string): SessionContext | null;
|
|
35
|
-
//# sourceMappingURL=session-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../src/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yCAAyC;IACzC,UAAU,EAAE,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC;IAErD,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;CAC3C,GACA,cAAc,GAAG,IAAI,CAavB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAEnE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQ7E"}
|
package/dist/session-context.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionContext — unified session identity flowing through HTTP → WebSocket → AUP → AFS exec.
|
|
3
|
-
*
|
|
4
|
-
* Four auth methods produce the same structure:
|
|
5
|
-
* 1. ARC Owner passkey login → authMethod = "passkey"
|
|
6
|
-
* 2. Visitor DID Connect → authMethod = "did-connect"
|
|
7
|
-
* 3. Access Key bearer token → authMethod = "access-key"
|
|
8
|
-
*/
|
|
9
|
-
/** Build SessionContext from CallerIdentity + instance resolution result. */
|
|
10
|
-
export function buildSessionContext(caller, options) {
|
|
11
|
-
if (!caller)
|
|
12
|
-
return null;
|
|
13
|
-
return {
|
|
14
|
-
did: caller.did,
|
|
15
|
-
pk: caller.pk,
|
|
16
|
-
displayName: caller.displayName,
|
|
17
|
-
authMethod: options?.authMethod ?? "passkey",
|
|
18
|
-
instanceDid: options?.instanceDid,
|
|
19
|
-
role: options?.instanceDid
|
|
20
|
-
? (options.membershipRole ?? "guest") // instance context: membership role or guest
|
|
21
|
-
: (caller.role ?? undefined), // system context: system role
|
|
22
|
-
appId: options?.appId,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
export function serializeSessionContext(ctx) {
|
|
26
|
-
return JSON.stringify(ctx);
|
|
27
|
-
}
|
|
28
|
-
export function deserializeSessionContext(json) {
|
|
29
|
-
try {
|
|
30
|
-
const parsed = JSON.parse(json);
|
|
31
|
-
if (typeof parsed?.did !== "string")
|
|
32
|
-
return null;
|
|
33
|
-
return parsed;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=session-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-context.js","sourceRoot":"","sources":["../src/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CACjC,MAA6B,EAC7B,OAKC;IAED,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,SAAS;QAC5C,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,IAAI,EAAE,OAAO,EAAE,WAAW;YACxB,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,CAAC,6CAA6C;YACnF,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,8BAA8B;QAC9D,KAAK,EAAE,OAAO,EAAE,KAAK;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAmB;IACzD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,OAAO,MAAM,EAAE,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjD,OAAO,MAAwB,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/store.d.ts
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* D1Store — D1-backed storage for passkey auth + team management.
|
|
3
|
-
*
|
|
4
|
-
* Uses the same schema as blocklet-server (users + connected_accounts tables)
|
|
5
|
-
* to ensure interoperability. Unused fields default to null/empty.
|
|
6
|
-
*/
|
|
7
|
-
import type { AccessKeyInfo, AccessPolicyInfo, AuditLogInfo, CreateAccessKeyInput, CreateAccessPolicyInput, CreateAuditLogInput, CreateInvitationInput, CreateSecurityRuleInput, InvitationInfo, MemberInfo, SecurityRuleInfo, StoredAccessKey, StoredConnectedAccount, StoredInvitation, StoredUser, UpdateAccessKeyInput, UpdateAccessPolicyInput, UpdateSecurityRuleInput } from "./types.js";
|
|
8
|
-
type RulesCacheEntry = Array<{
|
|
9
|
-
id: string;
|
|
10
|
-
pathPattern: string;
|
|
11
|
-
priority: number;
|
|
12
|
-
roles: string | null;
|
|
13
|
-
reverse: number;
|
|
14
|
-
enabled: number;
|
|
15
|
-
}>;
|
|
16
|
-
/** @internal Reset all module-level caches — for testing only. */
|
|
17
|
-
export declare function _resetForTesting(): void;
|
|
18
|
-
export declare class D1Store {
|
|
19
|
-
private db;
|
|
20
|
-
constructor(db: D1Database);
|
|
21
|
-
/** Run schema migration. Idempotent — only executes once per isolate. */
|
|
22
|
-
migrate(): Promise<void>;
|
|
23
|
-
/** @internal Backwards-compatible alias for migrate(). */
|
|
24
|
-
ensureSchema(): Promise<void>;
|
|
25
|
-
saveChallenge(id: string, challenge: string, invitationId?: string): Promise<void>;
|
|
26
|
-
getChallenge(id: string): Promise<{
|
|
27
|
-
challenge: string;
|
|
28
|
-
invitationId: string | null;
|
|
29
|
-
} | null>;
|
|
30
|
-
deleteChallenge(id: string): Promise<void>;
|
|
31
|
-
purgeExpiredChallenges(): Promise<void>;
|
|
32
|
-
isRegistrationOpen(): Promise<boolean>;
|
|
33
|
-
createUser(params: {
|
|
34
|
-
did: string;
|
|
35
|
-
pk: string;
|
|
36
|
-
fullName?: string;
|
|
37
|
-
email?: string;
|
|
38
|
-
sourceProvider: string;
|
|
39
|
-
ip?: string;
|
|
40
|
-
domain?: string;
|
|
41
|
-
}): Promise<void>;
|
|
42
|
-
getUserByDid(did: string): Promise<StoredUser | null>;
|
|
43
|
-
updateLastLogin(did: string, ip?: string, domain?: string): Promise<void>;
|
|
44
|
-
incrementPasskeyCount(did: string): Promise<void>;
|
|
45
|
-
getUserCount(): Promise<number>;
|
|
46
|
-
getUsers(opts: {
|
|
47
|
-
page: number;
|
|
48
|
-
pageSize: number;
|
|
49
|
-
role?: string;
|
|
50
|
-
search?: string;
|
|
51
|
-
approved?: number;
|
|
52
|
-
sourceProvider?: string;
|
|
53
|
-
}): Promise<{
|
|
54
|
-
users: MemberInfo[];
|
|
55
|
-
total: number;
|
|
56
|
-
}>;
|
|
57
|
-
getMemberInfo(did: string): Promise<MemberInfo | null>;
|
|
58
|
-
updateUserRole(did: string, role: string): Promise<void>;
|
|
59
|
-
updateUserApproval(did: string, approved: boolean): Promise<void>;
|
|
60
|
-
updateUserProfile(did: string, fields: {
|
|
61
|
-
fullName?: string;
|
|
62
|
-
email?: string;
|
|
63
|
-
avatar?: string;
|
|
64
|
-
}): Promise<void>;
|
|
65
|
-
removeUser(did: string): Promise<void>;
|
|
66
|
-
setUserInviter(did: string, inviterDid: string): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Atomically transfer ownership: set target to owner, caller to admin.
|
|
69
|
-
* Uses D1 batch for atomicity.
|
|
70
|
-
*/
|
|
71
|
-
transferOwnership(currentOwnerDid: string, newOwnerDid: string): Promise<void>;
|
|
72
|
-
createInvitation(input: CreateInvitationInput): Promise<StoredInvitation>;
|
|
73
|
-
getInvitation(id: string): Promise<StoredInvitation | null>;
|
|
74
|
-
getInvitations(opts: {
|
|
75
|
-
page: number;
|
|
76
|
-
pageSize: number;
|
|
77
|
-
instanceDid?: string;
|
|
78
|
-
}): Promise<{
|
|
79
|
-
invitations: InvitationInfo[];
|
|
80
|
-
total: number;
|
|
81
|
-
}>;
|
|
82
|
-
/**
|
|
83
|
-
* Atomically increment useCount. Returns false if maxUses already reached.
|
|
84
|
-
*/
|
|
85
|
-
incrementInvitationUseCount(id: string): Promise<boolean>;
|
|
86
|
-
updateInvitationStatus(id: string, status: string): Promise<void>;
|
|
87
|
-
deleteInvitation(id: string): Promise<void>;
|
|
88
|
-
purgeExpiredInvitations(): Promise<void>;
|
|
89
|
-
createAuditLog(input: CreateAuditLogInput): Promise<void>;
|
|
90
|
-
getAuditLogs(opts: {
|
|
91
|
-
page: number;
|
|
92
|
-
pageSize: number;
|
|
93
|
-
action?: string;
|
|
94
|
-
instanceDid?: string;
|
|
95
|
-
}): Promise<{
|
|
96
|
-
logs: AuditLogInfo[];
|
|
97
|
-
total: number;
|
|
98
|
-
}>;
|
|
99
|
-
getAuditLogsForInstance(instanceDid: string, opts: {
|
|
100
|
-
page: number;
|
|
101
|
-
pageSize: number;
|
|
102
|
-
action?: string;
|
|
103
|
-
}): Promise<{
|
|
104
|
-
logs: AuditLogInfo[];
|
|
105
|
-
total: number;
|
|
106
|
-
}>;
|
|
107
|
-
getAuditLogById(id: number, instanceDid: string): Promise<AuditLogInfo | null>;
|
|
108
|
-
createConnectedAccount(params: {
|
|
109
|
-
did: string;
|
|
110
|
-
pk: string;
|
|
111
|
-
userDid: string;
|
|
112
|
-
provider: string;
|
|
113
|
-
id: string;
|
|
114
|
-
extra: string;
|
|
115
|
-
userInfo: string;
|
|
116
|
-
ip?: string;
|
|
117
|
-
}): Promise<void>;
|
|
118
|
-
upsertConnectedAccount(account: {
|
|
119
|
-
did: string;
|
|
120
|
-
pk: string;
|
|
121
|
-
userDid: string;
|
|
122
|
-
provider: string;
|
|
123
|
-
id: string;
|
|
124
|
-
userInfo?: string;
|
|
125
|
-
}): Promise<void>;
|
|
126
|
-
getConnectedAccountById(credentialId: string): Promise<StoredConnectedAccount | null>;
|
|
127
|
-
getConnectedAccountByDid(did: string): Promise<StoredConnectedAccount | null>;
|
|
128
|
-
updateCounter(did: string, counter: number): Promise<void>;
|
|
129
|
-
getConnectedAccountsByUserDid(userDid: string): Promise<StoredConnectedAccount[]>;
|
|
130
|
-
getConnectedAccountByProviderAndUser(provider: string, userDid: string): Promise<StoredConnectedAccount | null>;
|
|
131
|
-
deleteConnectedAccount(did: string): Promise<void>;
|
|
132
|
-
createAccessKey(input: CreateAccessKeyInput): Promise<StoredAccessKey>;
|
|
133
|
-
getAccessKeyById(accessKeyId: string): Promise<AccessKeyInfo | null>;
|
|
134
|
-
getAccessKeys(opts: {
|
|
135
|
-
page: number;
|
|
136
|
-
pageSize: number;
|
|
137
|
-
search?: string;
|
|
138
|
-
createdBy?: string;
|
|
139
|
-
instanceDid?: string;
|
|
140
|
-
}): Promise<{
|
|
141
|
-
keys: AccessKeyInfo[];
|
|
142
|
-
total: number;
|
|
143
|
-
}>;
|
|
144
|
-
updateAccessKey(accessKeyId: string, input: UpdateAccessKeyInput): Promise<AccessKeyInfo | null>;
|
|
145
|
-
deleteAccessKey(accessKeyId: string): Promise<void>;
|
|
146
|
-
refreshAccessKeyLastUsed(accessKeyId: string): Promise<void>;
|
|
147
|
-
ensureBuiltinPolicies(): Promise<void>;
|
|
148
|
-
ensureDefaultRule(): Promise<void>;
|
|
149
|
-
getAccessPolicies(instanceDid?: string): Promise<AccessPolicyInfo[]>;
|
|
150
|
-
getAccessPolicy(id: string): Promise<AccessPolicyInfo | null>;
|
|
151
|
-
createAccessPolicy(input: CreateAccessPolicyInput): Promise<AccessPolicyInfo>;
|
|
152
|
-
updateAccessPolicy(id: string, input: UpdateAccessPolicyInput): Promise<AccessPolicyInfo>;
|
|
153
|
-
deleteAccessPolicy(id: string): Promise<void>;
|
|
154
|
-
getAccessPolicyRuleCount(id: string): Promise<number>;
|
|
155
|
-
getSecurityRules(instanceDid?: string): Promise<SecurityRuleInfo[]>;
|
|
156
|
-
getSecurityRule(id: string): Promise<SecurityRuleInfo | null>;
|
|
157
|
-
createSecurityRule(input: CreateSecurityRuleInput): Promise<SecurityRuleInfo>;
|
|
158
|
-
updateSecurityRule(id: string, input: UpdateSecurityRuleInput): Promise<SecurityRuleInfo>;
|
|
159
|
-
deleteSecurityRule(id: string): Promise<void>;
|
|
160
|
-
createMembership(userDid: string, instanceDid: string, role: string, invitedBy?: string): Promise<void>;
|
|
161
|
-
getMembership(userDid: string, instanceDid: string): Promise<{
|
|
162
|
-
user_did: string;
|
|
163
|
-
instance_did: string;
|
|
164
|
-
role: string;
|
|
165
|
-
invited_by: string | null;
|
|
166
|
-
joined_at: string;
|
|
167
|
-
} | null>;
|
|
168
|
-
listMemberships(instanceDid: string): Promise<Array<{
|
|
169
|
-
user_did: string;
|
|
170
|
-
instance_did: string;
|
|
171
|
-
role: string;
|
|
172
|
-
invited_by: string | null;
|
|
173
|
-
joined_at: string;
|
|
174
|
-
}>>;
|
|
175
|
-
listMembershipsWithUserInfo(instanceDid: string): Promise<Array<{
|
|
176
|
-
user_did: string;
|
|
177
|
-
instance_did: string;
|
|
178
|
-
role: string;
|
|
179
|
-
invited_by: string | null;
|
|
180
|
-
joined_at: string;
|
|
181
|
-
fullName: string | null;
|
|
182
|
-
email: string | null;
|
|
183
|
-
avatar: string | null;
|
|
184
|
-
approved: number;
|
|
185
|
-
}>>;
|
|
186
|
-
updateMembershipRole(userDid: string, instanceDid: string, role: string): Promise<void>;
|
|
187
|
-
deleteMembership(userDid: string, instanceDid: string): Promise<void>;
|
|
188
|
-
deleteMembershipsByInstance(instanceDid: string): Promise<void>;
|
|
189
|
-
getSetting(instanceDid: string, key: string): Promise<string | null>;
|
|
190
|
-
setSetting(instanceDid: string, key: string, value: string): Promise<void>;
|
|
191
|
-
listSettings(instanceDid: string): Promise<Array<{
|
|
192
|
-
key: string;
|
|
193
|
-
value: string | null;
|
|
194
|
-
updated_at: string;
|
|
195
|
-
}>>;
|
|
196
|
-
deleteSetting(instanceDid: string, key: string): Promise<void>;
|
|
197
|
-
createVerifyCode(code: string, subject: string, purpose: string): Promise<number>;
|
|
198
|
-
consumeVerifyCode(code: string): Promise<{
|
|
199
|
-
id: number;
|
|
200
|
-
subject: string;
|
|
201
|
-
} | null>;
|
|
202
|
-
isVerifyCodeSent(subject: string): Promise<boolean>;
|
|
203
|
-
markVerifyCodeSent(code: string): Promise<void>;
|
|
204
|
-
purgeExpiredVerifyCodes(): Promise<void>;
|
|
205
|
-
createLoginTicket(ticket: string, did: string, targetOrigin?: string, ttlSeconds?: number): Promise<void>;
|
|
206
|
-
getLoginTicket(ticket: string): Promise<{
|
|
207
|
-
ticket: string;
|
|
208
|
-
did: string;
|
|
209
|
-
target_origin: string | null;
|
|
210
|
-
} | null>;
|
|
211
|
-
deleteLoginTicket(ticket: string): Promise<void>;
|
|
212
|
-
purgeExpiredLoginTickets(): Promise<void>;
|
|
213
|
-
seedInstanceDefaults(instanceDid: string): Promise<void>;
|
|
214
|
-
getActiveRulesForInstance(instanceDid: string): Promise<RulesCacheEntry>;
|
|
215
|
-
/**
|
|
216
|
-
* Optimized query for enforcement: returns all enabled rules with inlined policy data.
|
|
217
|
-
* Results are cached per-isolate with TTL + write-through invalidation.
|
|
218
|
-
*/
|
|
219
|
-
getActiveRulesWithPolicies(): Promise<RulesCacheEntry>;
|
|
220
|
-
}
|
|
221
|
-
export {};
|
|
222
|
-
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|