@commonpub/server 2.48.0 → 2.50.0
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/federation/oauth.d.ts +53 -1
- package/dist/federation/oauth.d.ts.map +1 -1
- package/dist/federation/oauth.js +84 -2
- package/dist/federation/oauth.js.map +1 -1
- package/dist/identity/__tests__/health.test.d.ts +2 -0
- package/dist/identity/__tests__/health.test.d.ts.map +1 -0
- package/dist/identity/__tests__/health.test.js +113 -0
- package/dist/identity/__tests__/health.test.js.map +1 -0
- package/dist/identity/__tests__/router.test.d.ts +2 -0
- package/dist/identity/__tests__/router.test.d.ts.map +1 -0
- package/dist/identity/__tests__/router.test.js +163 -0
- package/dist/identity/__tests__/router.test.js.map +1 -0
- package/dist/identity/fediClient.d.ts +82 -0
- package/dist/identity/fediClient.d.ts.map +1 -0
- package/dist/identity/fediClient.js +40 -0
- package/dist/identity/fediClient.js.map +1 -0
- package/dist/identity/health.d.ts +42 -0
- package/dist/identity/health.d.ts.map +1 -0
- package/dist/identity/health.js +43 -0
- package/dist/identity/health.js.map +1 -0
- package/dist/identity/index.d.ts +18 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +15 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/mastodonFactory.d.ts +12 -0
- package/dist/identity/mastodonFactory.d.ts.map +1 -0
- package/dist/identity/mastodonFactory.js +118 -0
- package/dist/identity/mastodonFactory.js.map +1 -0
- package/dist/identity/router.d.ts +79 -0
- package/dist/identity/router.d.ts.map +1 -0
- package/dist/identity/router.js +72 -0
- package/dist/identity/router.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FediClient — opaque, protocol-agnostic facade for calling a remote
|
|
3
|
+
* Fediverse instance as a linked identity. Phase 1a defines the
|
|
4
|
+
* interface; Phase 1b plumbs in the megalodon-backed implementation.
|
|
5
|
+
*
|
|
6
|
+
* Why opaque: callers (action handlers) should never see the bearer
|
|
7
|
+
* token, never call `fetch` directly, never know whether the remote
|
|
8
|
+
* is Mastodon vs Pleroma vs CommonPub. They write `client.statuses.create({ ... })`
|
|
9
|
+
* and the wrapper handles authentication, software-specific quirks,
|
|
10
|
+
* 401-detection-as-revocation, audit logging, and rate-limit backoff.
|
|
11
|
+
*
|
|
12
|
+
* The interface is intentionally narrow — only the actions we proxy.
|
|
13
|
+
* Add methods as Phase 4 (delegated actions) opens specific surfaces.
|
|
14
|
+
*
|
|
15
|
+
* See docs/sessions/136-cross-instance-identity-plan.md.
|
|
16
|
+
*/
|
|
17
|
+
import type { LinkedIdentity } from '@commonpub/auth';
|
|
18
|
+
/**
|
|
19
|
+
* The minimal account shape returned by a verify-credentials call. All
|
|
20
|
+
* Mastodon-API-compatible servers expose this at GET /api/v1/accounts/verify_credentials.
|
|
21
|
+
* CommonPub instances expose the same shape via the OAuth token-exchange
|
|
22
|
+
* response (per existing `processTokenExchange`).
|
|
23
|
+
*/
|
|
24
|
+
export interface VerifiedAccount {
|
|
25
|
+
/** Stable id at the remote (string for Mastodon API compat). */
|
|
26
|
+
id: string;
|
|
27
|
+
/** Bare username, no @host. */
|
|
28
|
+
username: string;
|
|
29
|
+
/** Full handle: `user@host`. Mastodon-API field name. */
|
|
30
|
+
acct: string;
|
|
31
|
+
/** Display name (optional). */
|
|
32
|
+
displayName?: string;
|
|
33
|
+
/** Avatar URL (optional). */
|
|
34
|
+
avatar?: string;
|
|
35
|
+
/** Canonical AP actor URI when known. */
|
|
36
|
+
url?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface FediClient {
|
|
39
|
+
/** Phase 1: only the verification call lands here. Phase 4 expands. */
|
|
40
|
+
account: {
|
|
41
|
+
verifyCredentials(): Promise<VerifiedAccount>;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A FediClient factory. Phase 1b will register a real implementation
|
|
46
|
+
* via `setFediClientFactory` at app init; the factory closes over the
|
|
47
|
+
* DB handle, decryption key, audit logger, and any other dependencies
|
|
48
|
+
* a real client needs without forcing those onto `run()`'s call sites.
|
|
49
|
+
*
|
|
50
|
+
* Tests register mock factories per-case via `setFediClientFactory`
|
|
51
|
+
* and clear with `setFediClientFactory(null)` in afterEach.
|
|
52
|
+
*/
|
|
53
|
+
export type FediClientFactory = (identity: LinkedIdentity) => Promise<FediClient>;
|
|
54
|
+
/**
|
|
55
|
+
* Register the FediClient factory. Called once at app init by Phase 1b's
|
|
56
|
+
* Nitro plugin (something like `setFediClientFactory(makeMastodonFactory(useDB(), tokenKey))`).
|
|
57
|
+
*
|
|
58
|
+
* Pass `null` to clear (used in tests).
|
|
59
|
+
*
|
|
60
|
+
* Why factory-registration instead of explicit DI through `run()`:
|
|
61
|
+
* - keeps `run()`'s signature simple — no DB / audit-logger cruft
|
|
62
|
+
* leaking into every call site
|
|
63
|
+
* - keeps `@commonpub/server` framework-agnostic — no h3 / Nuxt
|
|
64
|
+
* specific globals
|
|
65
|
+
* - app init is the natural place to wire dependencies once
|
|
66
|
+
*/
|
|
67
|
+
export declare function setFediClientFactory(factory: FediClientFactory | null): void;
|
|
68
|
+
/**
|
|
69
|
+
* Construct a FediClient for a linked identity. Delegates to the
|
|
70
|
+
* registered factory; throws if no factory has been registered (i.e.,
|
|
71
|
+
* Phase 1b plumbing isn't in place yet, or the test forgot to call
|
|
72
|
+
* `setFediClientFactory`).
|
|
73
|
+
*
|
|
74
|
+
* The Phase 1b factory will:
|
|
75
|
+
* 1. Read federated_accounts row for `identity.id`
|
|
76
|
+
* 2. Decrypt access_token via `decryptToken` (@commonpub/infra)
|
|
77
|
+
* 3. Construct megalodon client based on `identity.softwareKind`
|
|
78
|
+
* 4. Wrap with 401-detection (mark revoked_at on auth failure),
|
|
79
|
+
* audit logging, and rate-limit handling
|
|
80
|
+
*/
|
|
81
|
+
export declare function getFediClient(identity: LinkedIdentity): Promise<FediClient>;
|
|
82
|
+
//# sourceMappingURL=fediClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fediClient.d.ts","sourceRoot":"","sources":["../../src/identity/fediClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,OAAO,EAAE;QACP,iBAAiB,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;KAC/C,CAAC;CAKH;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAIlF;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAE5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAUjF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
let registeredFactory = null;
|
|
2
|
+
/**
|
|
3
|
+
* Register the FediClient factory. Called once at app init by Phase 1b's
|
|
4
|
+
* Nitro plugin (something like `setFediClientFactory(makeMastodonFactory(useDB(), tokenKey))`).
|
|
5
|
+
*
|
|
6
|
+
* Pass `null` to clear (used in tests).
|
|
7
|
+
*
|
|
8
|
+
* Why factory-registration instead of explicit DI through `run()`:
|
|
9
|
+
* - keeps `run()`'s signature simple — no DB / audit-logger cruft
|
|
10
|
+
* leaking into every call site
|
|
11
|
+
* - keeps `@commonpub/server` framework-agnostic — no h3 / Nuxt
|
|
12
|
+
* specific globals
|
|
13
|
+
* - app init is the natural place to wire dependencies once
|
|
14
|
+
*/
|
|
15
|
+
export function setFediClientFactory(factory) {
|
|
16
|
+
registeredFactory = factory;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Construct a FediClient for a linked identity. Delegates to the
|
|
20
|
+
* registered factory; throws if no factory has been registered (i.e.,
|
|
21
|
+
* Phase 1b plumbing isn't in place yet, or the test forgot to call
|
|
22
|
+
* `setFediClientFactory`).
|
|
23
|
+
*
|
|
24
|
+
* The Phase 1b factory will:
|
|
25
|
+
* 1. Read federated_accounts row for `identity.id`
|
|
26
|
+
* 2. Decrypt access_token via `decryptToken` (@commonpub/infra)
|
|
27
|
+
* 3. Construct megalodon client based on `identity.softwareKind`
|
|
28
|
+
* 4. Wrap with 401-detection (mark revoked_at on auth failure),
|
|
29
|
+
* audit logging, and rate-limit handling
|
|
30
|
+
*/
|
|
31
|
+
export async function getFediClient(identity) {
|
|
32
|
+
if (!registeredFactory) {
|
|
33
|
+
throw new Error(`FediClient factory not registered. ` +
|
|
34
|
+
`Phase 1b: call setFediClientFactory(...) at app init. ` +
|
|
35
|
+
`Tests: register a mock via setFediClientFactory(async () => mockClient). ` +
|
|
36
|
+
`See docs/sessions/136-cross-instance-identity-plan.md.`);
|
|
37
|
+
}
|
|
38
|
+
return registeredFactory(identity);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=fediClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fediClient.js","sourceRoot":"","sources":["../../src/identity/fediClient.ts"],"names":[],"mappings":"AA6DA,IAAI,iBAAiB,GAA6B,IAAI,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAiC;IACpE,iBAAiB,GAAG,OAAO,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAwB;IAC1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,qCAAqC;YACrC,wDAAwD;YACxD,2EAA2E;YAC3E,wDAAwD,CACzD,CAAC;IACJ,CAAC;IACD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity-configuration startup invariants.
|
|
3
|
+
*
|
|
4
|
+
* Cross-instance delegated authorization stores OAuth bearer tokens at
|
|
5
|
+
* rest under a symmetric key (`CPUB_FED_TOKEN_KEY`). If any feature
|
|
6
|
+
* flag that *uses* tokens is enabled but the key is missing, the
|
|
7
|
+
* operator has misconfigured the deploy — better to refuse to start
|
|
8
|
+
* than to fail at first OAuth callback when a real user is mid-sign-in.
|
|
9
|
+
*
|
|
10
|
+
* Phase 1b plugs this into a Nitro plugin that runs at app init:
|
|
11
|
+
*
|
|
12
|
+
* // layers/base/server/plugins/identity-startup.ts
|
|
13
|
+
* export default defineNitroPlugin(() => {
|
|
14
|
+
* assertIdentityConfig(useConfig());
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* `actingAs` does NOT need the key — it's purely a UI identity-context
|
|
18
|
+
* switcher and doesn't store tokens. Listed exclusion below.
|
|
19
|
+
*/
|
|
20
|
+
import type { CommonPubConfig } from '@commonpub/config';
|
|
21
|
+
export interface IdentityConfigCheckResult {
|
|
22
|
+
ok: boolean;
|
|
23
|
+
errors: ReadonlyArray<string>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Inspect the config; return the list of identity-related
|
|
27
|
+
* misconfigurations. Empty errors → `ok: true`.
|
|
28
|
+
*
|
|
29
|
+
* Pure function: no env mutation, no I/O beyond reading the env var
|
|
30
|
+
* (which `isTokenKeyConfigured` does without logging the key).
|
|
31
|
+
*/
|
|
32
|
+
export declare function checkIdentityConfig(config: CommonPubConfig): IdentityConfigCheckResult;
|
|
33
|
+
/**
|
|
34
|
+
* Same as `checkIdentityConfig` but throws on any error. Use at
|
|
35
|
+
* Nitro-plugin startup so a misconfigured deploy fails to boot rather
|
|
36
|
+
* than 500-ing on first user OAuth attempt.
|
|
37
|
+
*
|
|
38
|
+
* Error message lists ALL detected problems (not just the first) so
|
|
39
|
+
* operators can fix everything in one go.
|
|
40
|
+
*/
|
|
41
|
+
export declare function assertIdentityConfig(config: CommonPubConfig): void;
|
|
42
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/identity/health.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC/B;AAeD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CAatF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAOlE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { isTokenKeyConfigured } from '@commonpub/infra';
|
|
2
|
+
/**
|
|
3
|
+
* True iff this flag set requires an active `CPUB_FED_TOKEN_KEY`.
|
|
4
|
+
* `actingAs` alone is fine — it's UI state, not token I/O.
|
|
5
|
+
*/
|
|
6
|
+
function requiresTokenKey(id) {
|
|
7
|
+
return (id.linkRemoteAccounts ||
|
|
8
|
+
id.signInWithRemote ||
|
|
9
|
+
id.remoteInteract ||
|
|
10
|
+
id.remotePublish);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Inspect the config; return the list of identity-related
|
|
14
|
+
* misconfigurations. Empty errors → `ok: true`.
|
|
15
|
+
*
|
|
16
|
+
* Pure function: no env mutation, no I/O beyond reading the env var
|
|
17
|
+
* (which `isTokenKeyConfigured` does without logging the key).
|
|
18
|
+
*/
|
|
19
|
+
export function checkIdentityConfig(config) {
|
|
20
|
+
const errors = [];
|
|
21
|
+
const id = config.features.identity;
|
|
22
|
+
if (requiresTokenKey(id) && !isTokenKeyConfigured()) {
|
|
23
|
+
errors.push('CPUB_FED_TOKEN_KEY env var must be set when any of ' +
|
|
24
|
+
'features.identity.{linkRemoteAccounts, signInWithRemote, remoteInteract, remotePublish} ' +
|
|
25
|
+
'is enabled. Generate with: openssl rand -hex 32');
|
|
26
|
+
}
|
|
27
|
+
return { ok: errors.length === 0, errors };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Same as `checkIdentityConfig` but throws on any error. Use at
|
|
31
|
+
* Nitro-plugin startup so a misconfigured deploy fails to boot rather
|
|
32
|
+
* than 500-ing on first user OAuth attempt.
|
|
33
|
+
*
|
|
34
|
+
* Error message lists ALL detected problems (not just the first) so
|
|
35
|
+
* operators can fix everything in one go.
|
|
36
|
+
*/
|
|
37
|
+
export function assertIdentityConfig(config) {
|
|
38
|
+
const result = checkIdentityConfig(config);
|
|
39
|
+
if (!result.ok) {
|
|
40
|
+
throw new Error(`Cross-instance identity misconfigured:\n - ${result.errors.join('\n - ')}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/identity/health.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAOxD;;;GAGG;AACH,SAAS,gBAAgB,CAAC,EAA2C;IACnE,OAAO,CACL,EAAE,CAAC,kBAAkB;QACrB,EAAE,CAAC,gBAAgB;QACnB,EAAE,CAAC,cAAc;QACjB,EAAE,CAAC,aAAa,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAuB;IACzD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAEpC,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CACT,qDAAqD;YACrD,0FAA0F;YAC1F,iDAAiD,CAClD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @commonpub/server / identity — cross-instance delegated authorization.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1a foundation: types + action router + FediClient interface.
|
|
5
|
+
* Phase 1b lands the OAuth flow + FediClient implementation.
|
|
6
|
+
* Phase 3 lands resolveIdentityContext middleware.
|
|
7
|
+
* Phase 4 lands ActionRoute declarations for publish/like/follow/comment.
|
|
8
|
+
*
|
|
9
|
+
* See docs/sessions/136-cross-instance-identity-plan.md.
|
|
10
|
+
*/
|
|
11
|
+
export type { ActionRoute } from './router.js';
|
|
12
|
+
export { run, ActionUnavailable, InsufficientScopes, LinkedIdentityRevoked, } from './router.js';
|
|
13
|
+
export type { FediClient, VerifiedAccount, FediClientFactory } from './fediClient.js';
|
|
14
|
+
export { getFediClient, setFediClientFactory } from './fediClient.js';
|
|
15
|
+
export type { IdentityConfigCheckResult } from './health.js';
|
|
16
|
+
export { checkIdentityConfig, assertIdentityConfig } from './health.js';
|
|
17
|
+
export { createMastodonFediClientFactory } from './mastodonFactory.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @commonpub/server / identity — cross-instance delegated authorization.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1a foundation: types + action router + FediClient interface.
|
|
5
|
+
* Phase 1b lands the OAuth flow + FediClient implementation.
|
|
6
|
+
* Phase 3 lands resolveIdentityContext middleware.
|
|
7
|
+
* Phase 4 lands ActionRoute declarations for publish/like/follow/comment.
|
|
8
|
+
*
|
|
9
|
+
* See docs/sessions/136-cross-instance-identity-plan.md.
|
|
10
|
+
*/
|
|
11
|
+
export { run, ActionUnavailable, InsufficientScopes, LinkedIdentityRevoked, } from './router.js';
|
|
12
|
+
export { getFediClient, setFediClientFactory } from './fediClient.js';
|
|
13
|
+
export { checkIdentityConfig, assertIdentityConfig } from './health.js';
|
|
14
|
+
export { createMastodonFediClientFactory } from './mastodonFactory.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DB } from '../types.js';
|
|
2
|
+
import type { FediClientFactory } from './fediClient.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build a FediClientFactory closed over a DB handle. Call this once at
|
|
5
|
+
* app init and pass the result to `setFediClientFactory`.
|
|
6
|
+
*
|
|
7
|
+
* import { setFediClientFactory } from '@commonpub/server';
|
|
8
|
+
* import { createMastodonFediClientFactory } from '@commonpub/server';
|
|
9
|
+
* setFediClientFactory(createMastodonFediClientFactory(useDB()));
|
|
10
|
+
*/
|
|
11
|
+
export declare function createMastodonFediClientFactory(db: DB): FediClientFactory;
|
|
12
|
+
//# sourceMappingURL=mastodonFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mastodonFactory.d.ts","sourceRoot":"","sources":["../../src/identity/mastodonFactory.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAMtC,OAAO,KAAK,EAAc,iBAAiB,EAAmB,MAAM,iBAAiB,CAAC;AAyFtF;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAEzE"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mastodon-API-backed FediClient factory.
|
|
3
|
+
*
|
|
4
|
+
* Wires `setFediClientFactory(...)` for Phase 1b runtime: the factory
|
|
5
|
+
* is registered once at app init by a Nitro plugin (which closes over
|
|
6
|
+
* the request-scoped DB), and `run()` calls `getFediClient(identity)`
|
|
7
|
+
* on the linked-identity path, which delegates here.
|
|
8
|
+
*
|
|
9
|
+
* Behaviour:
|
|
10
|
+
* 1. Load the federated_account row's decrypted access token.
|
|
11
|
+
* 2. Map `identity.softwareKind` → megalodon's recognized server kinds
|
|
12
|
+
* (akkoma → pleroma; cpub/unknown → mastodon).
|
|
13
|
+
* 3. Construct a `MegalodonInterface` client.
|
|
14
|
+
* 4. Wrap calls so a 401 response auto-marks the row revoked AND
|
|
15
|
+
* throws `LinkedIdentityRevoked` — UI then prompts re-link.
|
|
16
|
+
*
|
|
17
|
+
* The wrapped client implements only the `FediClient` surface
|
|
18
|
+
* (`account.verifyCredentials` for now). Phase 4 expansion adds
|
|
19
|
+
* statuses/favourites/follows.
|
|
20
|
+
*
|
|
21
|
+
* See docs/sessions/136-cross-instance-identity-plan.md.
|
|
22
|
+
*/
|
|
23
|
+
import generator from 'megalodon';
|
|
24
|
+
import { LinkedIdentityRevoked } from './router.js';
|
|
25
|
+
import { getDecryptedAccessToken, revokeFederatedAccountGrant, } from '../federation/oauth.js';
|
|
26
|
+
/**
|
|
27
|
+
* Map our `SoftwareKind` to megalodon's. Akkoma is a Pleroma fork that
|
|
28
|
+
* megalodon doesn't differentiate. CommonPub speaks the Mastodon API
|
|
29
|
+
* surface, so `cpub` and `unknown` both fall back to 'mastodon'.
|
|
30
|
+
*/
|
|
31
|
+
function toMegalodonSns(kind) {
|
|
32
|
+
switch (kind) {
|
|
33
|
+
case 'mastodon': return 'mastodon';
|
|
34
|
+
case 'pleroma': return 'pleroma';
|
|
35
|
+
case 'akkoma': return 'pleroma';
|
|
36
|
+
case 'gotosocial': return 'gotosocial';
|
|
37
|
+
case 'firefish': return 'firefish';
|
|
38
|
+
case 'cpub': return 'mastodon';
|
|
39
|
+
case 'unknown': return 'mastodon';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* True iff the error looks like a 401 from megalodon's axios layer.
|
|
44
|
+
* megalodon doesn't surface a typed error class for HTTP status, so we
|
|
45
|
+
* sniff the shape that axios + megalodon's wrapper produce.
|
|
46
|
+
*/
|
|
47
|
+
function isUnauthorized(err) {
|
|
48
|
+
if (!err || typeof err !== 'object')
|
|
49
|
+
return false;
|
|
50
|
+
const e = err;
|
|
51
|
+
return e.response?.status === 401 || e.status === 401;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Construct a real Mastodon-API-backed FediClient for a linked identity.
|
|
55
|
+
* On 401, soft-revokes the grant (sets `federated_accounts.revoked_at`)
|
|
56
|
+
* and re-throws `LinkedIdentityRevoked` — UI surfaces the re-link
|
|
57
|
+
* prompt.
|
|
58
|
+
*
|
|
59
|
+
* Other failures (5xx, network) propagate unchanged.
|
|
60
|
+
*/
|
|
61
|
+
async function buildFediClient(db, identity) {
|
|
62
|
+
const token = await getDecryptedAccessToken(db, identity.id);
|
|
63
|
+
if (!token) {
|
|
64
|
+
// No token stored OR row was revoked OR row missing. Either way, the
|
|
65
|
+
// grant is unusable — surface it as revoked so callers prompt re-link.
|
|
66
|
+
throw new LinkedIdentityRevoked(identity);
|
|
67
|
+
}
|
|
68
|
+
const sns = toMegalodonSns(identity.softwareKind);
|
|
69
|
+
const baseUrl = `https://${identity.instance}`;
|
|
70
|
+
const client = generator(sns, baseUrl, token, 'CommonPub/1.0 (+https://commonpub.io)');
|
|
71
|
+
// Last-verified-at could be refreshed here; deferred to Phase 4 when
|
|
72
|
+
// a periodic re-verify cron makes sense.
|
|
73
|
+
return {
|
|
74
|
+
account: {
|
|
75
|
+
async verifyCredentials() {
|
|
76
|
+
try {
|
|
77
|
+
const resp = await client.verifyAccountCredentials();
|
|
78
|
+
const a = resp.data;
|
|
79
|
+
return {
|
|
80
|
+
id: String(a.id),
|
|
81
|
+
username: a.username,
|
|
82
|
+
acct: a.acct,
|
|
83
|
+
displayName: a.display_name ?? undefined,
|
|
84
|
+
avatar: a.avatar ?? undefined,
|
|
85
|
+
url: a.url ?? undefined,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
if (isUnauthorized(err)) {
|
|
90
|
+
// Soft-revoke; do this before throwing so the UI's
|
|
91
|
+
// re-link prompt sees the persisted state.
|
|
92
|
+
await revokeFederatedAccountGrant(db, identity.id).catch(() => {
|
|
93
|
+
// Best-effort: a failure here doesn't change the auth
|
|
94
|
+
// outcome (we still want to surface the re-link prompt).
|
|
95
|
+
// The next `getDecryptedAccessToken` for this row will
|
|
96
|
+
// still succeed with the stale token until the next call
|
|
97
|
+
// attempts and 401s again — eventually consistent.
|
|
98
|
+
});
|
|
99
|
+
throw new LinkedIdentityRevoked(identity);
|
|
100
|
+
}
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Build a FediClientFactory closed over a DB handle. Call this once at
|
|
109
|
+
* app init and pass the result to `setFediClientFactory`.
|
|
110
|
+
*
|
|
111
|
+
* import { setFediClientFactory } from '@commonpub/server';
|
|
112
|
+
* import { createMastodonFediClientFactory } from '@commonpub/server';
|
|
113
|
+
* setFediClientFactory(createMastodonFediClientFactory(useDB()));
|
|
114
|
+
*/
|
|
115
|
+
export function createMastodonFediClientFactory(db) {
|
|
116
|
+
return (identity) => buildFediClient(db, identity);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=mastodonFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mastodonFactory.js","sourceRoot":"","sources":["../../src/identity/mastodonFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action router — the only place that branches on `active.kind === 'linked'`.
|
|
3
|
+
*
|
|
4
|
+
* Every user-facing action gets one ActionRoute declaration with two
|
|
5
|
+
* halves: `local` (run against this instance's DB as the session user)
|
|
6
|
+
* and `remote` (proxied via FediClient to the linked identity's home).
|
|
7
|
+
* The `run()` helper picks the right half based on which identity is
|
|
8
|
+
* currently active in the request context.
|
|
9
|
+
*
|
|
10
|
+
* Adding a new proxiable action = one new file with an ActionRoute.
|
|
11
|
+
* Existing controllers don't grow `if (linked)` branches.
|
|
12
|
+
*
|
|
13
|
+
* See docs/sessions/136-cross-instance-identity-plan.md.
|
|
14
|
+
*/
|
|
15
|
+
import type { Identity, LinkedIdentity, NativeIdentity, Scope } from '@commonpub/auth';
|
|
16
|
+
import type { FediClient } from './fediClient.js';
|
|
17
|
+
/**
|
|
18
|
+
* Event-type generic. The router doesn't care what event/context shape
|
|
19
|
+
* the caller's framework uses — it passes the event through to the
|
|
20
|
+
* `local` handler unchanged. Layer-side code (Nitro/h3) will instantiate
|
|
21
|
+
* `ActionRoute<H3Event, ...>`; framework-agnostic tests use `unknown`.
|
|
22
|
+
*
|
|
23
|
+
* This keeps `@commonpub/server` framework-agnostic (no h3 dep) while
|
|
24
|
+
* still flowing strong types into layer-side controllers.
|
|
25
|
+
*/
|
|
26
|
+
export interface ActionRoute<TEvent, TIn, TOut> {
|
|
27
|
+
/** Stable name — used for audit logs, scope-error messages, metrics. */
|
|
28
|
+
name: string;
|
|
29
|
+
/** Required scopes when running via a linked identity. Ignored for native. */
|
|
30
|
+
scopes: ReadonlyArray<Scope>;
|
|
31
|
+
/** Handler when the active identity is the session's native user. */
|
|
32
|
+
local(event: TEvent, identity: NativeIdentity, input: TIn): Promise<TOut>;
|
|
33
|
+
/**
|
|
34
|
+
* Handler when the active identity is a linked OAuth grant. Optional —
|
|
35
|
+
* actions that should never be proxied (admin, settings, identity
|
|
36
|
+
* management itself) leave this undefined and `run()` throws
|
|
37
|
+
* `ActionUnavailable` if a linked identity tries to invoke.
|
|
38
|
+
*/
|
|
39
|
+
remote?(client: FediClient, identity: LinkedIdentity, input: TIn): Promise<TOut>;
|
|
40
|
+
}
|
|
41
|
+
export declare class ActionUnavailable extends Error {
|
|
42
|
+
readonly action: string;
|
|
43
|
+
readonly reason: string;
|
|
44
|
+
constructor(action: string, reason: string);
|
|
45
|
+
}
|
|
46
|
+
export declare class InsufficientScopes extends Error {
|
|
47
|
+
readonly action: string;
|
|
48
|
+
readonly required: ReadonlyArray<Scope>;
|
|
49
|
+
readonly granted: ReadonlyArray<Scope>;
|
|
50
|
+
constructor(action: string, required: ReadonlyArray<Scope>, granted: ReadonlyArray<Scope>);
|
|
51
|
+
}
|
|
52
|
+
export declare class LinkedIdentityRevoked extends Error {
|
|
53
|
+
readonly identity: LinkedIdentity;
|
|
54
|
+
constructor(identity: LinkedIdentity);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Dispatch an action against the currently active identity.
|
|
58
|
+
*
|
|
59
|
+
* The active identity is *passed in* rather than read from request
|
|
60
|
+
* context here — this keeps `run()` a pure function of its inputs and
|
|
61
|
+
* makes it trivially unit-testable. The middleware that resolves
|
|
62
|
+
* IdentityContext (Phase 3+) will read `event.context.identity.active`
|
|
63
|
+
* and forward it.
|
|
64
|
+
*
|
|
65
|
+
* Behaviour:
|
|
66
|
+
* - `active.kind === 'native'` → call `action.local(event, active, input)`
|
|
67
|
+
* - `active.kind === 'linked'` → check scopes + revocation, then call
|
|
68
|
+
* `action.remote(client, active, input)`
|
|
69
|
+
*
|
|
70
|
+
* Throws `ActionUnavailable` if the action has no `remote` half but a
|
|
71
|
+
* linked identity tries it. Throws `LinkedIdentityRevoked` if the
|
|
72
|
+
* grant is revoked. Throws `InsufficientScopes` if the grant doesn't
|
|
73
|
+
* cover what the action needs.
|
|
74
|
+
*
|
|
75
|
+
* Phase 1a: `getFediClient` is unimplemented; the linked path will
|
|
76
|
+
* throw at client construction. Phase 1b plumbs it in.
|
|
77
|
+
*/
|
|
78
|
+
export declare function run<TEvent, TIn, TOut>(event: TEvent, active: Identity, action: ActionRoute<TEvent, TIn, TOut>, input: TIn): Promise<TOut>;
|
|
79
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/identity/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,cAAc,EACd,KAAK,EACN,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI;IAC5C,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,qEAAqE;IACrE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E;;;;;OAKG;IACH,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM3C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC3B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC;CAO1F;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;gBACtB,QAAQ,EAAE,cAAc;CAKrC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EACzC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,EACtC,KAAK,EAAE,GAAG,GACT,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { hasAllScopes, isUsableLinkedIdentity } from '@commonpub/auth';
|
|
2
|
+
import { getFediClient } from './fediClient.js';
|
|
3
|
+
export class ActionUnavailable extends Error {
|
|
4
|
+
action;
|
|
5
|
+
reason;
|
|
6
|
+
constructor(action, reason) {
|
|
7
|
+
super(`Action "${action}" unavailable: ${reason}`);
|
|
8
|
+
this.name = 'ActionUnavailable';
|
|
9
|
+
this.action = action;
|
|
10
|
+
this.reason = reason;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class InsufficientScopes extends Error {
|
|
14
|
+
action;
|
|
15
|
+
required;
|
|
16
|
+
granted;
|
|
17
|
+
constructor(action, required, granted) {
|
|
18
|
+
super(`Action "${action}" needs scopes [${required.join(', ')}]; have [${granted.join(', ')}]`);
|
|
19
|
+
this.name = 'InsufficientScopes';
|
|
20
|
+
this.action = action;
|
|
21
|
+
this.required = required;
|
|
22
|
+
this.granted = granted;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class LinkedIdentityRevoked extends Error {
|
|
26
|
+
identity;
|
|
27
|
+
constructor(identity) {
|
|
28
|
+
super(`Linked identity ${identity.handle} is revoked; user must re-link`);
|
|
29
|
+
this.name = 'LinkedIdentityRevoked';
|
|
30
|
+
this.identity = identity;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Dispatch an action against the currently active identity.
|
|
35
|
+
*
|
|
36
|
+
* The active identity is *passed in* rather than read from request
|
|
37
|
+
* context here — this keeps `run()` a pure function of its inputs and
|
|
38
|
+
* makes it trivially unit-testable. The middleware that resolves
|
|
39
|
+
* IdentityContext (Phase 3+) will read `event.context.identity.active`
|
|
40
|
+
* and forward it.
|
|
41
|
+
*
|
|
42
|
+
* Behaviour:
|
|
43
|
+
* - `active.kind === 'native'` → call `action.local(event, active, input)`
|
|
44
|
+
* - `active.kind === 'linked'` → check scopes + revocation, then call
|
|
45
|
+
* `action.remote(client, active, input)`
|
|
46
|
+
*
|
|
47
|
+
* Throws `ActionUnavailable` if the action has no `remote` half but a
|
|
48
|
+
* linked identity tries it. Throws `LinkedIdentityRevoked` if the
|
|
49
|
+
* grant is revoked. Throws `InsufficientScopes` if the grant doesn't
|
|
50
|
+
* cover what the action needs.
|
|
51
|
+
*
|
|
52
|
+
* Phase 1a: `getFediClient` is unimplemented; the linked path will
|
|
53
|
+
* throw at client construction. Phase 1b plumbs it in.
|
|
54
|
+
*/
|
|
55
|
+
export async function run(event, active, action, input) {
|
|
56
|
+
if (active.kind === 'native') {
|
|
57
|
+
return action.local(event, active, input);
|
|
58
|
+
}
|
|
59
|
+
// active.kind === 'linked'
|
|
60
|
+
if (!action.remote) {
|
|
61
|
+
throw new ActionUnavailable(action.name, 'not-proxiable');
|
|
62
|
+
}
|
|
63
|
+
if (!isUsableLinkedIdentity(active)) {
|
|
64
|
+
throw new LinkedIdentityRevoked(active);
|
|
65
|
+
}
|
|
66
|
+
if (!hasAllScopes(active.scopes, action.scopes)) {
|
|
67
|
+
throw new InsufficientScopes(action.name, action.scopes, active.scopes);
|
|
68
|
+
}
|
|
69
|
+
const client = await getFediClient(active);
|
|
70
|
+
return action.remote(client, active, input);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/identity/router.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA2BhD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,MAAM,CAAS;IACf,MAAM,CAAS;IACxB,YAAY,MAAc,EAAE,MAAc;QACxC,KAAK,CAAC,WAAW,MAAM,kBAAkB,MAAM,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,MAAM,CAAS;IACf,QAAQ,CAAuB;IAC/B,OAAO,CAAuB;IACvC,YAAY,MAAc,EAAE,QAA8B,EAAE,OAA6B;QACvF,KAAK,CAAC,WAAW,MAAM,mBAAmB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,QAAQ,CAAiB;IAClC,YAAY,QAAwB;QAClC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,gCAAgC,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,KAAa,EACb,MAAgB,EAChB,MAAsC,EACtC,KAAU;IAEV,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -64,4 +64,8 @@ export type { SafeFetchOptions } from './import/ssrf.js';
|
|
|
64
64
|
export { SmtpEmailAdapter, ResendEmailAdapter, ConsoleEmailAdapter, emailTemplates, } from './email.js';
|
|
65
65
|
export type { EmailAdapter, EmailMessage } from './email.js';
|
|
66
66
|
export * from './publicApi/index.js';
|
|
67
|
+
export type { ActionRoute, FediClient, VerifiedAccount, FediClientFactory, IdentityConfigCheckResult, } from './identity/index.js';
|
|
68
|
+
export { run, getFediClient, setFediClientFactory, ActionUnavailable, InsufficientScopes, LinkedIdentityRevoked, checkIdentityConfig, assertIdentityConfig, createMastodonFediClientFactory, } from './identity/index.js';
|
|
69
|
+
export type { FederatedAccountGrant } from './federation/oauth.js';
|
|
70
|
+
export { getDecryptedAccessToken, revokeFederatedAccountGrant, } from './federation/oauth.js';
|
|
67
71
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -69,4 +69,6 @@ export { isPrivateUrl, safeFetch, safeFetchBinary } from './import/ssrf.js';
|
|
|
69
69
|
export { SmtpEmailAdapter, ResendEmailAdapter, ConsoleEmailAdapter, emailTemplates, } from './email.js';
|
|
70
70
|
// Public API (admin-scoped Bearer keys for external consumers)
|
|
71
71
|
export * from './publicApi/index.js';
|
|
72
|
+
export { run, getFediClient, setFediClientFactory, ActionUnavailable, InsufficientScopes, LinkedIdentityRevoked, checkIdentityConfig, assertIdentityConfig, createMastodonFediClientFactory, } from './identity/index.js';
|
|
73
|
+
export { getDecryptedAccessToken, revokeFederatedAccountGrant, } from './federation/oauth.js';
|
|
72
74
|
//# sourceMappingURL=index.js.map
|