@relaycast/engine 5.0.0 → 5.0.2
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/adapters/node/index.d.ts.map +1 -1
- package/dist/adapters/node/index.js +0 -1
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/adapters/node/realtime.d.ts +13 -41
- package/dist/adapters/node/realtime.d.ts.map +1 -1
- package/dist/adapters/node/realtime.js +68 -230
- package/dist/adapters/node/realtime.js.map +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +31 -9
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/tokenKind.d.ts +40 -0
- package/dist/auth/tokenKind.d.ts.map +1 -0
- package/dist/auth/tokenKind.js +89 -0
- package/dist/auth/tokenKind.js.map +1 -0
- package/dist/db/migrations/0025_node_kind_role_adapter.sql +45 -0
- package/dist/db/migrations/0026_observer_tokens.sql +32 -0
- package/dist/db/schema.d.ts +329 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +32 -3
- package/dist/db/schema.js.map +1 -1
- package/dist/engine/action.d.ts +2 -2
- package/dist/engine/action.d.ts.map +1 -1
- package/dist/engine/action.js +182 -7
- package/dist/engine/action.js.map +1 -1
- package/dist/engine/activity.d.ts +6 -0
- package/dist/engine/activity.d.ts.map +1 -1
- package/dist/engine/activity.js +9 -2
- package/dist/engine/activity.js.map +1 -1
- package/dist/engine/agent.d.ts +0 -33
- package/dist/engine/agent.d.ts.map +1 -1
- package/dist/engine/agent.js +0 -155
- package/dist/engine/agent.js.map +1 -1
- package/dist/engine/attachments.d.ts +6 -0
- package/dist/engine/attachments.d.ts.map +1 -1
- package/dist/engine/attachments.js +37 -0
- package/dist/engine/attachments.js.map +1 -1
- package/dist/engine/console.d.ts +78 -1
- package/dist/engine/console.d.ts.map +1 -1
- package/dist/engine/console.js +175 -19
- package/dist/engine/console.js.map +1 -1
- package/dist/engine/delivery.d.ts +2 -0
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +4 -0
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/deliveryWire.d.ts +4 -0
- package/dist/engine/deliveryWire.d.ts.map +1 -1
- package/dist/engine/deliveryWire.js +2 -0
- package/dist/engine/deliveryWire.js.map +1 -1
- package/dist/engine/deliveryWrites.d.ts +1 -0
- package/dist/engine/deliveryWrites.d.ts.map +1 -1
- package/dist/engine/deliveryWrites.js +7 -2
- package/dist/engine/deliveryWrites.js.map +1 -1
- package/dist/engine/dm.d.ts.map +1 -1
- package/dist/engine/dm.js +11 -33
- package/dist/engine/dm.js.map +1 -1
- package/dist/engine/dmAll.d.ts.map +1 -1
- package/dist/engine/dmAll.js +2 -0
- package/dist/engine/dmAll.js.map +1 -1
- package/dist/engine/groupDm.d.ts +2 -3
- package/dist/engine/groupDm.d.ts.map +1 -1
- package/dist/engine/groupDm.js +8 -26
- package/dist/engine/groupDm.js.map +1 -1
- package/dist/engine/invocationCompletion.d.ts +1 -1
- package/dist/engine/invocationCompletion.d.ts.map +1 -1
- package/dist/engine/invocationCompletion.js +9 -2
- package/dist/engine/invocationCompletion.js.map +1 -1
- package/dist/engine/message.d.ts.map +1 -1
- package/dist/engine/message.js +15 -44
- package/dist/engine/message.js.map +1 -1
- package/dist/engine/node.d.ts +13 -1
- package/dist/engine/node.d.ts.map +1 -1
- package/dist/engine/node.js +100 -31
- package/dist/engine/node.js.map +1 -1
- package/dist/engine/nodeContext.d.ts +6 -1
- package/dist/engine/nodeContext.d.ts.map +1 -1
- package/dist/engine/nodeContext.js +47 -32
- package/dist/engine/nodeContext.js.map +1 -1
- package/dist/engine/nodeDeliver.d.ts +23 -0
- package/dist/engine/nodeDeliver.d.ts.map +1 -0
- package/dist/engine/nodeDeliver.js +81 -0
- package/dist/engine/nodeDeliver.js.map +1 -0
- package/dist/engine/observerToken.d.ts +110 -0
- package/dist/engine/observerToken.d.ts.map +1 -0
- package/dist/engine/observerToken.js +528 -0
- package/dist/engine/observerToken.js.map +1 -0
- package/dist/engine/search.d.ts +4 -0
- package/dist/engine/search.d.ts.map +1 -1
- package/dist/engine/search.js +6 -1
- package/dist/engine/search.js.map +1 -1
- package/dist/engine/thread.d.ts +4 -3
- package/dist/engine/thread.d.ts.map +1 -1
- package/dist/engine/thread.js +8 -0
- package/dist/engine/thread.js.map +1 -1
- package/dist/engine/wsAuth.d.ts +2 -6
- package/dist/engine/wsAuth.d.ts.map +1 -1
- package/dist/engine/wsAuth.js +20 -12
- package/dist/engine/wsAuth.js.map +1 -1
- package/dist/engine/wsTransform.d.ts.map +1 -1
- package/dist/engine/wsTransform.js +52 -36
- package/dist/engine/wsTransform.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +4 -26
- package/dist/engine.js.map +1 -1
- package/dist/entrypoints/node.d.ts.map +1 -1
- package/dist/entrypoints/node.js +1 -14
- package/dist/entrypoints/node.js.map +1 -1
- package/dist/env.d.ts +3 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts +8 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +62 -0
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/logger.d.ts.map +1 -1
- package/dist/middleware/logger.js +4 -4
- package/dist/middleware/logger.js.map +1 -1
- package/dist/middleware/planLimits.d.ts.map +1 -1
- package/dist/middleware/planLimits.js +9 -2
- package/dist/middleware/planLimits.js.map +1 -1
- package/dist/middleware/rateLimit.d.ts.map +1 -1
- package/dist/middleware/rateLimit.js +13 -1
- package/dist/middleware/rateLimit.js.map +1 -1
- package/dist/middleware/usageTracker.d.ts.map +1 -1
- package/dist/middleware/usageTracker.js +2 -1
- package/dist/middleware/usageTracker.js.map +1 -1
- package/dist/node-reconnect.d.ts +13 -0
- package/dist/node-reconnect.d.ts.map +1 -0
- package/dist/node-reconnect.js +15 -0
- package/dist/node-reconnect.js.map +1 -0
- package/dist/ports/auth.d.ts +6 -2
- package/dist/ports/auth.d.ts.map +1 -1
- package/dist/ports/entitlements.d.ts +3 -1
- package/dist/ports/entitlements.d.ts.map +1 -1
- package/dist/ports/index.d.ts +1 -1
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/presence.d.ts +1 -3
- package/dist/ports/presence.d.ts.map +1 -1
- package/dist/ports/realtime.d.ts +16 -68
- package/dist/ports/realtime.d.ts.map +1 -1
- package/dist/ports/realtime.js +9 -9
- package/dist/providers/static-entitlements.js +4 -4
- package/dist/providers/static-entitlements.js.map +1 -1
- package/dist/routes/action.d.ts.map +1 -1
- package/dist/routes/action.js +13 -5
- package/dist/routes/action.js.map +1 -1
- package/dist/routes/agent.d.ts.map +1 -1
- package/dist/routes/agent.js +107 -51
- package/dist/routes/agent.js.map +1 -1
- package/dist/routes/channel.d.ts.map +1 -1
- package/dist/routes/channel.js +39 -46
- package/dist/routes/channel.js.map +1 -1
- package/dist/routes/console.d.ts.map +1 -1
- package/dist/routes/console.js +39 -9
- package/dist/routes/console.js.map +1 -1
- package/dist/routes/deliveryRouting.d.ts.map +1 -1
- package/dist/routes/deliveryRouting.js +39 -20
- package/dist/routes/deliveryRouting.js.map +1 -1
- package/dist/routes/fanout.d.ts +1 -4
- package/dist/routes/fanout.d.ts.map +1 -1
- package/dist/routes/fanout.js +44 -55
- package/dist/routes/fanout.js.map +1 -1
- package/dist/routes/file.d.ts.map +1 -1
- package/dist/routes/file.js +15 -5
- package/dist/routes/file.js.map +1 -1
- package/dist/routes/inboundWebhook.js +1 -1
- package/dist/routes/inboundWebhook.js.map +1 -1
- package/dist/routes/message.d.ts.map +1 -1
- package/dist/routes/message.js +22 -4
- package/dist/routes/message.js.map +1 -1
- package/dist/routes/node.d.ts.map +1 -1
- package/dist/routes/node.js +61 -10
- package/dist/routes/node.js.map +1 -1
- package/dist/routes/observerToken.d.ts +4 -0
- package/dist/routes/observerToken.d.ts.map +1 -0
- package/dist/routes/observerToken.js +105 -0
- package/dist/routes/observerToken.js.map +1 -0
- package/dist/routes/presence.d.ts.map +1 -1
- package/dist/routes/presence.js +8 -12
- package/dist/routes/presence.js.map +1 -1
- package/dist/routes/reaction.d.ts.map +1 -1
- package/dist/routes/reaction.js +59 -7
- package/dist/routes/reaction.js.map +1 -1
- package/dist/routes/receipt.d.ts.map +1 -1
- package/dist/routes/receipt.js +20 -3
- package/dist/routes/receipt.js.map +1 -1
- package/dist/routes/search.d.ts.map +1 -1
- package/dist/routes/search.js +7 -4
- package/dist/routes/search.js.map +1 -1
- package/dist/routes/thread.d.ts.map +1 -1
- package/dist/routes/thread.js +20 -3
- package/dist/routes/thread.js.map +1 -1
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/routes/workspace.js +20 -7
- package/dist/routes/workspace.js.map +1 -1
- package/package.json +7 -3
- package/dist/engine/resyncQuery.d.ts +0 -15
- package/dist/engine/resyncQuery.d.ts.map +0 -1
- package/dist/engine/resyncQuery.js +0 -125
- package/dist/engine/resyncQuery.js.map +0 -1
package/dist/auth/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { eq } from 'drizzle-orm';
|
|
2
|
-
import { workspaces, agents } from '../db/schema.js';
|
|
2
|
+
import { workspaces, agents, nodes } from '../db/schema.js';
|
|
3
3
|
import { sha256Hex } from '../lib/crypto.js';
|
|
4
|
+
import { getActiveObserverTokenByHash } from '../engine/observerToken.js';
|
|
5
|
+
import { parseAuthToken, validateTokenRequirement } from './tokenKind.js';
|
|
4
6
|
/** SHA-256 hash of a raw token to its stored form. */
|
|
5
7
|
export function hashToken(token) {
|
|
6
8
|
return sha256Hex(token);
|
|
@@ -22,20 +24,22 @@ export class SqliteApiKeyAuthProvider {
|
|
|
22
24
|
}
|
|
23
25
|
async authenticate(args) {
|
|
24
26
|
const { token, require, db } = args;
|
|
27
|
+
const parsedToken = parseAuthToken(token);
|
|
28
|
+
if (!parsedToken) {
|
|
29
|
+
return unauthorized('Invalid token format');
|
|
30
|
+
}
|
|
31
|
+
const requirement = validateTokenRequirement(parsedToken.kind, require);
|
|
32
|
+
if (!requirement.ok) {
|
|
33
|
+
return unauthorized(requirement.message, requirement.code);
|
|
34
|
+
}
|
|
25
35
|
const hash = await hashToken(token);
|
|
26
|
-
if (
|
|
27
|
-
if (require === 'agent') {
|
|
28
|
-
return unauthorized('Agent token required (at_live_...)');
|
|
29
|
-
}
|
|
36
|
+
if (parsedToken.kind === 'workspace') {
|
|
30
37
|
const [workspace] = await db.select().from(workspaces).where(eq(workspaces.apiKeyHash, hash));
|
|
31
38
|
if (!workspace)
|
|
32
39
|
return unauthorized('Invalid API key');
|
|
33
40
|
return { ok: true, workspace };
|
|
34
41
|
}
|
|
35
|
-
if (
|
|
36
|
-
if (require === 'workspace') {
|
|
37
|
-
return unauthorized('Workspace key required (rk_live_...)');
|
|
38
|
-
}
|
|
42
|
+
if (parsedToken.kind === 'agent') {
|
|
39
43
|
const [agent] = await db.select().from(agents).where(eq(agents.tokenHash, hash));
|
|
40
44
|
if (!agent)
|
|
41
45
|
return unauthorized('Invalid agent token', 'agent_token_invalid');
|
|
@@ -44,6 +48,24 @@ export class SqliteApiKeyAuthProvider {
|
|
|
44
48
|
return unauthorized('Workspace not found');
|
|
45
49
|
return { ok: true, workspace, agent };
|
|
46
50
|
}
|
|
51
|
+
if (parsedToken.kind === 'node') {
|
|
52
|
+
const [node] = await db.select().from(nodes).where(eq(nodes.tokenHash, hash));
|
|
53
|
+
if (!node)
|
|
54
|
+
return unauthorized('Invalid node token', 'node_token_invalid');
|
|
55
|
+
const [workspace] = await db.select().from(workspaces).where(eq(workspaces.id, node.workspaceId));
|
|
56
|
+
if (!workspace)
|
|
57
|
+
return unauthorized('Workspace not found');
|
|
58
|
+
return { ok: true, workspace, node };
|
|
59
|
+
}
|
|
60
|
+
if (parsedToken.kind === 'observer') {
|
|
61
|
+
const observerToken = await getActiveObserverTokenByHash(db, hash);
|
|
62
|
+
if (!observerToken)
|
|
63
|
+
return unauthorized('Invalid observer token', 'observer_token_invalid');
|
|
64
|
+
const [workspace] = await db.select().from(workspaces).where(eq(workspaces.id, observerToken.workspaceId));
|
|
65
|
+
if (!workspace)
|
|
66
|
+
return unauthorized('Workspace not found');
|
|
67
|
+
return { ok: true, workspace, observerToken };
|
|
68
|
+
}
|
|
47
69
|
return unauthorized('Invalid token format');
|
|
48
70
|
}
|
|
49
71
|
}
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AuthRequire } from '../ports/auth.js';
|
|
3
|
+
declare const tokenKindConfig: {
|
|
4
|
+
readonly workspace: {
|
|
5
|
+
readonly prefix: "rk_live_";
|
|
6
|
+
readonly requiredMessage: "Workspace key required (rk_live_...)";
|
|
7
|
+
};
|
|
8
|
+
readonly agent: {
|
|
9
|
+
readonly prefix: "at_live_";
|
|
10
|
+
readonly requiredMessage: "Agent token required (at_live_...)";
|
|
11
|
+
};
|
|
12
|
+
readonly node: {
|
|
13
|
+
readonly prefix: "nt_live_";
|
|
14
|
+
readonly requiredMessage: "Node token required (nt_live_...)";
|
|
15
|
+
};
|
|
16
|
+
readonly observer: {
|
|
17
|
+
readonly prefix: "ot_live_";
|
|
18
|
+
readonly requiredMessage: "Observer token required (ot_live_...)";
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type AuthTokenKind = keyof typeof tokenKindConfig;
|
|
22
|
+
type ParsedTokenFor<Kind extends AuthTokenKind> = {
|
|
23
|
+
kind: Kind;
|
|
24
|
+
token: string;
|
|
25
|
+
};
|
|
26
|
+
export declare const authTokenSchema: z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<ParsedTokenFor<"workspace">, string>>, z.ZodPipe<z.ZodString, z.ZodTransform<ParsedTokenFor<"agent">, string>>, z.ZodPipe<z.ZodString, z.ZodTransform<ParsedTokenFor<"node">, string>>, z.ZodPipe<z.ZodString, z.ZodTransform<ParsedTokenFor<"observer">, string>>]>;
|
|
27
|
+
export type ParsedAuthToken = z.infer<typeof authTokenSchema>;
|
|
28
|
+
export declare function parseAuthToken(token: string): ParsedAuthToken | undefined;
|
|
29
|
+
export declare function getAuthTokenKind(token: string): AuthTokenKind | undefined;
|
|
30
|
+
export declare function requiredTokenMessage(kind: Exclude<AuthRequire, 'any'>): string;
|
|
31
|
+
export type AuthRequirementValidation = {
|
|
32
|
+
ok: true;
|
|
33
|
+
} | {
|
|
34
|
+
ok: false;
|
|
35
|
+
code: string;
|
|
36
|
+
message: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function validateTokenRequirement(tokenKind: AuthTokenKind, require: AuthRequire): AuthRequirementValidation;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=tokenKind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenKind.d.ts","sourceRoot":"","sources":["../../src/auth/tokenKind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;CAiBX,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,eAAe,CAAC;AAEzD,KAAK,cAAc,CAAC,IAAI,SAAS,aAAa,IAAI;IAChD,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsBF,eAAO,MAAM,eAAe,iUAK1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAGzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEzE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,MAAM,CAE9E;AAYD,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,GACnB,yBAAyB,CA+B3B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const tokenKindConfig = {
|
|
3
|
+
workspace: {
|
|
4
|
+
prefix: 'rk_live_',
|
|
5
|
+
requiredMessage: 'Workspace key required (rk_live_...)',
|
|
6
|
+
},
|
|
7
|
+
agent: {
|
|
8
|
+
prefix: 'at_live_',
|
|
9
|
+
requiredMessage: 'Agent token required (at_live_...)',
|
|
10
|
+
},
|
|
11
|
+
node: {
|
|
12
|
+
prefix: 'nt_live_',
|
|
13
|
+
requiredMessage: 'Node token required (nt_live_...)',
|
|
14
|
+
},
|
|
15
|
+
observer: {
|
|
16
|
+
prefix: 'ot_live_',
|
|
17
|
+
requiredMessage: 'Observer token required (ot_live_...)',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
const workspaceTokenSchema = z
|
|
21
|
+
.string()
|
|
22
|
+
.startsWith(tokenKindConfig.workspace.prefix)
|
|
23
|
+
.transform((token) => ({ kind: 'workspace', token }));
|
|
24
|
+
const agentTokenSchema = z
|
|
25
|
+
.string()
|
|
26
|
+
.startsWith(tokenKindConfig.agent.prefix)
|
|
27
|
+
.transform((token) => ({ kind: 'agent', token }));
|
|
28
|
+
const nodeTokenSchema = z
|
|
29
|
+
.string()
|
|
30
|
+
.startsWith(tokenKindConfig.node.prefix)
|
|
31
|
+
.transform((token) => ({ kind: 'node', token }));
|
|
32
|
+
const observerTokenSchema = z
|
|
33
|
+
.string()
|
|
34
|
+
.startsWith(tokenKindConfig.observer.prefix)
|
|
35
|
+
.transform((token) => ({ kind: 'observer', token }));
|
|
36
|
+
export const authTokenSchema = z.union([
|
|
37
|
+
workspaceTokenSchema,
|
|
38
|
+
agentTokenSchema,
|
|
39
|
+
nodeTokenSchema,
|
|
40
|
+
observerTokenSchema,
|
|
41
|
+
]);
|
|
42
|
+
export function parseAuthToken(token) {
|
|
43
|
+
const parsed = authTokenSchema.safeParse(token);
|
|
44
|
+
return parsed.success ? parsed.data : undefined;
|
|
45
|
+
}
|
|
46
|
+
export function getAuthTokenKind(token) {
|
|
47
|
+
return parseAuthToken(token)?.kind;
|
|
48
|
+
}
|
|
49
|
+
export function requiredTokenMessage(kind) {
|
|
50
|
+
return tokenKindConfig[kind].requiredMessage;
|
|
51
|
+
}
|
|
52
|
+
const allowedKindsByRequire = {
|
|
53
|
+
workspace: ['workspace'],
|
|
54
|
+
agent: ['agent'],
|
|
55
|
+
node: ['node'],
|
|
56
|
+
observer: ['observer'],
|
|
57
|
+
// `any` intentionally means user/workspace API credentials, not transport-only
|
|
58
|
+
// node credentials or scoped observer credentials.
|
|
59
|
+
any: ['workspace', 'agent'],
|
|
60
|
+
};
|
|
61
|
+
export function validateTokenRequirement(tokenKind, require) {
|
|
62
|
+
const allowedKinds = allowedKindsByRequire[require];
|
|
63
|
+
if (allowedKinds.includes(tokenKind)) {
|
|
64
|
+
return { ok: true };
|
|
65
|
+
}
|
|
66
|
+
if (tokenKind === 'node') {
|
|
67
|
+
return {
|
|
68
|
+
ok: false,
|
|
69
|
+
code: 'node_token_forbidden',
|
|
70
|
+
message: 'Node token cannot perform this operation',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (tokenKind === 'observer') {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
code: 'observer_token_forbidden',
|
|
77
|
+
message: 'Observer token cannot perform this operation',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
if (require === 'any') {
|
|
81
|
+
return { ok: false, code: 'unauthorized', message: 'Invalid token format' };
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
code: 'unauthorized',
|
|
86
|
+
message: requiredTokenMessage(require),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=tokenKind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenKind.js","sourceRoot":"","sources":["../../src/auth/tokenKind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
-- Split node kind (transport) from node role (ownership/capability) and
|
|
2
|
+
-- collapse WebSocket delivery onto one node envelope.
|
|
3
|
+
|
|
4
|
+
ALTER TABLE nodes ADD COLUMN role TEXT NOT NULL DEFAULT 'broker';
|
|
5
|
+
ALTER TABLE deliveries ADD COLUMN route_node_role TEXT DEFAULT NULL;
|
|
6
|
+
|
|
7
|
+
UPDATE nodes
|
|
8
|
+
SET
|
|
9
|
+
role = CASE
|
|
10
|
+
WHEN kind = 'direct_ws' THEN 'direct'
|
|
11
|
+
WHEN kind = 'fleet_ws' THEN 'broker'
|
|
12
|
+
WHEN kind = 'http_push' AND max_agents = 1 THEN 'direct'
|
|
13
|
+
WHEN kind = 'http_push' THEN 'broker'
|
|
14
|
+
ELSE role
|
|
15
|
+
END,
|
|
16
|
+
kind = CASE
|
|
17
|
+
WHEN kind IN ('direct_ws', 'fleet_ws') THEN 'ws'
|
|
18
|
+
ELSE kind
|
|
19
|
+
END,
|
|
20
|
+
delivery_adapter = CASE
|
|
21
|
+
WHEN delivery_adapter IN ('direct.ws.v1', 'fleet.ws.v1') THEN 'ws.node.v1'
|
|
22
|
+
ELSE delivery_adapter
|
|
23
|
+
END;
|
|
24
|
+
|
|
25
|
+
UPDATE deliveries
|
|
26
|
+
SET
|
|
27
|
+
route_node_role = CASE
|
|
28
|
+
WHEN route_node_kind = 'direct_ws' THEN 'direct'
|
|
29
|
+
WHEN route_node_kind = 'fleet_ws' THEN 'broker'
|
|
30
|
+
WHEN route_node_id IS NOT NULL THEN (
|
|
31
|
+
SELECT n.role
|
|
32
|
+
FROM nodes n
|
|
33
|
+
WHERE n.workspace_id = deliveries.workspace_id
|
|
34
|
+
AND n.id = deliveries.route_node_id
|
|
35
|
+
)
|
|
36
|
+
ELSE NULL
|
|
37
|
+
END,
|
|
38
|
+
route_node_kind = CASE
|
|
39
|
+
WHEN route_node_kind IN ('direct_ws', 'fleet_ws') THEN 'ws'
|
|
40
|
+
ELSE route_node_kind
|
|
41
|
+
END,
|
|
42
|
+
delivery_adapter = CASE
|
|
43
|
+
WHEN delivery_adapter IN ('direct.ws.v1', 'fleet.ws.v1') THEN 'ws.node.v1'
|
|
44
|
+
ELSE delivery_adapter
|
|
45
|
+
END;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
-- Add scoped observer tokens for workspace realtime and read-only REST.
|
|
2
|
+
|
|
3
|
+
CREATE TABLE observer_tokens (
|
|
4
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
5
|
+
workspace_id TEXT NOT NULL,
|
|
6
|
+
name TEXT NOT NULL,
|
|
7
|
+
description TEXT,
|
|
8
|
+
token_hash TEXT NOT NULL,
|
|
9
|
+
scopes TEXT NOT NULL DEFAULT '[]',
|
|
10
|
+
filters TEXT NOT NULL DEFAULT '{}',
|
|
11
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
12
|
+
expires_at INTEGER,
|
|
13
|
+
created_by TEXT,
|
|
14
|
+
created_by_type TEXT NOT NULL DEFAULT 'workspace',
|
|
15
|
+
last_used_at INTEGER,
|
|
16
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
17
|
+
updated_at INTEGER,
|
|
18
|
+
revoked_at INTEGER,
|
|
19
|
+
FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE UNIQUE INDEX observer_tokens_workspace_name_unique
|
|
23
|
+
ON observer_tokens (workspace_id, name);
|
|
24
|
+
|
|
25
|
+
CREATE UNIQUE INDEX observer_tokens_token_hash_unique
|
|
26
|
+
ON observer_tokens (token_hash);
|
|
27
|
+
|
|
28
|
+
CREATE INDEX idx_observer_tokens_workspace_status
|
|
29
|
+
ON observer_tokens (workspace_id, status);
|
|
30
|
+
|
|
31
|
+
CREATE INDEX idx_observer_tokens_expires_at
|
|
32
|
+
ON observer_tokens (expires_at);
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -8,6 +8,15 @@ export interface WorkspaceRetentionSettings {
|
|
|
8
8
|
delivery_ttl_days?: number | null;
|
|
9
9
|
message_log_ttl_days?: number | null;
|
|
10
10
|
}
|
|
11
|
+
export interface ObserverTokenFilters {
|
|
12
|
+
channel_ids?: string[];
|
|
13
|
+
channel_names?: string[];
|
|
14
|
+
include_dms?: boolean;
|
|
15
|
+
dm_conversation_ids?: string[];
|
|
16
|
+
agent_ids?: string[];
|
|
17
|
+
event_types?: string[];
|
|
18
|
+
created_after?: string;
|
|
19
|
+
}
|
|
11
20
|
export declare const workspaces: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
12
21
|
name: "workspaces";
|
|
13
22
|
schema: undefined;
|
|
@@ -605,6 +614,25 @@ export declare const nodes: import("drizzle-orm/sqlite-core").SQLiteTableWithCol
|
|
|
605
614
|
}, {}, {
|
|
606
615
|
length: number | undefined;
|
|
607
616
|
}>;
|
|
617
|
+
role: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
618
|
+
name: "role";
|
|
619
|
+
tableName: "nodes";
|
|
620
|
+
dataType: "string";
|
|
621
|
+
columnType: "SQLiteText";
|
|
622
|
+
data: string;
|
|
623
|
+
driverParam: string;
|
|
624
|
+
notNull: true;
|
|
625
|
+
hasDefault: true;
|
|
626
|
+
isPrimaryKey: false;
|
|
627
|
+
isAutoincrement: false;
|
|
628
|
+
hasRuntimeDefault: false;
|
|
629
|
+
enumValues: [string, ...string[]];
|
|
630
|
+
baseColumn: never;
|
|
631
|
+
identity: undefined;
|
|
632
|
+
generated: undefined;
|
|
633
|
+
}, {}, {
|
|
634
|
+
length: number | undefined;
|
|
635
|
+
}>;
|
|
608
636
|
deliveryAdapter: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
609
637
|
name: "delivery_adapter";
|
|
610
638
|
tableName: "nodes";
|
|
@@ -849,6 +877,288 @@ export declare const nodes: import("drizzle-orm/sqlite-core").SQLiteTableWithCol
|
|
|
849
877
|
};
|
|
850
878
|
dialect: "sqlite";
|
|
851
879
|
}>;
|
|
880
|
+
export declare const observerTokens: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
881
|
+
name: "observer_tokens";
|
|
882
|
+
schema: undefined;
|
|
883
|
+
columns: {
|
|
884
|
+
id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
885
|
+
name: "id";
|
|
886
|
+
tableName: "observer_tokens";
|
|
887
|
+
dataType: "string";
|
|
888
|
+
columnType: "SQLiteText";
|
|
889
|
+
data: string;
|
|
890
|
+
driverParam: string;
|
|
891
|
+
notNull: true;
|
|
892
|
+
hasDefault: false;
|
|
893
|
+
isPrimaryKey: true;
|
|
894
|
+
isAutoincrement: false;
|
|
895
|
+
hasRuntimeDefault: false;
|
|
896
|
+
enumValues: [string, ...string[]];
|
|
897
|
+
baseColumn: never;
|
|
898
|
+
identity: undefined;
|
|
899
|
+
generated: undefined;
|
|
900
|
+
}, {}, {
|
|
901
|
+
length: number | undefined;
|
|
902
|
+
}>;
|
|
903
|
+
workspaceId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
904
|
+
name: "workspace_id";
|
|
905
|
+
tableName: "observer_tokens";
|
|
906
|
+
dataType: "string";
|
|
907
|
+
columnType: "SQLiteText";
|
|
908
|
+
data: string;
|
|
909
|
+
driverParam: string;
|
|
910
|
+
notNull: true;
|
|
911
|
+
hasDefault: false;
|
|
912
|
+
isPrimaryKey: false;
|
|
913
|
+
isAutoincrement: false;
|
|
914
|
+
hasRuntimeDefault: false;
|
|
915
|
+
enumValues: [string, ...string[]];
|
|
916
|
+
baseColumn: never;
|
|
917
|
+
identity: undefined;
|
|
918
|
+
generated: undefined;
|
|
919
|
+
}, {}, {
|
|
920
|
+
length: number | undefined;
|
|
921
|
+
}>;
|
|
922
|
+
name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
923
|
+
name: "name";
|
|
924
|
+
tableName: "observer_tokens";
|
|
925
|
+
dataType: "string";
|
|
926
|
+
columnType: "SQLiteText";
|
|
927
|
+
data: string;
|
|
928
|
+
driverParam: string;
|
|
929
|
+
notNull: true;
|
|
930
|
+
hasDefault: false;
|
|
931
|
+
isPrimaryKey: false;
|
|
932
|
+
isAutoincrement: false;
|
|
933
|
+
hasRuntimeDefault: false;
|
|
934
|
+
enumValues: [string, ...string[]];
|
|
935
|
+
baseColumn: never;
|
|
936
|
+
identity: undefined;
|
|
937
|
+
generated: undefined;
|
|
938
|
+
}, {}, {
|
|
939
|
+
length: number | undefined;
|
|
940
|
+
}>;
|
|
941
|
+
description: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
942
|
+
name: "description";
|
|
943
|
+
tableName: "observer_tokens";
|
|
944
|
+
dataType: "string";
|
|
945
|
+
columnType: "SQLiteText";
|
|
946
|
+
data: string;
|
|
947
|
+
driverParam: string;
|
|
948
|
+
notNull: false;
|
|
949
|
+
hasDefault: false;
|
|
950
|
+
isPrimaryKey: false;
|
|
951
|
+
isAutoincrement: false;
|
|
952
|
+
hasRuntimeDefault: false;
|
|
953
|
+
enumValues: [string, ...string[]];
|
|
954
|
+
baseColumn: never;
|
|
955
|
+
identity: undefined;
|
|
956
|
+
generated: undefined;
|
|
957
|
+
}, {}, {
|
|
958
|
+
length: number | undefined;
|
|
959
|
+
}>;
|
|
960
|
+
tokenHash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
961
|
+
name: "token_hash";
|
|
962
|
+
tableName: "observer_tokens";
|
|
963
|
+
dataType: "string";
|
|
964
|
+
columnType: "SQLiteText";
|
|
965
|
+
data: string;
|
|
966
|
+
driverParam: string;
|
|
967
|
+
notNull: true;
|
|
968
|
+
hasDefault: false;
|
|
969
|
+
isPrimaryKey: false;
|
|
970
|
+
isAutoincrement: false;
|
|
971
|
+
hasRuntimeDefault: false;
|
|
972
|
+
enumValues: [string, ...string[]];
|
|
973
|
+
baseColumn: never;
|
|
974
|
+
identity: undefined;
|
|
975
|
+
generated: undefined;
|
|
976
|
+
}, {}, {
|
|
977
|
+
length: number | undefined;
|
|
978
|
+
}>;
|
|
979
|
+
scopes: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
980
|
+
name: "scopes";
|
|
981
|
+
tableName: "observer_tokens";
|
|
982
|
+
dataType: "json";
|
|
983
|
+
columnType: "SQLiteTextJson";
|
|
984
|
+
data: string[];
|
|
985
|
+
driverParam: string;
|
|
986
|
+
notNull: true;
|
|
987
|
+
hasDefault: true;
|
|
988
|
+
isPrimaryKey: false;
|
|
989
|
+
isAutoincrement: false;
|
|
990
|
+
hasRuntimeDefault: false;
|
|
991
|
+
enumValues: undefined;
|
|
992
|
+
baseColumn: never;
|
|
993
|
+
identity: undefined;
|
|
994
|
+
generated: undefined;
|
|
995
|
+
}, {}, {
|
|
996
|
+
$type: string[];
|
|
997
|
+
}>;
|
|
998
|
+
filters: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
999
|
+
name: "filters";
|
|
1000
|
+
tableName: "observer_tokens";
|
|
1001
|
+
dataType: "json";
|
|
1002
|
+
columnType: "SQLiteTextJson";
|
|
1003
|
+
data: ObserverTokenFilters;
|
|
1004
|
+
driverParam: string;
|
|
1005
|
+
notNull: true;
|
|
1006
|
+
hasDefault: true;
|
|
1007
|
+
isPrimaryKey: false;
|
|
1008
|
+
isAutoincrement: false;
|
|
1009
|
+
hasRuntimeDefault: false;
|
|
1010
|
+
enumValues: undefined;
|
|
1011
|
+
baseColumn: never;
|
|
1012
|
+
identity: undefined;
|
|
1013
|
+
generated: undefined;
|
|
1014
|
+
}, {}, {
|
|
1015
|
+
$type: ObserverTokenFilters;
|
|
1016
|
+
}>;
|
|
1017
|
+
status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1018
|
+
name: "status";
|
|
1019
|
+
tableName: "observer_tokens";
|
|
1020
|
+
dataType: "string";
|
|
1021
|
+
columnType: "SQLiteText";
|
|
1022
|
+
data: string;
|
|
1023
|
+
driverParam: string;
|
|
1024
|
+
notNull: true;
|
|
1025
|
+
hasDefault: true;
|
|
1026
|
+
isPrimaryKey: false;
|
|
1027
|
+
isAutoincrement: false;
|
|
1028
|
+
hasRuntimeDefault: false;
|
|
1029
|
+
enumValues: [string, ...string[]];
|
|
1030
|
+
baseColumn: never;
|
|
1031
|
+
identity: undefined;
|
|
1032
|
+
generated: undefined;
|
|
1033
|
+
}, {}, {
|
|
1034
|
+
length: number | undefined;
|
|
1035
|
+
}>;
|
|
1036
|
+
expiresAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1037
|
+
name: "expires_at";
|
|
1038
|
+
tableName: "observer_tokens";
|
|
1039
|
+
dataType: "date";
|
|
1040
|
+
columnType: "SQLiteTimestamp";
|
|
1041
|
+
data: Date;
|
|
1042
|
+
driverParam: number;
|
|
1043
|
+
notNull: false;
|
|
1044
|
+
hasDefault: false;
|
|
1045
|
+
isPrimaryKey: false;
|
|
1046
|
+
isAutoincrement: false;
|
|
1047
|
+
hasRuntimeDefault: false;
|
|
1048
|
+
enumValues: undefined;
|
|
1049
|
+
baseColumn: never;
|
|
1050
|
+
identity: undefined;
|
|
1051
|
+
generated: undefined;
|
|
1052
|
+
}, {}, {}>;
|
|
1053
|
+
createdBy: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1054
|
+
name: "created_by";
|
|
1055
|
+
tableName: "observer_tokens";
|
|
1056
|
+
dataType: "string";
|
|
1057
|
+
columnType: "SQLiteText";
|
|
1058
|
+
data: string;
|
|
1059
|
+
driverParam: string;
|
|
1060
|
+
notNull: false;
|
|
1061
|
+
hasDefault: false;
|
|
1062
|
+
isPrimaryKey: false;
|
|
1063
|
+
isAutoincrement: false;
|
|
1064
|
+
hasRuntimeDefault: false;
|
|
1065
|
+
enumValues: [string, ...string[]];
|
|
1066
|
+
baseColumn: never;
|
|
1067
|
+
identity: undefined;
|
|
1068
|
+
generated: undefined;
|
|
1069
|
+
}, {}, {
|
|
1070
|
+
length: number | undefined;
|
|
1071
|
+
}>;
|
|
1072
|
+
createdByType: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1073
|
+
name: "created_by_type";
|
|
1074
|
+
tableName: "observer_tokens";
|
|
1075
|
+
dataType: "string";
|
|
1076
|
+
columnType: "SQLiteText";
|
|
1077
|
+
data: string;
|
|
1078
|
+
driverParam: string;
|
|
1079
|
+
notNull: true;
|
|
1080
|
+
hasDefault: true;
|
|
1081
|
+
isPrimaryKey: false;
|
|
1082
|
+
isAutoincrement: false;
|
|
1083
|
+
hasRuntimeDefault: false;
|
|
1084
|
+
enumValues: [string, ...string[]];
|
|
1085
|
+
baseColumn: never;
|
|
1086
|
+
identity: undefined;
|
|
1087
|
+
generated: undefined;
|
|
1088
|
+
}, {}, {
|
|
1089
|
+
length: number | undefined;
|
|
1090
|
+
}>;
|
|
1091
|
+
lastUsedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1092
|
+
name: "last_used_at";
|
|
1093
|
+
tableName: "observer_tokens";
|
|
1094
|
+
dataType: "date";
|
|
1095
|
+
columnType: "SQLiteTimestamp";
|
|
1096
|
+
data: Date;
|
|
1097
|
+
driverParam: number;
|
|
1098
|
+
notNull: false;
|
|
1099
|
+
hasDefault: false;
|
|
1100
|
+
isPrimaryKey: false;
|
|
1101
|
+
isAutoincrement: false;
|
|
1102
|
+
hasRuntimeDefault: false;
|
|
1103
|
+
enumValues: undefined;
|
|
1104
|
+
baseColumn: never;
|
|
1105
|
+
identity: undefined;
|
|
1106
|
+
generated: undefined;
|
|
1107
|
+
}, {}, {}>;
|
|
1108
|
+
createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1109
|
+
name: "created_at";
|
|
1110
|
+
tableName: "observer_tokens";
|
|
1111
|
+
dataType: "date";
|
|
1112
|
+
columnType: "SQLiteTimestamp";
|
|
1113
|
+
data: Date;
|
|
1114
|
+
driverParam: number;
|
|
1115
|
+
notNull: true;
|
|
1116
|
+
hasDefault: true;
|
|
1117
|
+
isPrimaryKey: false;
|
|
1118
|
+
isAutoincrement: false;
|
|
1119
|
+
hasRuntimeDefault: false;
|
|
1120
|
+
enumValues: undefined;
|
|
1121
|
+
baseColumn: never;
|
|
1122
|
+
identity: undefined;
|
|
1123
|
+
generated: undefined;
|
|
1124
|
+
}, {}, {}>;
|
|
1125
|
+
updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1126
|
+
name: "updated_at";
|
|
1127
|
+
tableName: "observer_tokens";
|
|
1128
|
+
dataType: "date";
|
|
1129
|
+
columnType: "SQLiteTimestamp";
|
|
1130
|
+
data: Date;
|
|
1131
|
+
driverParam: number;
|
|
1132
|
+
notNull: false;
|
|
1133
|
+
hasDefault: false;
|
|
1134
|
+
isPrimaryKey: false;
|
|
1135
|
+
isAutoincrement: false;
|
|
1136
|
+
hasRuntimeDefault: false;
|
|
1137
|
+
enumValues: undefined;
|
|
1138
|
+
baseColumn: never;
|
|
1139
|
+
identity: undefined;
|
|
1140
|
+
generated: undefined;
|
|
1141
|
+
}, {}, {}>;
|
|
1142
|
+
revokedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1143
|
+
name: "revoked_at";
|
|
1144
|
+
tableName: "observer_tokens";
|
|
1145
|
+
dataType: "date";
|
|
1146
|
+
columnType: "SQLiteTimestamp";
|
|
1147
|
+
data: Date;
|
|
1148
|
+
driverParam: number;
|
|
1149
|
+
notNull: false;
|
|
1150
|
+
hasDefault: false;
|
|
1151
|
+
isPrimaryKey: false;
|
|
1152
|
+
isAutoincrement: false;
|
|
1153
|
+
hasRuntimeDefault: false;
|
|
1154
|
+
enumValues: undefined;
|
|
1155
|
+
baseColumn: never;
|
|
1156
|
+
identity: undefined;
|
|
1157
|
+
generated: undefined;
|
|
1158
|
+
}, {}, {}>;
|
|
1159
|
+
};
|
|
1160
|
+
dialect: "sqlite";
|
|
1161
|
+
}>;
|
|
852
1162
|
export declare const agentNodeBindings: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
853
1163
|
name: "agent_node_bindings";
|
|
854
1164
|
schema: undefined;
|
|
@@ -5539,6 +5849,25 @@ export declare const deliveries: import("drizzle-orm/sqlite-core").SQLiteTableWi
|
|
|
5539
5849
|
}, {}, {
|
|
5540
5850
|
length: number | undefined;
|
|
5541
5851
|
}>;
|
|
5852
|
+
routeNodeRole: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
5853
|
+
name: "route_node_role";
|
|
5854
|
+
tableName: "deliveries";
|
|
5855
|
+
dataType: "string";
|
|
5856
|
+
columnType: "SQLiteText";
|
|
5857
|
+
data: string;
|
|
5858
|
+
driverParam: string;
|
|
5859
|
+
notNull: false;
|
|
5860
|
+
hasDefault: false;
|
|
5861
|
+
isPrimaryKey: false;
|
|
5862
|
+
isAutoincrement: false;
|
|
5863
|
+
hasRuntimeDefault: false;
|
|
5864
|
+
enumValues: [string, ...string[]];
|
|
5865
|
+
baseColumn: never;
|
|
5866
|
+
identity: undefined;
|
|
5867
|
+
generated: undefined;
|
|
5868
|
+
}, {}, {
|
|
5869
|
+
length: number | undefined;
|
|
5870
|
+
}>;
|
|
5542
5871
|
deliveryAdapter: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
5543
5872
|
name: "delivery_adapter";
|
|
5544
5873
|
tableName: "deliveries";
|