tapimo 0.4.4 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +4701 -3416
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +24 -2
- package/dist/App.js.map +1 -1
- package/dist/Assets.js +3 -3
- package/dist/Assets.js.map +1 -1
- package/dist/Scope.d.ts +18 -1
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +23 -3
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +1 -1
- package/dist/Webhooks.d.ts.map +1 -1
- package/dist/Webhooks.js +5 -10
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +6 -34
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +3 -3
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +4 -1
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/scopes.d.ts +6 -34
- package/dist/admin/apps/scopes.d.ts.map +1 -1
- package/dist/admin/apps/scopes.js +2 -2
- package/dist/admin/apps/scopes.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +57 -57
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.js +33 -33
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/data/App.d.ts +4574 -4277
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +155 -77
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts +109 -0
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -0
- package/dist/apps/data/FundingQuoteProviders.js +464 -0
- package/dist/apps/data/FundingQuoteProviders.js.map +1 -0
- package/dist/apps/data/index.d.ts +1 -1
- package/dist/apps/data/index.js +1 -1
- package/dist/apps/data/routes/activities.d.ts +26 -26
- package/dist/apps/data/routes/addresses.d.ts +38 -38
- package/dist/apps/data/routes/balances.d.ts +45 -45
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +67 -149
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +2 -3
- package/dist/apps/data/routes/blocks.d.ts.map +1 -1
- package/dist/apps/data/routes/blocks.js +3 -5
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +177 -176
- package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
- package/dist/apps/data/routes/coingecko.js +3 -8
- package/dist/apps/data/routes/coingecko.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +131 -228
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +152 -219
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +34 -34
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +9 -2
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +228 -228
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +86 -16
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +12 -12
- package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
- package/dist/apps/data/routes/webhooks.d.ts +340 -0
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +13 -1
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/index.d.ts +1 -1
- package/dist/apps/index.js +1 -1
- package/dist/apps/management/App.d.ts +1833 -851
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/App.js +4 -0
- package/dist/apps/management/App.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +41 -41
- package/dist/apps/management/routes/api-keys.js +2 -2
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +48 -48
- package/dist/apps/management/routes/invitations.d.ts +132 -132
- package/dist/apps/management/routes/invite-links.d.ts +1100 -0
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -0
- package/dist/apps/management/routes/invite-links.js +411 -0
- package/dist/apps/management/routes/invite-links.js.map +1 -0
- package/dist/apps/management/routes/members.d.ts +41 -41
- package/dist/apps/management/routes/orgs.d.ts +92 -92
- package/dist/apps/management/routes/projects.d.ts +9 -9
- package/dist/apps/management/routes/scopes.d.ts.map +1 -1
- package/dist/apps/management/routes/scopes.js +2 -2
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +24 -24
- package/dist/apps/mcp.js +2 -2
- package/dist/apps/mcp.js.map +1 -1
- package/dist/apps/relay/App.d.ts +2 -2
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +44 -6
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/db/Db.d.ts +3 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +57 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +31 -0
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +31 -0
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/inviteLinks.d.ts +42 -0
- package/dist/db/tables/inviteLinks.d.ts.map +1 -0
- package/dist/db/tables/inviteLinks.js +148 -0
- package/dist/db/tables/inviteLinks.js.map +1 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +2 -0
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +6 -2
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +13 -3
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +9 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +138 -10
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/EdgeCache.d.ts +3 -1
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +17 -2
- package/dist/internal/EdgeCache.js.map +1 -1
- package/dist/internal/{FundingRoutes.d.ts → FundingQuotes.d.ts} +240 -369
- package/dist/internal/FundingQuotes.d.ts.map +1 -0
- package/dist/internal/{FundingRoutes.js → FundingQuotes.js} +144 -183
- package/dist/internal/FundingQuotes.js.map +1 -0
- package/dist/internal/Log.d.ts +18 -12
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +2 -0
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/Tidx.d.ts +9 -3
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +13 -7
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Viem.d.ts +17 -2
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +30 -3
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/index.d.ts +1 -1
- package/dist/internal/index.js +1 -1
- package/package.json +2 -2
- package/src/ApiKeys.test.ts +25 -0
- package/src/App.test-d.ts +2 -0
- package/src/App.test.ts +13 -2
- package/src/App.ts +37 -5
- package/src/Assets.ts +3 -3
- package/src/Client.test-d.ts +21 -11
- package/src/Scope.test.ts +1 -0
- package/src/Scope.ts +32 -4
- package/src/Webhooks.ts +5 -10
- package/src/admin/apps/api-keys.test.ts +27 -0
- package/src/admin/apps/api-keys.ts +8 -1
- package/src/admin/apps/scopes.test.ts +7 -2
- package/src/admin/apps/scopes.ts +2 -2
- package/src/admin/ui/src/components/Dialog.tsx +8 -2
- package/src/admin/ui/src/lib/scopes.test.ts +19 -0
- package/src/admin/ui/src/lib/scopes.ts +12 -0
- package/src/admin/ui/src/routes/api-keys.tsx +128 -27
- package/src/admin/ui.generated.ts +33 -33
- package/src/apps/composition.test.ts +77 -0
- package/src/apps/data/App.test.ts +354 -0
- package/src/apps/data/App.ts +178 -91
- package/src/apps/data/FundingQuoteProviders.test.ts +577 -0
- package/src/apps/data/FundingQuoteProviders.ts +633 -0
- package/src/apps/data/index.ts +1 -1
- package/src/apps/data/routes/balances.test.ts +64 -18
- package/src/apps/data/routes/balances.ts +76 -177
- package/src/apps/data/routes/blocks.ts +3 -5
- package/src/apps/data/routes/coingecko.ts +3 -8
- package/src/apps/data/routes/funding.test.ts +304 -192
- package/src/apps/data/routes/funding.ts +166 -286
- package/src/apps/data/routes/indexer.test.ts +173 -15
- package/src/apps/data/routes/indexer.ts +8 -2
- package/src/apps/data/routes/rpc.test.ts +219 -0
- package/src/apps/data/routes/rpc.ts +92 -17
- package/src/apps/data/routes/webhooks.test.ts +21 -0
- package/src/apps/data/routes/webhooks.ts +13 -1
- package/src/apps/index.ts +1 -1
- package/src/apps/management/App.ts +4 -0
- package/src/apps/management/Billing.test.ts +2 -2
- package/src/apps/management/routes/api-keys.test.ts +47 -3
- package/src/apps/management/routes/api-keys.ts +2 -2
- package/src/apps/management/routes/invite-links.test.ts +385 -0
- package/src/apps/management/routes/invite-links.ts +570 -0
- package/src/apps/management/routes/scopes.test.ts +3 -2
- package/src/apps/management/routes/scopes.ts +4 -2
- package/src/apps/mcp.test.ts +18 -0
- package/src/apps/mcp.ts +2 -2
- package/src/apps/relay/App.test.ts +328 -7
- package/src/apps/relay/App.ts +42 -6
- package/src/apps/relay/Sponsorships.test.ts +2 -2
- package/src/db/Db.test.ts +5 -5
- package/src/db/Db.ts +65 -0
- package/src/db/Schema.ts +39 -0
- package/src/db/tables/billingSettings.test.ts +2 -2
- package/src/db/tables/inviteLinks.ts +187 -0
- package/src/db/tables/organizations.test.ts +2 -2
- package/src/db/tables/organizations.ts +2 -0
- package/src/db/tables/sponsoredTransactions.test.ts +19 -2
- package/src/db/tables/sponsoredTransactions.ts +21 -14
- package/src/db/tables/stripeCustomers.test.ts +2 -2
- package/src/handlers/relay.ts +16 -4
- package/src/internal/Auth.test.ts +132 -22
- package/src/internal/Auth.ts +181 -14
- package/src/internal/EdgeCache.test.ts +24 -3
- package/src/internal/EdgeCache.ts +18 -2
- package/src/internal/FundingQuotes.test.ts +268 -0
- package/src/internal/{FundingRoutes.ts → FundingQuotes.ts} +216 -277
- package/src/internal/Log.ts +21 -14
- package/src/internal/Tidx.test.ts +48 -0
- package/src/internal/Tidx.ts +21 -7
- package/src/internal/Viem.test.ts +46 -0
- package/src/internal/Viem.ts +48 -6
- package/src/internal/index.test.ts +1 -1
- package/src/internal/index.ts +1 -1
- package/dist/apps/data/FundingRouteProviders.d.ts +0 -36
- package/dist/apps/data/FundingRouteProviders.d.ts.map +0 -1
- package/dist/apps/data/FundingRouteProviders.js +0 -245
- package/dist/apps/data/FundingRouteProviders.js.map +0 -1
- package/dist/internal/FundingRoutes.d.ts.map +0 -1
- package/dist/internal/FundingRoutes.js.map +0 -1
- package/src/apps/data/FundingRouteProviders.test.ts +0 -225
- package/src/apps/data/FundingRouteProviders.ts +0 -312
- package/src/internal/FundingRoutes.test.ts +0 -213
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-links.d.ts","sourceRoot":"","sources":["../../../../src/apps/management/routes/invite-links.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAO7B,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,sDAAsD;AACtD,yBAAiB,MAAM,CAAC;IAiBtB,qEAAqE;IAC9D,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;qBAkEtB,CAAA;IAED,qEAAqE;IAC9D,MAAM,UAAU;;;;;;;;qBA2CtB,CAAA;IAED,mBAAmB;IACZ,MAAM,UAAU;;;;;qBAmBoC,CAAA;IAE3D,mBAAmB;IACZ,MAAM,UAAU;;qBAMoC,CAAA;IAE3D,kDAAkD;IAC3C,MAAM,SAAS;;qBAS8B,CAAA;IAEpD,kCAAkC;IAC3B,MAAM,eAAe;;;qBAW3B,CAAA;IAED,6BAA6B;IACtB,MAAM,cAAc;;;;qBAiB1B,CAAA;IAED,gCAAgC;IACzB,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;qBAOxB,CAAA;IAED,sCAAsC;IAC/B,MAAM,mBAAmB;;;;;;;;;;qBAO/B,CAAA;IAED,iEAAiE;IAC1D,MAAM,MAAM;;qBASwD,CAAA;IAE3E,+DAA+D;IACxD,MAAM,UAAU;;;qBAekD,CAAA;IAEzE,2BAA2B;IACpB,MAAM,cAAc;;qBAS0C,CAAA;CACtE;AAYD,uEAAuE;AACvE,wBAAgB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAiP1B"}
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import * as z from 'zod/mini';
|
|
3
|
+
import * as Db from '../../../db/Db.js';
|
|
4
|
+
import * as InviteLinks from '../../../db/tables/inviteLinks.js';
|
|
5
|
+
import * as Organizations from '../../../db/tables/organizations.js';
|
|
6
|
+
import * as Auth from '../../../internal/Auth.js';
|
|
7
|
+
import * as OpenApi from '../../../internal/OpenApi.js';
|
|
8
|
+
import * as Response from '../../../internal/Response.js';
|
|
9
|
+
import * as Schema from '../../../internal/Schema.js';
|
|
10
|
+
/** OpenAPI schemas owned by reusable invite links. */
|
|
11
|
+
export var schema;
|
|
12
|
+
(function (schema) {
|
|
13
|
+
const nullableExpiry = z
|
|
14
|
+
.nullable(z.iso.datetime({ offset: true }))
|
|
15
|
+
.check(z.describe('When the link expires (ISO 8601), or null for no expiry.'), z.meta({ examples: ['2026-01-08T00:00:00.000Z', null] }));
|
|
16
|
+
const nullableUses = z
|
|
17
|
+
.nullable(z.number().check(z.int(), z.positive()))
|
|
18
|
+
.check(z.describe('Maximum memberships the link may create, or null for unlimited.'), z.meta({ examples: [25, null] }));
|
|
19
|
+
const role = z
|
|
20
|
+
.literal('member')
|
|
21
|
+
.check(z.describe('Role granted by the link.'), z.meta({ examples: ['member'] }));
|
|
22
|
+
/** Management representation, including the recopyable bearer id. */
|
|
23
|
+
schema.InviteLink = Schema.describe(z.object({
|
|
24
|
+
createdAt: z
|
|
25
|
+
.string()
|
|
26
|
+
.check(z.describe('When the link was created (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
|
|
27
|
+
createdBy: z
|
|
28
|
+
.string()
|
|
29
|
+
.check(z.describe('User id that created the link.'), z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
30
|
+
enabled: z
|
|
31
|
+
.boolean()
|
|
32
|
+
.check(z.describe('Whether the link is enabled.'), z.meta({ examples: [true] })),
|
|
33
|
+
expiresAt: nullableExpiry,
|
|
34
|
+
id: z
|
|
35
|
+
.string()
|
|
36
|
+
.check(z.describe('Opaque invite-link resource id (`iln_…`).'), z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
37
|
+
lastUsedAt: z
|
|
38
|
+
.nullable(z.string())
|
|
39
|
+
.check(z.describe('When the link last created a membership, or null.'), z.meta({ examples: ['2026-01-02T00:00:00.000Z', null] })),
|
|
40
|
+
maxUses: nullableUses,
|
|
41
|
+
name: z
|
|
42
|
+
.string()
|
|
43
|
+
.check(z.describe('Human-readable link name.'), z.meta({ examples: ['Community'] })),
|
|
44
|
+
orgId: z
|
|
45
|
+
.string()
|
|
46
|
+
.check(z.describe('Organization id (`org_…`) the link joins.'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
47
|
+
role,
|
|
48
|
+
status: z
|
|
49
|
+
.enum(['active', 'deleted', 'disabled', 'exhausted', 'expired'])
|
|
50
|
+
.check(z.describe('Current link availability.'), z.meta({ examples: ['active'] })),
|
|
51
|
+
token: z
|
|
52
|
+
.string()
|
|
53
|
+
.check(z.describe('Opaque bearer token embedded in the recipient URL (`lnk_…`).'), z.meta({ examples: ['lnk_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
54
|
+
updatedAt: z
|
|
55
|
+
.string()
|
|
56
|
+
.check(z.describe('When the link was last changed (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
|
|
57
|
+
useCount: z
|
|
58
|
+
.number()
|
|
59
|
+
.check(z.int(), z.nonnegative(), z.describe('Memberships created through the link.'), z.meta({ examples: [3] })),
|
|
60
|
+
}), 'A reusable organization invite link.');
|
|
61
|
+
/** Redemption audit representation (never includes a bearer URL). */
|
|
62
|
+
schema.Redemption = Schema.describe(z.object({
|
|
63
|
+
createdAt: z
|
|
64
|
+
.string()
|
|
65
|
+
.check(z.describe('When the membership was created (ISO 8601).'), z.meta({ examples: ['2026-01-02T00:00:00.000Z'] })),
|
|
66
|
+
email: z
|
|
67
|
+
.string()
|
|
68
|
+
.check(z.describe('Verified email used for redemption.'), z.meta({ examples: ['dev@example.com'] })),
|
|
69
|
+
id: z
|
|
70
|
+
.string()
|
|
71
|
+
.check(z.describe('Opaque redemption id (`ilr_…`).'), z.meta({ examples: ['ilr_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
72
|
+
inviteLinkId: z
|
|
73
|
+
.string()
|
|
74
|
+
.check(z.describe('Invite-link resource id used for redemption.'), z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
75
|
+
inviteLinkName: z
|
|
76
|
+
.string()
|
|
77
|
+
.check(z.describe('Link name at redemption time.'), z.meta({ examples: ['Community'] })),
|
|
78
|
+
orgId: z
|
|
79
|
+
.string()
|
|
80
|
+
.check(z.describe('Organization id joined through the link.'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
81
|
+
userId: z
|
|
82
|
+
.string()
|
|
83
|
+
.check(z.describe('User id that redeemed the link.'), z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
84
|
+
}), 'An invite-link redemption audit record.');
|
|
85
|
+
/** Create body. */
|
|
86
|
+
schema.CreateBody = z
|
|
87
|
+
.object({
|
|
88
|
+
expiresAt: z.optional(nullableExpiry),
|
|
89
|
+
maxUses: z.optional(nullableUses),
|
|
90
|
+
name: z.optional(z
|
|
91
|
+
.string()
|
|
92
|
+
.check(z.trim(), z.minLength(1), z.maxLength(100), z.describe('Human-readable link name.'), z.meta({ examples: ['Community'] }))),
|
|
93
|
+
role: z
|
|
94
|
+
._default(role, 'member')
|
|
95
|
+
.check(z.describe('Role granted by the link.'), z.meta({ examples: ['member'] })),
|
|
96
|
+
})
|
|
97
|
+
.check(z.describe('Fields for creating an invite link.'));
|
|
98
|
+
/** Update body. */
|
|
99
|
+
schema.UpdateBody = z
|
|
100
|
+
.object({
|
|
101
|
+
enabled: z
|
|
102
|
+
.boolean()
|
|
103
|
+
.check(z.describe('Whether the link is enabled.'), z.meta({ examples: [false] })),
|
|
104
|
+
})
|
|
105
|
+
.check(z.describe('Fields for updating an invite link.'));
|
|
106
|
+
/** Bearer-token body for recipient operations. */
|
|
107
|
+
schema.TokenBody = z
|
|
108
|
+
.object({
|
|
109
|
+
token: z
|
|
110
|
+
.string()
|
|
111
|
+
.check(z.describe('Opaque invite-link bearer token.'), z.meta({ examples: ['lnk_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
112
|
+
})
|
|
113
|
+
.check(z.describe('An invite-link bearer token.'));
|
|
114
|
+
/** Public active-link summary. */
|
|
115
|
+
schema.ResolveResponse = Schema.describe(z.object({
|
|
116
|
+
orgName: z
|
|
117
|
+
.string()
|
|
118
|
+
.check(z.describe('Human-readable name of the organization.'), z.meta({ examples: ['Acme, Inc.'] })),
|
|
119
|
+
role,
|
|
120
|
+
}), 'A public summary of an active invite link.');
|
|
121
|
+
/** Successful acceptance. */
|
|
122
|
+
schema.AcceptResponse = Schema.describe(z.object({
|
|
123
|
+
orgId: z
|
|
124
|
+
.string()
|
|
125
|
+
.check(z.describe('Organization id joined through the link.'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
126
|
+
role,
|
|
127
|
+
userId: z
|
|
128
|
+
.string()
|
|
129
|
+
.check(z.describe('Member user id.'), z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
130
|
+
}), 'The membership granted through an invite link.');
|
|
131
|
+
/** Link collection response. */
|
|
132
|
+
schema.ListResponse = Schema.describe(z.object({
|
|
133
|
+
data: z
|
|
134
|
+
.array(schema.InviteLink)
|
|
135
|
+
.check(z.describe('Invite links, newest first.'), z.meta({ examples: [[]] })),
|
|
136
|
+
}), 'A non-paginated list of invite links.');
|
|
137
|
+
/** Redemption collection response. */
|
|
138
|
+
schema.RedemptionsResponse = Schema.describe(z.object({
|
|
139
|
+
data: z
|
|
140
|
+
.array(schema.Redemption)
|
|
141
|
+
.check(z.describe('Redemptions, newest first.'), z.meta({ examples: [[]] })),
|
|
142
|
+
}), 'A non-paginated list of invite-link redemptions.');
|
|
143
|
+
/** Path parameters addressing an organization's invite links. */
|
|
144
|
+
schema.Params = z
|
|
145
|
+
.object({
|
|
146
|
+
orgId: z
|
|
147
|
+
.string()
|
|
148
|
+
.check(z.describe('Organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
149
|
+
})
|
|
150
|
+
.check(z.describe("Path parameters for an organization's invite links."));
|
|
151
|
+
/** Path parameters addressing one organization invite link. */
|
|
152
|
+
schema.LinkParams = z
|
|
153
|
+
.object({
|
|
154
|
+
inviteLinkId: z
|
|
155
|
+
.string()
|
|
156
|
+
.check(z.describe('Invite-link resource id (`iln_…`).'), z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
157
|
+
orgId: z
|
|
158
|
+
.string()
|
|
159
|
+
.check(z.describe('Organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
160
|
+
})
|
|
161
|
+
.check(z.describe('Path parameters for one organization invite link.'));
|
|
162
|
+
/** Delete confirmation. */
|
|
163
|
+
schema.DeleteResponse = z
|
|
164
|
+
.object({
|
|
165
|
+
id: z
|
|
166
|
+
.string()
|
|
167
|
+
.check(z.describe('Deleted invite-link resource id.'), z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
168
|
+
})
|
|
169
|
+
.check(z.describe('Confirmation that an invite link was deleted.'));
|
|
170
|
+
})(schema || (schema = {}));
|
|
171
|
+
const errors = { 404: 'No accessible invite link was found.' };
|
|
172
|
+
const bodyValidation = {
|
|
173
|
+
code: 'body_invalid',
|
|
174
|
+
message: 'Check the request body and try again.',
|
|
175
|
+
};
|
|
176
|
+
const paramValidation = {
|
|
177
|
+
code: 'param_invalid',
|
|
178
|
+
message: 'Check the path parameters and try again.',
|
|
179
|
+
};
|
|
180
|
+
/** Mounts reusable invite-link management and recipient operations. */
|
|
181
|
+
export function inviteLinks() {
|
|
182
|
+
return new Hono()
|
|
183
|
+
.post('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invite-links', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.Params, paramValidation), OpenApi.validate('json', schema.CreateBody, bodyValidation), OpenApi.describeRoute({
|
|
184
|
+
operationId: 'createInviteLink',
|
|
185
|
+
responses: OpenApi.responses({
|
|
186
|
+
errors,
|
|
187
|
+
success: { description: 'Created link.', schema: schema.InviteLink },
|
|
188
|
+
}),
|
|
189
|
+
summary: 'Create invite link',
|
|
190
|
+
tags: ['Invite Links'],
|
|
191
|
+
}), async (c) => {
|
|
192
|
+
if (Auth.narrowAccess)
|
|
193
|
+
return Auth.superAdminAccessError(c);
|
|
194
|
+
if (Auth.narrowScope)
|
|
195
|
+
return Auth.ensureOrgError(c);
|
|
196
|
+
if (OpenApi.narrowValidation)
|
|
197
|
+
return OpenApi.validationError(c, bodyValidation);
|
|
198
|
+
const body = c.req.valid('json');
|
|
199
|
+
try {
|
|
200
|
+
const record = await InviteLinks.create(Db.get(c.get('db')), {
|
|
201
|
+
createdBy: Auth.membership(c)?.userId ?? 'super_admin',
|
|
202
|
+
expiresAt: body.expiresAt === undefined
|
|
203
|
+
? new Date(Date.now() + 7 * 86_400_000).toISOString()
|
|
204
|
+
: normalizeExpiry(body.expiresAt),
|
|
205
|
+
maxUses: body.maxUses ?? null,
|
|
206
|
+
...(body.name === undefined ? {} : { name: body.name }),
|
|
207
|
+
orgId: Auth.org(c).id,
|
|
208
|
+
role: body.role,
|
|
209
|
+
});
|
|
210
|
+
return c.json(Response.validated(schema.InviteLink, serialize(record)), 200);
|
|
211
|
+
}
|
|
212
|
+
catch (cause) {
|
|
213
|
+
return Response.upstream(c, cause);
|
|
214
|
+
}
|
|
215
|
+
})
|
|
216
|
+
.get('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invite-links', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.Params, paramValidation), OpenApi.describeRoute({
|
|
217
|
+
operationId: 'listInviteLinks',
|
|
218
|
+
responses: OpenApi.responses({
|
|
219
|
+
errors,
|
|
220
|
+
success: { description: 'Invite links.', schema: schema.ListResponse },
|
|
221
|
+
}),
|
|
222
|
+
summary: 'List invite links',
|
|
223
|
+
tags: ['Invite Links'],
|
|
224
|
+
}), async (c) => {
|
|
225
|
+
if (Auth.narrowAccess)
|
|
226
|
+
return Auth.superAdminAccessError(c);
|
|
227
|
+
if (Auth.narrowScope)
|
|
228
|
+
return Auth.ensureOrgError(c);
|
|
229
|
+
if (OpenApi.narrowValidation)
|
|
230
|
+
return OpenApi.validationError(c, paramValidation);
|
|
231
|
+
try {
|
|
232
|
+
return c.json(Response.validated(schema.ListResponse, {
|
|
233
|
+
data: (await InviteLinks.list(Db.get(c.get('db')), Auth.org(c).id)).map(serialize),
|
|
234
|
+
}), 200);
|
|
235
|
+
}
|
|
236
|
+
catch (cause) {
|
|
237
|
+
return Response.upstream(c, cause);
|
|
238
|
+
}
|
|
239
|
+
})
|
|
240
|
+
.patch('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invite-links/:inviteLinkId{iln_[A-Za-z0-9_-]+}', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.LinkParams, paramValidation), OpenApi.validate('json', schema.UpdateBody, bodyValidation), OpenApi.describeRoute({
|
|
241
|
+
operationId: 'updateInviteLink',
|
|
242
|
+
responses: OpenApi.responses({
|
|
243
|
+
errors,
|
|
244
|
+
success: { description: 'Updated link.', schema: schema.InviteLink },
|
|
245
|
+
}),
|
|
246
|
+
summary: 'Update invite link',
|
|
247
|
+
tags: ['Invite Links'],
|
|
248
|
+
}), async (c) => {
|
|
249
|
+
if (Auth.narrowAccess)
|
|
250
|
+
return Auth.superAdminAccessError(c);
|
|
251
|
+
if (Auth.narrowScope)
|
|
252
|
+
return Auth.ensureOrgError(c);
|
|
253
|
+
if (OpenApi.narrowValidation)
|
|
254
|
+
return OpenApi.validationError(c, bodyValidation);
|
|
255
|
+
const body = c.req.valid('json');
|
|
256
|
+
try {
|
|
257
|
+
const record = await InviteLinks.update(Db.get(c.get('db')), Auth.org(c).id, c.req.valid('param').inviteLinkId, body.enabled);
|
|
258
|
+
if (!record)
|
|
259
|
+
return notFound(c);
|
|
260
|
+
return c.json(Response.validated(schema.InviteLink, serialize(record)), 200);
|
|
261
|
+
}
|
|
262
|
+
catch (cause) {
|
|
263
|
+
return Response.upstream(c, cause);
|
|
264
|
+
}
|
|
265
|
+
})
|
|
266
|
+
.delete('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invite-links/:inviteLinkId{iln_[A-Za-z0-9_-]+}', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.LinkParams, paramValidation), OpenApi.describeRoute({
|
|
267
|
+
operationId: 'deleteInviteLink',
|
|
268
|
+
responses: OpenApi.responses({
|
|
269
|
+
errors,
|
|
270
|
+
success: { description: 'Deleted link.', schema: schema.DeleteResponse },
|
|
271
|
+
}),
|
|
272
|
+
summary: 'Delete invite link',
|
|
273
|
+
tags: ['Invite Links'],
|
|
274
|
+
}), async (c) => {
|
|
275
|
+
if (Auth.narrowAccess)
|
|
276
|
+
return Auth.superAdminAccessError(c);
|
|
277
|
+
if (Auth.narrowScope)
|
|
278
|
+
return Auth.ensureOrgError(c);
|
|
279
|
+
if (OpenApi.narrowValidation)
|
|
280
|
+
return OpenApi.validationError(c, paramValidation);
|
|
281
|
+
try {
|
|
282
|
+
const id = c.req.valid('param').inviteLinkId;
|
|
283
|
+
if (!(await InviteLinks.remove(Db.get(c.get('db')), Auth.org(c).id, id)))
|
|
284
|
+
return notFound(c);
|
|
285
|
+
return c.json({ id }, 200);
|
|
286
|
+
}
|
|
287
|
+
catch (cause) {
|
|
288
|
+
return Response.upstream(c, cause);
|
|
289
|
+
}
|
|
290
|
+
})
|
|
291
|
+
.get('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invite-links/:inviteLinkId{iln_[A-Za-z0-9_-]+}/redemptions', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.LinkParams, paramValidation), OpenApi.describeRoute({
|
|
292
|
+
operationId: 'listInviteLinkRedemptions',
|
|
293
|
+
responses: OpenApi.responses({
|
|
294
|
+
errors,
|
|
295
|
+
success: { description: 'Redemptions.', schema: schema.RedemptionsResponse },
|
|
296
|
+
}),
|
|
297
|
+
summary: 'List link redemptions',
|
|
298
|
+
tags: ['Invite Links'],
|
|
299
|
+
}), async (c) => {
|
|
300
|
+
if (Auth.narrowAccess)
|
|
301
|
+
return Auth.superAdminAccessError(c);
|
|
302
|
+
if (Auth.narrowScope)
|
|
303
|
+
return Auth.ensureOrgError(c);
|
|
304
|
+
if (OpenApi.narrowValidation)
|
|
305
|
+
return OpenApi.validationError(c, paramValidation);
|
|
306
|
+
try {
|
|
307
|
+
const db = Db.get(c.get('db'));
|
|
308
|
+
const id = c.req.valid('param').inviteLinkId;
|
|
309
|
+
const link = await InviteLinks.get(db, id);
|
|
310
|
+
if (!link || link.orgId !== Auth.org(c).id)
|
|
311
|
+
return notFound(c);
|
|
312
|
+
return c.json(Response.validated(schema.RedemptionsResponse, {
|
|
313
|
+
data: await InviteLinks.listRedemptions(db, Auth.org(c).id, id),
|
|
314
|
+
}), 200);
|
|
315
|
+
}
|
|
316
|
+
catch (cause) {
|
|
317
|
+
return Response.upstream(c, cause);
|
|
318
|
+
}
|
|
319
|
+
})
|
|
320
|
+
.post('/v1/invite-links/resolve', Auth.policy({ public: true, session: true }), OpenApi.validate('json', schema.TokenBody, bodyValidation), OpenApi.describeRoute({
|
|
321
|
+
operationId: 'resolveInviteLink',
|
|
322
|
+
responses: OpenApi.responses({
|
|
323
|
+
errors,
|
|
324
|
+
success: { description: 'Active link summary.', schema: schema.ResolveResponse },
|
|
325
|
+
}),
|
|
326
|
+
summary: 'Resolve invite link',
|
|
327
|
+
tags: ['Invite Links'],
|
|
328
|
+
}), async (c) => {
|
|
329
|
+
if (Auth.narrowAccess)
|
|
330
|
+
return Auth.superAdminAccessError(c);
|
|
331
|
+
if (OpenApi.narrowValidation)
|
|
332
|
+
return OpenApi.validationError(c, bodyValidation);
|
|
333
|
+
try {
|
|
334
|
+
const db = Db.get(c.get('db'));
|
|
335
|
+
const link = await InviteLinks.getByToken(db, c.req.valid('json').token);
|
|
336
|
+
if (!link || InviteLinks.status(link) !== 'active')
|
|
337
|
+
return notFound(c);
|
|
338
|
+
const org = await Organizations.get(db, link.orgId);
|
|
339
|
+
if (!org)
|
|
340
|
+
return notFound(c);
|
|
341
|
+
return c.json(Response.validated(schema.ResolveResponse, { orgName: org.name, role: link.role }), 200);
|
|
342
|
+
}
|
|
343
|
+
catch (cause) {
|
|
344
|
+
return Response.upstream(c, cause);
|
|
345
|
+
}
|
|
346
|
+
})
|
|
347
|
+
.post('/v1/invite-links/accept', Auth.policy({ session: true }), OpenApi.validate('json', schema.TokenBody, bodyValidation), OpenApi.describeRoute({
|
|
348
|
+
operationId: 'acceptInviteLink',
|
|
349
|
+
responses: OpenApi.responses({
|
|
350
|
+
errors: { 403: 'A verified session email is required.', ...errors },
|
|
351
|
+
success: { description: 'Membership.', schema: schema.AcceptResponse },
|
|
352
|
+
}),
|
|
353
|
+
summary: 'Accept invite link',
|
|
354
|
+
tags: ['Invite Links'],
|
|
355
|
+
}), async (c) => {
|
|
356
|
+
if (Auth.narrowAccess)
|
|
357
|
+
return Auth.superAdminAccessError(c);
|
|
358
|
+
if (OpenApi.narrowValidation)
|
|
359
|
+
return OpenApi.validationError(c, bodyValidation);
|
|
360
|
+
const principal = Auth.getPrincipal(c);
|
|
361
|
+
if (principal?.type !== 'session' || !principal.email)
|
|
362
|
+
return Response.error(c, {
|
|
363
|
+
code: 'forbidden',
|
|
364
|
+
message: 'Verified session email required',
|
|
365
|
+
status: 403,
|
|
366
|
+
});
|
|
367
|
+
try {
|
|
368
|
+
const accepted = await InviteLinks.accept(Db.get(c.get('db')), c.req.valid('json').token, principal.id, principal.email);
|
|
369
|
+
if (!accepted)
|
|
370
|
+
return notFound(c);
|
|
371
|
+
return c.json(Response.validated(schema.AcceptResponse, {
|
|
372
|
+
orgId: accepted.link.orgId,
|
|
373
|
+
role: accepted.link.role,
|
|
374
|
+
userId: principal.id,
|
|
375
|
+
}), 200);
|
|
376
|
+
}
|
|
377
|
+
catch (cause) {
|
|
378
|
+
return Response.upstream(c, cause);
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
function serialize(record) {
|
|
383
|
+
return {
|
|
384
|
+
createdAt: record.createdAt,
|
|
385
|
+
createdBy: record.createdBy,
|
|
386
|
+
enabled: record.enabled,
|
|
387
|
+
expiresAt: record.expiresAt,
|
|
388
|
+
id: record.id,
|
|
389
|
+
lastUsedAt: record.lastUsedAt,
|
|
390
|
+
maxUses: record.maxUses,
|
|
391
|
+
name: record.name,
|
|
392
|
+
orgId: record.orgId,
|
|
393
|
+
role: record.role,
|
|
394
|
+
status: InviteLinks.status(record),
|
|
395
|
+
token: record.token,
|
|
396
|
+
updatedAt: record.updatedAt,
|
|
397
|
+
useCount: record.useCount,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
/** Normalizes accepted offset timestamps so persisted expiry comparisons remain chronological. */
|
|
401
|
+
function normalizeExpiry(value) {
|
|
402
|
+
return value === null ? null : new Date(value).toISOString();
|
|
403
|
+
}
|
|
404
|
+
function notFound(c) {
|
|
405
|
+
return Response.error(c, {
|
|
406
|
+
code: 'invite_link_not_found',
|
|
407
|
+
message: 'Invite link not found',
|
|
408
|
+
status: 404,
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=invite-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-links.js","sourceRoot":"","sources":["../../../../src/apps/management/routes/invite-links.ts"],"names":[],"mappings":"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"}
|