@noodleseed/one 0.88.0 → 0.89.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/commands/catalog-data-account.d.ts.map +1 -1
- package/dist/commands/catalog-data-account.js +26 -0
- package/dist/commands/catalog-data-account.js.map +1 -1
- package/dist/commands/feedback-ops.d.ts.map +1 -1
- package/dist/commands/feedback-ops.js +43 -1
- package/dist/commands/feedback-ops.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js +6 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/app.js +3 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js +5 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent-decision.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent-decision.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent-decision.js +88 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent-decision.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js +3 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js +30 -42
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +5 -0
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js +14 -0
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.d.ts +2 -5
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-human.d.ts +10 -4
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-human.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-human.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/workos-logout.d.ts +12 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos-logout.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos-logout.js +52 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos-logout.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos-session.d.ts +24 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos-session.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos-session.js +83 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos-session.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/workos.d.ts +7 -9
- package/node_modules/@noodle-borg/service/dist/oauth/workos.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/workos.js +13 -1
- package/node_modules/@noodle-borg/service/dist/oauth/workos.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/feedback.js +18 -0
- package/node_modules/@noodle-borg/service/dist/routes/feedback.js.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/feedback.d.ts +9 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/feedback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/feedback.js +18 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/feedback.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,14 @@ export type UpstreamHumanProvider = 'google' | 'workos';
|
|
|
3
3
|
export interface UpstreamAuthorizationOptions {
|
|
4
4
|
readonly forceAuthentication?: boolean;
|
|
5
5
|
}
|
|
6
|
+
export interface UpstreamHumanAuthentication extends UpstreamHumanIdentity {
|
|
7
|
+
readonly locale?: string;
|
|
8
|
+
readonly timeZone?: string;
|
|
9
|
+
readonly upstreamSession?: {
|
|
10
|
+
readonly provider: 'workos';
|
|
11
|
+
readonly id: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
6
14
|
/**
|
|
7
15
|
* The OAuth-facing federation boundary. Implementations receive an authorization code and return identity
|
|
8
16
|
* claims only: upstream access and refresh credentials are deliberately discarded at this boundary.
|
|
@@ -11,10 +19,8 @@ export interface UpstreamHumanOAuthAuthenticator {
|
|
|
11
19
|
readonly provider: UpstreamHumanProvider;
|
|
12
20
|
readonly realm: string;
|
|
13
21
|
authorizationUrl(state: string, options?: UpstreamAuthorizationOptions): URL;
|
|
14
|
-
exchange(code: string): Promise<
|
|
15
|
-
|
|
16
|
-
readonly timeZone?: string;
|
|
17
|
-
}>;
|
|
22
|
+
exchange(code: string): Promise<UpstreamHumanAuthentication>;
|
|
23
|
+
sessionLogoutUrl?(sessionId: string, returnTo: string): URL;
|
|
18
24
|
}
|
|
19
25
|
export interface UpstreamHumanRollout {
|
|
20
26
|
readonly workosPercentage: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-human.d.ts","sourceRoot":"","sources":["../../src/oauth/upstream-human.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,GAAG,CAAC;IAC7E,QAAQ,
|
|
1
|
+
{"version":3,"file":"upstream-human.d.ts","sourceRoot":"","sources":["../../src/oauth/upstream-human.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,GAAG,CAAC;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7D,gBAAgB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7D;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,gGAAgG;IAChG,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,+BAA+B,CAAC,EAAE,OAAO,CAAC;CACpD;AAED,eAAO,MAAM,4BAA4B,EAAE,oBAK1C,CAAC;AAEF,8GAA8G;AAC9G,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,EACvE,OAAO,GAAE,oBAAmD,GAC3D,qBAAqB,CAavB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-human.js","sourceRoot":"","sources":["../../src/oauth/upstream-human.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"upstream-human.js","sourceRoot":"","sources":["../../src/oauth/upstream-human.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0CzC,MAAM,CAAC,MAAM,4BAA4B,GAAyB;IAChE,gBAAgB,EAAE,CAAC;IACnB,qBAAqB,EAAE,EAAE;IACzB,uBAAuB,EAAE,EAAE;IAC3B,+BAA+B,EAAE,KAAK;CACvC,CAAC;AAEF,8GAA8G;AAC9G,MAAM,UAAU,2BAA2B,CACzC,KAAuE,EACvE,UAAgC,4BAA4B;IAE5D,IAAI,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACxF,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,IAAI,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5E,IAAI,OAAO,CAAC,gBAAgB,IAAI,GAAG;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;SAChC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;SACrD,MAAM,EAAE,CAAC;IACZ,mGAAmG;IACnG,+FAA+F;IAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC;IACnE,OAAO,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SigningKeyProvider } from '@noodle-borg/auth';
|
|
2
|
+
import type { Request, Response } from 'express';
|
|
3
|
+
import type { UpstreamHumanOAuthAuthenticator } from './upstream-human.js';
|
|
4
|
+
export declare function handleWorkOSSessionLogout(input: {
|
|
5
|
+
readonly req: Request;
|
|
6
|
+
readonly res: Response;
|
|
7
|
+
readonly issuer: string;
|
|
8
|
+
readonly signer: SigningKeyProvider;
|
|
9
|
+
readonly workos?: UpstreamHumanOAuthAuthenticator;
|
|
10
|
+
readonly returnTo?: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=workos-logout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workos-logout.d.ts","sourceRoot":"","sources":["../../src/oauth/workos-logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAQ3E,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,+BAA+B,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { expireWorkOSSessionCookies, verifyWorkOSSessionHandle, WORKOS_SESSION_COOKIE_LOOPBACK, WORKOS_SESSION_COOKIE_SECURE, } from './workos-session.js';
|
|
2
|
+
export async function handleWorkOSSessionLogout(input) {
|
|
3
|
+
input.res.setHeader('Cache-Control', 'no-store');
|
|
4
|
+
input.res.setHeader('Referrer-Policy', 'no-referrer');
|
|
5
|
+
if (input.workos?.sessionLogoutUrl === undefined || input.returnTo === undefined) {
|
|
6
|
+
input.res.status(404).json({ error: 'not_found' });
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const handle = workOSSessionHandle(input.req.headers.cookie);
|
|
10
|
+
expireWorkOSSessionCookies(input.res);
|
|
11
|
+
if (handle === undefined) {
|
|
12
|
+
input.res.redirect(302, input.returnTo);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let sessionId;
|
|
16
|
+
try {
|
|
17
|
+
sessionId = await verifyWorkOSSessionHandle({
|
|
18
|
+
handle,
|
|
19
|
+
signer: input.signer,
|
|
20
|
+
issuer: input.issuer,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
input.res.redirect(302, input.returnTo);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
input.res.redirect(302, input.workos.sessionLogoutUrl(sessionId, input.returnTo).href);
|
|
28
|
+
}
|
|
29
|
+
function workOSSessionHandle(cookieHeader) {
|
|
30
|
+
if (cookieHeader === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
const values = new Map();
|
|
33
|
+
for (const pair of cookieHeader.split(';')) {
|
|
34
|
+
const separator = pair.indexOf('=');
|
|
35
|
+
if (separator <= 0)
|
|
36
|
+
continue;
|
|
37
|
+
const name = pair.slice(0, separator).trim();
|
|
38
|
+
if (name !== WORKOS_SESSION_COOKIE_SECURE && name !== WORKOS_SESSION_COOKIE_LOOPBACK)
|
|
39
|
+
continue;
|
|
40
|
+
const value = pair.slice(separator + 1).trim();
|
|
41
|
+
values.set(name, [...(values.get(name) ?? []), value]);
|
|
42
|
+
}
|
|
43
|
+
for (const name of [WORKOS_SESSION_COOKIE_SECURE, WORKOS_SESSION_COOKIE_LOOPBACK]) {
|
|
44
|
+
const found = values.get(name);
|
|
45
|
+
if (found?.length === 1 && found[0]?.length !== 0)
|
|
46
|
+
return found[0];
|
|
47
|
+
if (found !== undefined)
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=workos-logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workos-logout.js","sourceRoot":"","sources":["../../src/oauth/workos-logout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SigningKeyProvider } from '@noodle-borg/auth';
|
|
2
|
+
import type { Response } from 'express';
|
|
3
|
+
export declare const WORKOS_SESSION_COOKIE_SECURE = "__Host-ns_workos_session";
|
|
4
|
+
export declare const WORKOS_SESSION_COOKIE_LOOPBACK = "ns_workos_session";
|
|
5
|
+
export declare function extractWorkOSSessionId(accessToken: string): string;
|
|
6
|
+
export declare function requireWorkOSSessionId(value: unknown): string;
|
|
7
|
+
export declare function signWorkOSSessionHandle(input: {
|
|
8
|
+
readonly sessionId: string;
|
|
9
|
+
readonly signer: SigningKeyProvider;
|
|
10
|
+
readonly issuer: string;
|
|
11
|
+
readonly ttlSeconds?: number;
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
export declare function verifyWorkOSSessionHandle(input: {
|
|
14
|
+
readonly handle: string;
|
|
15
|
+
readonly signer: SigningKeyProvider;
|
|
16
|
+
readonly issuer: string;
|
|
17
|
+
}): Promise<string>;
|
|
18
|
+
export declare function setWorkOSSessionCookie(input: {
|
|
19
|
+
readonly res: Response;
|
|
20
|
+
readonly issuer: string;
|
|
21
|
+
readonly handle: string;
|
|
22
|
+
}): void;
|
|
23
|
+
export declare function expireWorkOSSessionCookies(res: Response): void;
|
|
24
|
+
//# sourceMappingURL=workos-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workos-session.d.ts","sourceRoot":"","sources":["../../src/oauth/workos-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,eAAO,MAAM,8BAA8B,sBAAsB,CAAC;AAOlE,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAiBlE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAS7D;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlB;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GAAG,IAAI,CAcP;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAS9D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { jwtVerify, SignJWT } from 'jose';
|
|
3
|
+
export const WORKOS_SESSION_COOKIE_SECURE = '__Host-ns_workos_session';
|
|
4
|
+
export const WORKOS_SESSION_COOKIE_LOOPBACK = 'ns_workos_session';
|
|
5
|
+
const WORKOS_SESSION_HANDLE_KIND = 'workos-session-logout';
|
|
6
|
+
const WORKOS_SESSION_MAX_AGE_SECONDS = 14 * 24 * 60 * 60;
|
|
7
|
+
const WORKOS_SESSION_ID_PATTERN = /^session_[!-~]+$/;
|
|
8
|
+
const WORKOS_SESSION_ID_MAX_LENGTH = 200;
|
|
9
|
+
export function extractWorkOSSessionId(accessToken) {
|
|
10
|
+
try {
|
|
11
|
+
const segments = accessToken.split('.');
|
|
12
|
+
const payloadSegment = segments[1];
|
|
13
|
+
if (segments.length !== 3 || payloadSegment === undefined || payloadSegment.length === 0) {
|
|
14
|
+
throw new Error('invalid JWT');
|
|
15
|
+
}
|
|
16
|
+
const payloadJson = Buffer.from(payloadSegment, 'base64url').toString('utf8');
|
|
17
|
+
if ((payloadJson.match(/"sid"\s*:/g) ?? []).length !== 1)
|
|
18
|
+
throw new Error('invalid sid count');
|
|
19
|
+
const payload = JSON.parse(payloadJson);
|
|
20
|
+
if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
21
|
+
throw new Error('invalid JWT payload');
|
|
22
|
+
}
|
|
23
|
+
return requireWorkOSSessionId(payload.sid);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
throw new Error('WorkOS session ID is invalid');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function requireWorkOSSessionId(value) {
|
|
30
|
+
if (typeof value !== 'string' ||
|
|
31
|
+
value.length > WORKOS_SESSION_ID_MAX_LENGTH ||
|
|
32
|
+
!WORKOS_SESSION_ID_PATTERN.test(value)) {
|
|
33
|
+
throw new Error('WorkOS session ID is invalid');
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
export async function signWorkOSSessionHandle(input) {
|
|
38
|
+
const key = await input.signer.signingKey();
|
|
39
|
+
const ttlSeconds = Math.min(input.ttlSeconds ?? WORKOS_SESSION_MAX_AGE_SECONDS, WORKOS_SESSION_MAX_AGE_SECONDS);
|
|
40
|
+
if (!Number.isSafeInteger(ttlSeconds) || ttlSeconds <= 0) {
|
|
41
|
+
throw new Error('WorkOS session handle TTL is invalid');
|
|
42
|
+
}
|
|
43
|
+
return new SignJWT({
|
|
44
|
+
kind: WORKOS_SESSION_HANDLE_KIND,
|
|
45
|
+
sessionId: requireWorkOSSessionId(input.sessionId),
|
|
46
|
+
})
|
|
47
|
+
.setProtectedHeader({ alg: key.alg, kid: key.kid })
|
|
48
|
+
.setIssuer(input.issuer)
|
|
49
|
+
.setIssuedAt()
|
|
50
|
+
.setExpirationTime(`${ttlSeconds}s`)
|
|
51
|
+
.sign(key.privateKey);
|
|
52
|
+
}
|
|
53
|
+
export async function verifyWorkOSSessionHandle(input) {
|
|
54
|
+
const getKey = await input.signer.verifierKey();
|
|
55
|
+
const { payload } = await jwtVerify(input.handle, getKey, { issuer: input.issuer });
|
|
56
|
+
if (payload.kind !== WORKOS_SESSION_HANDLE_KIND) {
|
|
57
|
+
throw new Error('WorkOS session handle is invalid');
|
|
58
|
+
}
|
|
59
|
+
return requireWorkOSSessionId(payload.sessionId);
|
|
60
|
+
}
|
|
61
|
+
export function setWorkOSSessionCookie(input) {
|
|
62
|
+
const issuer = new URL(input.issuer);
|
|
63
|
+
const secure = issuer.protocol === 'https:';
|
|
64
|
+
if (!secure && !isLoopbackHostname(issuer.hostname)) {
|
|
65
|
+
throw new Error('WorkOS session cookie requires HTTPS or loopback');
|
|
66
|
+
}
|
|
67
|
+
const name = secure ? WORKOS_SESSION_COOKIE_SECURE : WORKOS_SESSION_COOKIE_LOOPBACK;
|
|
68
|
+
input.res.append('Set-Cookie', serializeCookie(name, input.handle, {
|
|
69
|
+
maxAge: WORKOS_SESSION_MAX_AGE_SECONDS,
|
|
70
|
+
secure,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
export function expireWorkOSSessionCookies(res) {
|
|
74
|
+
res.append('Set-Cookie', serializeCookie(WORKOS_SESSION_COOKIE_SECURE, '', { maxAge: 0, secure: true }));
|
|
75
|
+
res.append('Set-Cookie', serializeCookie(WORKOS_SESSION_COOKIE_LOOPBACK, '', { maxAge: 0, secure: false }));
|
|
76
|
+
}
|
|
77
|
+
function serializeCookie(name, value, input) {
|
|
78
|
+
return `${name}=${value}; Path=/; Max-Age=${input.maxAge}; HttpOnly;${input.secure ? ' Secure;' : ''} SameSite=Lax`;
|
|
79
|
+
}
|
|
80
|
+
function isLoopbackHostname(hostname) {
|
|
81
|
+
return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]';
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=workos-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workos-session.js","sourceRoot":"","sources":["../../src/oauth/workos-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { UpstreamAuthorizationOptions, UpstreamHumanOAuthAuthenticator } from './upstream-human.js';
|
|
1
|
+
import type { UpstreamAuthorizationOptions, UpstreamHumanAuthentication, UpstreamHumanOAuthAuthenticator } from './upstream-human.js';
|
|
2
2
|
export interface WorkOSUser {
|
|
3
3
|
readonly id: string;
|
|
4
4
|
readonly email: string;
|
|
@@ -15,6 +15,10 @@ export interface WorkOSUserManagementClient {
|
|
|
15
15
|
readonly maxAge?: number;
|
|
16
16
|
readonly prompt?: string;
|
|
17
17
|
}): string;
|
|
18
|
+
getLogoutUrl(input: {
|
|
19
|
+
readonly sessionId: string;
|
|
20
|
+
readonly returnTo?: string;
|
|
21
|
+
}): string;
|
|
18
22
|
authenticateWithCode(input: {
|
|
19
23
|
readonly code: string;
|
|
20
24
|
readonly clientId: string;
|
|
@@ -55,13 +59,7 @@ export declare class WorkOSHumanAuthenticator implements UpstreamHumanOAuthAuthe
|
|
|
55
59
|
readonly realm: string;
|
|
56
60
|
constructor(config: WorkOSHumanAuthenticatorConfig, userManagement?: WorkOSUserManagementClient);
|
|
57
61
|
authorizationUrl(state: string, options?: UpstreamAuthorizationOptions): URL;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
readonly realm: string;
|
|
61
|
-
readonly subject: string;
|
|
62
|
-
readonly email: string;
|
|
63
|
-
readonly emailVerified: boolean;
|
|
64
|
-
readonly locale?: string;
|
|
65
|
-
}>;
|
|
62
|
+
sessionLogoutUrl(sessionId: string, returnTo: string): URL;
|
|
63
|
+
exchange(code: string): Promise<UpstreamHumanAuthentication>;
|
|
66
64
|
}
|
|
67
65
|
//# sourceMappingURL=workos.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workos.d.ts","sourceRoot":"","sources":["../../src/oauth/workos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"workos.d.ts","sourceRoot":"","sources":["../../src/oauth/workos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { WorkOS } from '@workos-inc/node';
|
|
2
|
+
import { extractWorkOSSessionId, requireWorkOSSessionId } from './workos-session.js';
|
|
2
3
|
/**
|
|
3
4
|
* Validates the optional WorkOS unit as one all-or-nothing production setting. Constructing the SDK is local;
|
|
4
5
|
* no WorkOS network request is made during service boot.
|
|
@@ -49,8 +50,14 @@ export class WorkOSHumanAuthenticator {
|
|
|
49
50
|
...(forceAuthentication ? { prompt: 'login', maxAge: 0 } : {}),
|
|
50
51
|
}));
|
|
51
52
|
}
|
|
53
|
+
sessionLogoutUrl(sessionId, returnTo) {
|
|
54
|
+
return new URL(this.#userManagement.getLogoutUrl({
|
|
55
|
+
sessionId: requireWorkOSSessionId(sessionId),
|
|
56
|
+
returnTo,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
52
59
|
async exchange(code) {
|
|
53
|
-
const { user, authenticationMethod, impersonator } = await this.#userManagement.authenticateWithCode({
|
|
60
|
+
const { user, accessToken, authenticationMethod, impersonator } = await this.#userManagement.authenticateWithCode({
|
|
54
61
|
code,
|
|
55
62
|
clientId: this.#clientId,
|
|
56
63
|
});
|
|
@@ -62,6 +69,7 @@ export class WorkOSHumanAuthenticator {
|
|
|
62
69
|
}
|
|
63
70
|
const subject = requiredWorkOSIdentityValue('user ID', user.id);
|
|
64
71
|
const email = requiredWorkOSIdentityValue('email', user.email);
|
|
72
|
+
const sessionId = extractWorkOSSessionId(accessToken);
|
|
65
73
|
return {
|
|
66
74
|
provider: 'workos',
|
|
67
75
|
realm: this.#realm,
|
|
@@ -69,6 +77,10 @@ export class WorkOSHumanAuthenticator {
|
|
|
69
77
|
email,
|
|
70
78
|
emailVerified: user.emailVerified,
|
|
71
79
|
...(user.locale !== null ? { locale: user.locale } : {}),
|
|
80
|
+
upstreamSession: {
|
|
81
|
+
provider: 'workos',
|
|
82
|
+
id: sessionId,
|
|
83
|
+
},
|
|
72
84
|
};
|
|
73
85
|
}
|
|
74
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workos.js","sourceRoot":"","sources":["../../src/oauth/workos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"workos.js","sourceRoot":"","sources":["../../src/oauth/workos.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,6 +125,7 @@ function buildFeedbackLabels(submission) {
|
|
|
125
125
|
submission.severity,
|
|
126
126
|
`type:${submission.type}`,
|
|
127
127
|
...(submission.area !== undefined ? [`area:${submission.area}`] : []),
|
|
128
|
+
...(submission.codingAgent !== undefined ? ['feedback:agent-authored'] : []),
|
|
128
129
|
];
|
|
129
130
|
}
|
|
130
131
|
function feedbackTitle(submission) {
|
|
@@ -173,6 +174,19 @@ function buildFeedbackIssueBody(submission, identity, submittedAt) {
|
|
|
173
174
|
...diagnostics.map(([field, value]) => `| ${field} | ${sanitizeLine(value).replaceAll('|', '\\|')} |`),
|
|
174
175
|
'',
|
|
175
176
|
];
|
|
177
|
+
const codingAgentSection = submission.codingAgent === undefined
|
|
178
|
+
? []
|
|
179
|
+
: [
|
|
180
|
+
'## Coding agent (client-reported)',
|
|
181
|
+
'',
|
|
182
|
+
'| Field | Value |',
|
|
183
|
+
'| --- | --- |',
|
|
184
|
+
`| Agent | ${escapeTableValue(submission.codingAgent.name)} |`,
|
|
185
|
+
...(submission.codingAgent.model !== undefined
|
|
186
|
+
? [`| Model | ${escapeTableValue(submission.codingAgent.model)} |`]
|
|
187
|
+
: []),
|
|
188
|
+
'',
|
|
189
|
+
];
|
|
176
190
|
return [
|
|
177
191
|
'## Feedback',
|
|
178
192
|
'',
|
|
@@ -185,9 +199,13 @@ function buildFeedbackIssueBody(submission, identity, submittedAt) {
|
|
|
185
199
|
`- Subject: \`${sanitizeLine(identity.subject)}\``,
|
|
186
200
|
...(identity.email !== undefined ? [`- Email: ${sanitizeLine(identity.email)}`] : []),
|
|
187
201
|
'',
|
|
202
|
+
...codingAgentSection,
|
|
188
203
|
...diagnosticsSection,
|
|
189
204
|
`Submitted via \`noodle feedback\` at ${submittedAt.toISOString()}.`,
|
|
190
205
|
'',
|
|
191
206
|
].join('\n');
|
|
192
207
|
}
|
|
208
|
+
function escapeTableValue(value) {
|
|
209
|
+
return sanitizeLine(value).replaceAll('|', '\\|');
|
|
210
|
+
}
|
|
193
211
|
//# sourceMappingURL=feedback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/routes/feedback.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/routes/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* CLI (`noodle feedback`, often driven by the customer's coding agent) and filed by the service as
|
|
4
4
|
* a labeled issue in the private feedback repo. Both sides parse with these schemas: the CLI
|
|
5
5
|
* validates before sending, the service re-validates as untrusted input. The GitHub label set is
|
|
6
|
-
* constructed server-side from
|
|
6
|
+
* constructed server-side from validated fields only — callers can never inject label strings.
|
|
7
7
|
*/
|
|
8
8
|
import { z } from 'zod';
|
|
9
9
|
/**
|
|
@@ -19,6 +19,10 @@ export declare const FEEDBACK_MESSAGE_MIN = 1;
|
|
|
19
19
|
export declare const FEEDBACK_MESSAGE_MAX = 4000;
|
|
20
20
|
export declare const FEEDBACK_TITLE_MIN = 1;
|
|
21
21
|
export declare const FEEDBACK_TITLE_MAX = 120;
|
|
22
|
+
export declare const FEEDBACK_AGENT_NAME_MIN = 1;
|
|
23
|
+
export declare const FEEDBACK_AGENT_NAME_MAX = 64;
|
|
24
|
+
export declare const FEEDBACK_AGENT_MODEL_MIN = 1;
|
|
25
|
+
export declare const FEEDBACK_AGENT_MODEL_MAX = 64;
|
|
22
26
|
export declare const FEEDBACK_TYPE_DEFAULT = "feat";
|
|
23
27
|
export declare const FEEDBACK_SEVERITY_DEFAULT = "P3";
|
|
24
28
|
/** The `POST /v1/feedback` request body. Untrusted input: strict, clamped, enum-allowlisted. */
|
|
@@ -55,6 +59,10 @@ export declare const FeedbackSubmissionSchema: z.ZodObject<{
|
|
|
55
59
|
enterprise: "enterprise";
|
|
56
60
|
policy: "policy";
|
|
57
61
|
}>>;
|
|
62
|
+
codingAgent: z.ZodOptional<z.ZodObject<{
|
|
63
|
+
name: z.ZodString;
|
|
64
|
+
model: z.ZodOptional<z.ZodString>;
|
|
65
|
+
}, z.core.$strict>>;
|
|
58
66
|
diagnostics: z.ZodDefault<z.ZodObject<{
|
|
59
67
|
cliVersion: z.ZodOptional<z.ZodString>;
|
|
60
68
|
platform: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,cAAc,sMAiBjB,CAAC;AAEX,gFAAgF;AAChF,eAAO,MAAM,cAAc,2CAA4C,CAAC;AAExE,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,mCAAoC,CAAC;AAErE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAC5C,eAAO,MAAM,yBAAyB,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,cAAc,sMAiBjB,CAAC;AAEX,gFAAgF;AAChF,eAAO,MAAM,cAAc,2CAA4C,CAAC;AAExE,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,mCAAoC,CAAC;AAErE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAC5C,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAU9C,gGAAgG;AAChG,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2B1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,qGAAqG;AACrG,eAAO,MAAM,sBAAsB;;;;;;kBAUxB,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,6GAKvB,CAAC;AAEX,oEAAoE;AACpE,eAAO,MAAM,2BAA2B;;;;;;;;kBAK7B,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* CLI (`noodle feedback`, often driven by the customer's coding agent) and filed by the service as
|
|
4
4
|
* a labeled issue in the private feedback repo. Both sides parse with these schemas: the CLI
|
|
5
5
|
* validates before sending, the service re-validates as untrusted input. The GitHub label set is
|
|
6
|
-
* constructed server-side from
|
|
6
|
+
* constructed server-side from validated fields only — callers can never inject label strings.
|
|
7
7
|
*/
|
|
8
8
|
import { z } from 'zod';
|
|
9
9
|
/**
|
|
@@ -36,8 +36,18 @@ export const FEEDBACK_MESSAGE_MIN = 1;
|
|
|
36
36
|
export const FEEDBACK_MESSAGE_MAX = 4000;
|
|
37
37
|
export const FEEDBACK_TITLE_MIN = 1;
|
|
38
38
|
export const FEEDBACK_TITLE_MAX = 120;
|
|
39
|
+
export const FEEDBACK_AGENT_NAME_MIN = 1;
|
|
40
|
+
export const FEEDBACK_AGENT_NAME_MAX = 64;
|
|
41
|
+
export const FEEDBACK_AGENT_MODEL_MIN = 1;
|
|
42
|
+
export const FEEDBACK_AGENT_MODEL_MAX = 64;
|
|
39
43
|
export const FEEDBACK_TYPE_DEFAULT = 'feat';
|
|
40
44
|
export const FEEDBACK_SEVERITY_DEFAULT = 'P3';
|
|
45
|
+
const feedbackAgentValue = (minimum, maximum) => z
|
|
46
|
+
.string()
|
|
47
|
+
.regex(/^[^\r\n]+$/, 'must be one line')
|
|
48
|
+
.trim()
|
|
49
|
+
.min(minimum)
|
|
50
|
+
.max(maximum);
|
|
41
51
|
/** The `POST /v1/feedback` request body. Untrusted input: strict, clamped, enum-allowlisted. */
|
|
42
52
|
export const FeedbackSubmissionSchema = z
|
|
43
53
|
.object({
|
|
@@ -50,6 +60,13 @@ export const FeedbackSubmissionSchema = z
|
|
|
50
60
|
.pipe(z.enum(FEEDBACK_SEVERITIES))
|
|
51
61
|
.default(FEEDBACK_SEVERITY_DEFAULT),
|
|
52
62
|
area: z.enum(FEEDBACK_AREAS).optional(),
|
|
63
|
+
codingAgent: z
|
|
64
|
+
.object({
|
|
65
|
+
name: feedbackAgentValue(FEEDBACK_AGENT_NAME_MIN, FEEDBACK_AGENT_NAME_MAX),
|
|
66
|
+
model: feedbackAgentValue(FEEDBACK_AGENT_MODEL_MIN, FEEDBACK_AGENT_MODEL_MAX).optional(),
|
|
67
|
+
})
|
|
68
|
+
.strict()
|
|
69
|
+
.optional(),
|
|
53
70
|
diagnostics: z
|
|
54
71
|
.object({
|
|
55
72
|
cliVersion: z.string().max(64).optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noodleseed/one",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.89.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Noodle CLI by Noodle Seed — author, run, and deploy declarative MCP servers. Embedding the assistant in your own web app is @noodleseed/assistant.",
|
|
6
6
|
"license": "Apache-2.0",
|