@recursiv/sdk 0.5.8 → 0.6.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/README.md +38 -1
- package/dist/next/index.d.ts +11 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +10 -0
- package/dist/next/index.js.map +1 -0
- package/dist/next/scopes.d.ts +35 -0
- package/dist/next/scopes.d.ts.map +1 -0
- package/dist/next/scopes.js +48 -0
- package/dist/next/scopes.js.map +1 -0
- package/dist/next/server-auth.d.ts +187 -0
- package/dist/next/server-auth.d.ts.map +1 -0
- package/dist/next/server-auth.js +249 -0
- package/dist/next/server-auth.js.map +1 -0
- package/dist/resources/agents.d.ts +1 -1
- package/dist/resources/agents.d.ts.map +1 -1
- package/dist/resources/agents.js +2 -2
- package/dist/resources/agents.js.map +1 -1
- package/dist/resources/app-subscriptions.d.ts +10 -0
- package/dist/resources/app-subscriptions.d.ts.map +1 -1
- package/dist/resources/app-subscriptions.js +4 -0
- package/dist/resources/app-subscriptions.js.map +1 -1
- package/dist/resources/auth.d.ts +16 -1
- package/dist/resources/auth.d.ts.map +1 -1
- package/dist/resources/auth.js +88 -10
- package/dist/resources/auth.js.map +1 -1
- package/dist/resources/dispatcher.d.ts +31 -8
- package/dist/resources/dispatcher.d.ts.map +1 -1
- package/dist/resources/dispatcher.js +33 -21
- package/dist/resources/dispatcher.js.map +1 -1
- package/dist/resources/organization-settings.d.ts +13 -0
- package/dist/resources/organization-settings.d.ts.map +1 -1
- package/dist/resources/organization-settings.js +4 -0
- package/dist/resources/organization-settings.js.map +1 -1
- package/llm.md +31 -0
- package/package.json +23 -8
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
// ── Resource ──
|
|
2
|
+
// organization_id is auth scoping, not a payload field — personal API keys are
|
|
3
|
+
// membership-checked against it in production. The strict server-side body
|
|
4
|
+
// schemas reject unknown keys, so it always travels as a query param (the
|
|
5
|
+
// dispatcher auth middleware reads query before body).
|
|
6
|
+
function orgQuery(organization_id) {
|
|
7
|
+
return organization_id ? `?organization_id=${encodeURIComponent(organization_id)}` : '';
|
|
8
|
+
}
|
|
2
9
|
export class DispatcherResource {
|
|
3
10
|
client;
|
|
4
11
|
constructor(client) {
|
|
@@ -18,7 +25,8 @@ export class DispatcherResource {
|
|
|
18
25
|
}
|
|
19
26
|
/** Send heartbeat to extend a claim (call every 5 min) */
|
|
20
27
|
heartbeat(taskId, input) {
|
|
21
|
-
|
|
28
|
+
const { organization_id, ...body } = input;
|
|
29
|
+
return this.client.post(`/dispatcher/heartbeat/${encodeURIComponent(taskId)}${orgQuery(organization_id)}`, body);
|
|
22
30
|
}
|
|
23
31
|
/** Mark a task as done */
|
|
24
32
|
complete(taskId, input) {
|
|
@@ -26,7 +34,8 @@ export class DispatcherResource {
|
|
|
26
34
|
}
|
|
27
35
|
/** Release a claim on a task */
|
|
28
36
|
release(taskId, input) {
|
|
29
|
-
|
|
37
|
+
const { organization_id, ...body } = input ?? {};
|
|
38
|
+
return this.client.post(`/dispatcher/release/${encodeURIComponent(taskId)}${orgQuery(organization_id)}`, body);
|
|
30
39
|
}
|
|
31
40
|
/** Create a new task */
|
|
32
41
|
create(input) {
|
|
@@ -47,12 +56,12 @@ export class DispatcherResource {
|
|
|
47
56
|
: this.client.get('/dispatcher/stats');
|
|
48
57
|
}
|
|
49
58
|
/** List active claims (tasks currently being worked on) */
|
|
50
|
-
activeClaims() {
|
|
51
|
-
return this.client.get('/dispatcher/claims');
|
|
59
|
+
activeClaims(params) {
|
|
60
|
+
return this.client.get('/dispatcher/claims', params);
|
|
52
61
|
}
|
|
53
62
|
/** Get claim status for a specific task */
|
|
54
|
-
getClaim(taskId) {
|
|
55
|
-
return this.client.get(`/dispatcher/claim/${encodeURIComponent(taskId)}
|
|
63
|
+
getClaim(taskId, params) {
|
|
64
|
+
return this.client.get(`/dispatcher/claim/${encodeURIComponent(taskId)}`, params);
|
|
56
65
|
}
|
|
57
66
|
/** List signals with optional filters */
|
|
58
67
|
signals(params) {
|
|
@@ -79,8 +88,8 @@ export class DispatcherResource {
|
|
|
79
88
|
return this.client.get('/dispatcher/outcomes', query);
|
|
80
89
|
}
|
|
81
90
|
/** Get task outcomes for a specific task */
|
|
82
|
-
taskOutcomes(taskId) {
|
|
83
|
-
return this.client.get(`/dispatcher/tasks/${encodeURIComponent(taskId)}/outcomes
|
|
91
|
+
taskOutcomes(taskId, params) {
|
|
92
|
+
return this.client.get(`/dispatcher/tasks/${encodeURIComponent(taskId)}/outcomes`, params);
|
|
84
93
|
}
|
|
85
94
|
/** Get discovery queue — tasks needing human review */
|
|
86
95
|
discoveries(params) {
|
|
@@ -107,16 +116,16 @@ export class DispatcherResource {
|
|
|
107
116
|
return this.client.get('/dispatcher/tasks/stuck', params);
|
|
108
117
|
}
|
|
109
118
|
/** Get a single task by ID */
|
|
110
|
-
getTask(taskId) {
|
|
111
|
-
return this.client.get(`/dispatcher/tasks/${encodeURIComponent(taskId)}
|
|
119
|
+
getTask(taskId, params) {
|
|
120
|
+
return this.client.get(`/dispatcher/tasks/${encodeURIComponent(taskId)}`, params);
|
|
112
121
|
}
|
|
113
122
|
/** Get activity log for a task */
|
|
114
123
|
activity(taskId, params) {
|
|
115
124
|
return this.client.get(`/dispatcher/tasks/${encodeURIComponent(taskId)}/activity`, params);
|
|
116
125
|
}
|
|
117
126
|
/** Archive (soft-delete) a task */
|
|
118
|
-
archive(taskId) {
|
|
119
|
-
return this.client.post(`/dispatcher/tasks/${encodeURIComponent(taskId)}/archive`);
|
|
127
|
+
archive(taskId, params) {
|
|
128
|
+
return this.client.post(`/dispatcher/tasks/${encodeURIComponent(taskId)}/archive${orgQuery(params?.organization_id)}`);
|
|
120
129
|
}
|
|
121
130
|
/** Submit a discovered task for human review */
|
|
122
131
|
discover(input) {
|
|
@@ -124,27 +133,30 @@ export class DispatcherResource {
|
|
|
124
133
|
}
|
|
125
134
|
/** Record an outcome measurement for a task */
|
|
126
135
|
recordOutcome(taskId, input) {
|
|
127
|
-
|
|
136
|
+
const { organization_id, ...body } = input;
|
|
137
|
+
return this.client.post(`/dispatcher/tasks/${encodeURIComponent(taskId)}/outcomes${orgQuery(organization_id)}`, body);
|
|
128
138
|
}
|
|
129
139
|
/** Create a webhook subscription for dispatcher events */
|
|
130
140
|
createWebhook(input) {
|
|
131
|
-
|
|
141
|
+
const { organization_id, ...body } = input;
|
|
142
|
+
return this.client.post(`/dispatcher/webhooks${orgQuery(organization_id)}`, body);
|
|
132
143
|
}
|
|
133
144
|
/** List webhook subscriptions (secrets are redacted) */
|
|
134
|
-
listWebhooks() {
|
|
135
|
-
return this.client.get('/dispatcher/webhooks');
|
|
145
|
+
listWebhooks(params) {
|
|
146
|
+
return this.client.get('/dispatcher/webhooks', params);
|
|
136
147
|
}
|
|
137
148
|
/** Update a webhook subscription */
|
|
138
149
|
updateWebhook(id, input) {
|
|
139
|
-
|
|
150
|
+
const { organization_id, ...body } = input;
|
|
151
|
+
return this.client.patch(`/dispatcher/webhooks/${encodeURIComponent(id)}${orgQuery(organization_id)}`, body);
|
|
140
152
|
}
|
|
141
153
|
/** Delete a webhook subscription */
|
|
142
|
-
deleteWebhook(id) {
|
|
143
|
-
return this.client.delete(`/dispatcher/webhooks/${encodeURIComponent(id)}`);
|
|
154
|
+
deleteWebhook(id, params) {
|
|
155
|
+
return this.client.delete(`/dispatcher/webhooks/${encodeURIComponent(id)}${orgQuery(params?.organization_id)}`);
|
|
144
156
|
}
|
|
145
157
|
/** Send a test event to a webhook subscription */
|
|
146
|
-
testWebhook(id) {
|
|
147
|
-
return this.client.post(`/dispatcher/webhooks/${encodeURIComponent(id)}/test`, {});
|
|
158
|
+
testWebhook(id, params) {
|
|
159
|
+
return this.client.post(`/dispatcher/webhooks/${encodeURIComponent(id)}/test${orgQuery(params?.organization_id)}`, {});
|
|
148
160
|
}
|
|
149
161
|
/** Get delivery log for a webhook subscription */
|
|
150
162
|
webhookDeliveries(subscriptionId, params) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/resources/dispatcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/resources/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export interface OrganizationSettingsData {
|
|
|
9
9
|
/** When true, POST /api-keys auto-adds new signups as org members. */
|
|
10
10
|
allow_public_signup: boolean;
|
|
11
11
|
preferred_contact_email: string | null;
|
|
12
|
+
/** Brand name used for project/org-scoped auth OTP emails. */
|
|
13
|
+
auth_email_brand_name: string | null;
|
|
12
14
|
github_connected: boolean;
|
|
13
15
|
github_owner: string | null;
|
|
14
16
|
github_connected_at: string | null;
|
|
@@ -52,6 +54,15 @@ export interface PreferredContactEmailResult {
|
|
|
52
54
|
preferred_contact_email: string | null;
|
|
53
55
|
updated_at: string;
|
|
54
56
|
}
|
|
57
|
+
export interface SetAuthEmailBrandInput {
|
|
58
|
+
auth_email_brand_name: string | null;
|
|
59
|
+
}
|
|
60
|
+
export interface AuthEmailBrandResult {
|
|
61
|
+
id: string;
|
|
62
|
+
organization_id: string;
|
|
63
|
+
auth_email_brand_name: string | null;
|
|
64
|
+
updated_at: string;
|
|
65
|
+
}
|
|
55
66
|
export interface ValidateTemplateInput {
|
|
56
67
|
url: string;
|
|
57
68
|
}
|
|
@@ -90,6 +101,8 @@ export declare class OrganizationSettingsResource {
|
|
|
90
101
|
setAllowPublicSignup(organizationId: string, input: SetAllowPublicSignupInput): Promise<SingleResponse<AllowPublicSignupResult>>;
|
|
91
102
|
/** Set preferred contact email for agent outreach and operational alerts */
|
|
92
103
|
setPreferredContactEmail(organizationId: string, input: SetPreferredContactEmailInput): Promise<SingleResponse<PreferredContactEmailResult>>;
|
|
104
|
+
/** Set the brand name used by project/org-scoped auth OTP emails */
|
|
105
|
+
setAuthEmailBrandName(organizationId: string, input: SetAuthEmailBrandInput): Promise<SingleResponse<AuthEmailBrandResult>>;
|
|
93
106
|
/** Validate a template URL */
|
|
94
107
|
validateTemplateUrl(organizationId: string, input: ValidateTemplateInput): Promise<SingleResponse<ValidateTemplateResult>>;
|
|
95
108
|
/** Connect a GitHub account to the organization */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-settings.d.ts","sourceRoot":"","sources":["../../src/resources/organization-settings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"organization-settings.d.ts","sourceRoot":"","sources":["../../src/resources/organization-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,10 @@ export class OrganizationSettingsResource {
|
|
|
32
32
|
setPreferredContactEmail(organizationId, input) {
|
|
33
33
|
return this.client.put(`/organization-settings/${organizationId}/settings/preferred-contact`, input);
|
|
34
34
|
}
|
|
35
|
+
/** Set the brand name used by project/org-scoped auth OTP emails */
|
|
36
|
+
setAuthEmailBrandName(organizationId, input) {
|
|
37
|
+
return this.client.put(`/organization-settings/${organizationId}/settings/auth-email-brand`, input);
|
|
38
|
+
}
|
|
35
39
|
/** Validate a template URL */
|
|
36
40
|
validateTemplateUrl(organizationId, input) {
|
|
37
41
|
return this.client.post(`/organization-settings/${organizationId}/settings/validate-template`, input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-settings.js","sourceRoot":"","sources":["../../src/resources/organization-settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"organization-settings.js","sourceRoot":"","sources":["../../src/resources/organization-settings.ts"],"names":[],"mappings":"AAmGA,MAAM,OAAO,4BAA4B;IACnB;IAApB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAE1C,gCAAgC;IAChC,GAAG,CACD,cAAsB;QAEtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,0BAA0B,cAAc,WAAW,CACpD,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,kBAAkB,CAChB,cAAsB,EACtB,KAA8B;QAE9B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,0BAA0B,cAAc,4BAA4B,EACpE,KAAK,CACN,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,sBAAsB,CACpB,cAAsB,EACtB,KAA4B;QAE5B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,0BAA0B,cAAc,0BAA0B,EAClE,KAAK,CACN,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,oBAAoB,CAClB,cAAsB,EACtB,KAAgC;QAEhC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,0BAA0B,cAAc,+BAA+B,EACvE,KAAK,CACN,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,wBAAwB,CACtB,cAAsB,EACtB,KAAoC;QAEpC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,0BAA0B,cAAc,6BAA6B,EACrE,KAAK,CACN,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,qBAAqB,CACnB,cAAsB,EACtB,KAA6B;QAE7B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,0BAA0B,cAAc,4BAA4B,EACpE,KAAK,CACN,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,mBAAmB,CACjB,cAAsB,EACtB,KAA4B;QAE5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,0BAA0B,cAAc,6BAA6B,EACrE,KAAK,CACN,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,aAAa,CACX,cAAsB,EACtB,KAAyB;QAEzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,0BAA0B,cAAc,0BAA0B,EAClE,KAAK,CACN,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,gBAAgB,CACd,cAAsB;QAEtB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,0BAA0B,cAAc,6BAA6B,CACtE,CAAC;IACJ,CAAC;CACF"}
|
package/llm.md
CHANGED
|
@@ -326,6 +326,37 @@ Available scopes: `posts:read`, `posts:write`, `users:read`, `users:write`, `com
|
|
|
326
326
|
|
|
327
327
|
**Scope enforcement:** Every API call checks scopes. A 403 `AuthorizationError` means your key is missing the required scope. Grant only the scopes your app needs (least privilege). The `admin` scope can only be created by platform administrators — attempting to self-grant it returns 403.
|
|
328
328
|
|
|
329
|
+
### @recursiv/sdk/next — Next.js App Router server auth
|
|
330
|
+
|
|
331
|
+
Server-only sub-path (Next 14+, both 14 and 15). Per-user-key pattern: auth flows mint a project-scoped key and store it in an httpOnly cookie; every request rebuilds an SDK bound to the caller's own key. No platform key needed at runtime.
|
|
332
|
+
|
|
333
|
+
```typescript
|
|
334
|
+
// src/lib/recursiv.ts
|
|
335
|
+
import 'server-only';
|
|
336
|
+
import { createRecursivAuth } from '@recursiv/sdk/next';
|
|
337
|
+
export const auth = createRecursivAuth(); // RECURSIV_PROJECT_ID + RECURSIV_API_BASE_URL from env
|
|
338
|
+
|
|
339
|
+
// server action ('use server')
|
|
340
|
+
const { user } = await auth.signIn({ email, password }); // mints key + sets cookie
|
|
341
|
+
await auth.signOut();
|
|
342
|
+
|
|
343
|
+
// server component / route handler
|
|
344
|
+
const sdk = await auth.getSdk(); // throws AuthenticationError when signed out
|
|
345
|
+
const maybe = await auth.trySdk(); // null when signed out
|
|
346
|
+
const me = await auth.getUser(); // SessionUser | null
|
|
347
|
+
|
|
348
|
+
// route handler writing its own response (custom cookie contract)
|
|
349
|
+
const auth = createRecursivAuth({ cookie: { name: 'myapp_key', maxAge: 60 * 60 * 24 * 90 } });
|
|
350
|
+
const res = NextResponse.json({ ok: true });
|
|
351
|
+
await auth.verifyOtp({ email, otp }, { response: res.cookies });
|
|
352
|
+
|
|
353
|
+
// request-bound, e.g. a route handler that already holds a NextRequest
|
|
354
|
+
const key = auth.sessionKeyFromRequest(req);
|
|
355
|
+
const sdk2 = auth.sdkFromRequest(req); // Recursiv | null
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Config: `projectId` (default env `RECURSIV_PROJECT_ID`) XOR `organizationId`; `scopes` (default `DEFAULT_USER_KEY_SCOPES` — pass your own for least privilege); `cookie: { name, maxAge, sameSite, secure, domain, httpOnly, path }`; `apiKey` (only for branded auth emails); `baseUrl`, `timeout`, `maxRetries` (set `maxRetries: 0` if duplicate OTP/checkout POSTs are worse than a retry). Auth results include `keyPrefix` for account-linking records. Never import this sub-path in client components (`server-only` enforces it). Keep it out of `middleware.ts` too (it drags the whole SDK into the edge bundle) — middleware should do a plain presence check on a shared cookie-name constant and redirect.
|
|
359
|
+
|
|
329
360
|
### r.users
|
|
330
361
|
|
|
331
362
|
```typescript
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@recursiv/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "TypeScript SDK for the Recursiv API",
|
|
5
5
|
"license": "FSL-1.1-ALv2",
|
|
6
6
|
"type": "module",
|
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
"types": "./dist/react/index.d.ts",
|
|
18
18
|
"import": "./dist/react/index.js",
|
|
19
19
|
"default": "./dist/react/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./next": {
|
|
22
|
+
"types": "./dist/next/index.d.ts",
|
|
23
|
+
"import": "./dist/next/index.js",
|
|
24
|
+
"default": "./dist/next/index.js"
|
|
20
25
|
}
|
|
21
26
|
},
|
|
22
27
|
"files": [
|
|
@@ -42,21 +47,31 @@
|
|
|
42
47
|
"registry": "https://registry.npmjs.org/",
|
|
43
48
|
"access": "public"
|
|
44
49
|
},
|
|
45
|
-
"scripts": {
|
|
46
|
-
"build": "tsc",
|
|
47
|
-
"prepublishOnly": "tsc",
|
|
48
|
-
"typecheck": "tsc --noEmit",
|
|
49
|
-
"test": "vitest run"
|
|
50
|
-
},
|
|
51
50
|
"devDependencies": {
|
|
52
51
|
"@types/react": "^19.2.14",
|
|
52
|
+
"next": "^15.5.20",
|
|
53
53
|
"typescript": "~5.9.2",
|
|
54
54
|
"vitest": "^4.1.0"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
+
"server-only": "^0.0.1",
|
|
57
58
|
"socket.io-client": "^4.8.3"
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
|
61
|
+
"next": ">=14.0.0 <16",
|
|
60
62
|
"react": "^18.3.1 || ^19.0.0"
|
|
63
|
+
},
|
|
64
|
+
"peerDependenciesMeta": {
|
|
65
|
+
"next": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"react": {
|
|
69
|
+
"optional": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "tsc",
|
|
74
|
+
"typecheck": "tsc --noEmit",
|
|
75
|
+
"test": "vitest run"
|
|
61
76
|
}
|
|
62
|
-
}
|
|
77
|
+
}
|