@burdenoff/be-sdk 2026.529.3 → 2026.601.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.
@@ -1,233 +1,15 @@
1
- import { GraphQLSchema, GraphQLError } from 'graphql';
2
- import { PubSub } from 'graphql-yoga';
3
- import { P as PrismaClientBase, a as PrismaClientConstructorOptions } from '../client-CSjIrYKS.js';
4
- import { I as I18nContext, L as LocaleCode, d as I18n } from '../i18n-DA6IPnYy.js';
1
+ import { W as WorkspaceSecret, I as IActor, J as JWTPayload, S as ServerDefinition, a as ServerInstance, b as ITenant, G as GraphQLContext, Y as YogaPlugin } from '../types-sKXodL2N.js';
2
+ export { C as ConsentContext, E as ElysiaApp, c as IContextFilterInput, d as IOperationContext, e as IOrganization, f as IProduct, g as IProject, h as ITracking, i as IWorkspace, M as ModuleGraphConfig, P as PrismaClientConstructor, R as RESTEndpoint, j as ServerConfig, k as ServerI18nConfig, l as ServerInfo, m as WspaceGraphQLContext } from '../types-sKXodL2N.js';
5
3
  import * as jose from 'jose';
6
4
  import { VerifyOptions } from 'jsonwebtoken';
5
+ import { I as I18n } from '../i18n-DrdPTann.js';
6
+ import { GraphQLError } from 'graphql';
7
+ export { I as I18nContext, L as LocaleCode } from '../types-C8TbSdEj.js';
8
+ export { P as PrismaClientBase } from '../client-CSjIrYKS.js';
9
+ import 'graphql-yoga';
7
10
  import '@prisma/adapter-pg';
8
11
  import 'pg';
9
12
 
10
- interface IActor {
11
- id: string;
12
- type: string;
13
- workspace_id?: string;
14
- tenant_id?: string;
15
- org_id?: string;
16
- isAdmin?: boolean;
17
- }
18
- interface ITenant {
19
- id: string;
20
- endpoint: string;
21
- }
22
- interface IOrganization {
23
- id: string;
24
- }
25
- interface IWorkspace {
26
- id: string;
27
- }
28
- interface IProject {
29
- id: string;
30
- }
31
- interface IProduct {
32
- id: string;
33
- }
34
- interface ITracking {
35
- ip?: string;
36
- userAgent?: string;
37
- }
38
- interface ConsentContext {
39
- grantedBy: string;
40
- scopes?: string[];
41
- grantedAt?: Date;
42
- expiresAt?: Date;
43
- }
44
- interface GraphQLContext {
45
- request: Request;
46
- actor: IActor | null;
47
- tenant: ITenant | null;
48
- organization: IOrganization | null;
49
- workspace: IWorkspace | null;
50
- project: IProject | null;
51
- product: IProduct | null;
52
- tracking: ITracking;
53
- consentContext?: ConsentContext;
54
- onBehalfOf: string;
55
- db: unknown;
56
- pubsub?: PubSub<Record<string, [unknown]>>;
57
- i18n?: I18nContext;
58
- responseHeaders: Headers;
59
- }
60
- interface WspaceGraphQLContext extends Omit<GraphQLContext, 'workspace' | 'actor'> {
61
- actor: IActor;
62
- workspace: IWorkspace;
63
- }
64
-
65
- interface IOperationContext {
66
- workspaceId?: string | null;
67
- actorId?: string | null;
68
- projectId?: string | null;
69
- appId?: string | null;
70
- custom?: Record<string, unknown> | null;
71
- }
72
- interface IContextFilterInput {
73
- workspaceId?: string | null;
74
- actorId?: string | null;
75
- projectId?: string | null;
76
- appId?: string | null;
77
- }
78
- interface ServerI18nConfig {
79
- enabled?: boolean;
80
- defaultLocale?: LocaleCode;
81
- fallbackLocale?: LocaleCode;
82
- localesPath?: string;
83
- supportedLocales?: LocaleCode[];
84
- namespace?: string;
85
- lazyLoad?: boolean;
86
- logMissing?: boolean;
87
- }
88
- interface ServerConfig {
89
- serviceName: string;
90
- serviceVersion?: string;
91
- port: number;
92
- host?: string;
93
- environment?: 'development' | 'staging' | 'production';
94
- boundary?: 'wspace' | 'global';
95
- graphqlEndpoint?: string;
96
- corsOrigins?: string | string[];
97
- sessionSecret?: string;
98
- enablePlayground?: boolean;
99
- enableIntrospection?: boolean;
100
- csrfSkipRoutes?: string[];
101
- loginEndpoints?: string[];
102
- enableCSRF?: boolean;
103
- enableSessionSecurity?: boolean;
104
- i18n?: ServerI18nConfig;
105
- workspaceGuard?: {
106
- enabled?: boolean;
107
- whitelistedOperations?: string[];
108
- };
109
- }
110
- interface ModuleGraphConfig {
111
- getSchema: () => unknown;
112
- exportAll: (orgId?: string, workspaceId?: string) => Promise<unknown>;
113
- exportEntities: (orgId?: string, workspaceId?: string, types?: string[]) => Promise<unknown>;
114
- exportRelationships: (orgId?: string, workspaceId?: string) => Promise<unknown>;
115
- initialize: () => Promise<void>;
116
- shutdown: () => Promise<void>;
117
- }
118
- interface RESTEndpoint {
119
- method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
120
- path: string;
121
- handler: (request: Request, context: GraphQLContext, rawBody?: string) => Promise<unknown>;
122
- rawBody?: boolean;
123
- }
124
- type PrismaClientConstructor<T extends PrismaClientBase = PrismaClientBase> = new (options: PrismaClientConstructorOptions) => T;
125
- interface YogaPlugin {
126
- onExecute?: (args: {
127
- args: {
128
- document?: unknown;
129
- operationName?: string | null;
130
- variableValues?: Record<string, unknown>;
131
- contextValue?: unknown;
132
- };
133
- }) => {
134
- onExecuteDone: (args: {
135
- result: unknown;
136
- }) => void;
137
- } | undefined | void;
138
- onSubscribe?: (args: {
139
- args: unknown;
140
- }) => void;
141
- [key: string]: unknown;
142
- }
143
- interface ServerDefinition {
144
- config: ServerConfig;
145
- prismaClient: PrismaClientConstructor;
146
- schema: GraphQLSchema;
147
- moduleGraph?: ModuleGraphConfig;
148
- restEndpoints?: RESTEndpoint[];
149
- yogaPlugins?: YogaPlugin[];
150
- buildContext?: (defaultContext: GraphQLContext) => Promise<GraphQLContext> | GraphQLContext;
151
- workspaceExtensionConfig?: {
152
- strictMode?: boolean;
153
- excludeModels?: string[];
154
- excludeModelsFromReadIsolation?: string[];
155
- allowedUnguardedOperations?: string[];
156
- enableReadIsolation?: boolean;
157
- enableDeleteIsolation?: boolean;
158
- enableUpdateWhereIsolation?: boolean;
159
- debug?: boolean;
160
- };
161
- disableWorkspaceExtension?: boolean;
162
- onShutdown?: () => Promise<void>;
163
- }
164
- interface BunServerHandle {
165
- stop(): void;
166
- port: number;
167
- hostname: string;
168
- }
169
- interface ElysiaLikeServer {
170
- server: BunServerHandle | null;
171
- listen(options: {
172
- port: number;
173
- hostname?: string;
174
- }): ElysiaLikeServer;
175
- use(plugin: unknown): ElysiaLikeServer;
176
- all(path: string, handler: (ctx: {
177
- request: Request;
178
- }) => unknown): ElysiaLikeServer;
179
- get(path: string, handler: (ctx: {
180
- request: Request;
181
- query: Record<string, string | undefined>;
182
- }) => unknown): ElysiaLikeServer;
183
- post(path: string, handler: (ctx: {
184
- request: Request;
185
- }) => unknown): ElysiaLikeServer;
186
- put(path: string, handler: (ctx: {
187
- request: Request;
188
- }) => unknown): ElysiaLikeServer;
189
- patch(path: string, handler: (ctx: {
190
- request: Request;
191
- }) => unknown): ElysiaLikeServer;
192
- delete(path: string, handler: (ctx: {
193
- request: Request;
194
- }) => unknown): ElysiaLikeServer;
195
- }
196
- type ElysiaApp = ElysiaLikeServer;
197
- interface ServerInstance {
198
- app: ElysiaApp;
199
- server: BunServerHandle | null;
200
- start: () => Promise<void>;
201
- stop: () => Promise<void>;
202
- getInfo: () => ServerInfo;
203
- }
204
- interface ServerInfo {
205
- serviceName: string;
206
- serviceVersion: string;
207
- environment: string;
208
- port: number;
209
- host: string;
210
- graphqlEndpoint: string;
211
- startedAt: string;
212
- uptime: number;
213
- }
214
- interface JWTPayload {
215
- sub: string;
216
- actor_type?: string;
217
- workspace_id?: string;
218
- org_id?: string;
219
- tenant_id?: string;
220
- iat?: number;
221
- exp?: number;
222
- [key: string]: unknown;
223
- }
224
- interface WorkspaceSecret {
225
- kty: string;
226
- k: string;
227
- alg?: string;
228
- [key: string]: unknown;
229
- }
230
-
231
13
  type FetchWorkspaceSecretFn = (workspaceId: string) => Promise<WorkspaceSecret | null>;
232
14
  interface AuthConfig {
233
15
  fetchWorkspaceSecret: FetchWorkspaceSecretFn;
@@ -399,4 +181,4 @@ declare function createHumanReadableErrorPlugin(options?: ErrorNormalizationOpti
399
181
  declare function formatHttpError(error: unknown, options?: ErrorNormalizationOptions): HttpErrorResult;
400
182
  declare function createHttpErrorResponse(error: unknown, options?: ErrorNormalizationOptions): Response;
401
183
 
402
- export { type AuthConfig, type ConsentContext, type ContextBuilderOptions, type ElysiaApp, type ErrorNormalizationOptions, type FetchWorkspaceSecretFn, type GraphQLContext, type HttpErrorPayload, type HttpErrorResult, I18nContext, type IActor, type IContextFilterInput, type IOperationContext, type IOrganization, type IProduct, type IProject, type ITenant, type ITracking, type IWorkspace, type JWTPayload, LocaleCode, type ModuleGraphConfig, type NormalizedErrorState, PrismaClientBase, type PrismaClientConstructor, type RESTEndpoint, type ServerConfig, type ServerDefinition, type ServerI18nConfig, type ServerInfo, type ServerInstance, type UserFacingErrorOptions, UserFacingGraphQLError, type WorkspaceGuardConfig, type WorkspaceSecret, type WspaceGraphQLContext, type YogaPlugin, authCheck, buildContext, configureAuth, configureContext, configureDefaultAuth, configureServerAuth, createHttpErrorResponse, createHumanReadableErrorPlugin, createServer, createWorkspaceGuardPlugin, decodeJWT, fetchWorkspaceSecret, formatHttpError, generateSymmetricSecret, getContextOptions, normalizeError, normalizeExecutionResultErrors, normalizeGraphQLResponse, normalizeGraphQLResponsePayload, orgCheck, requireWorkspace, tenantCheck, toUserFacingGraphQLError, verifyJWT, workspaceCheck };
184
+ export { type AuthConfig, type ContextBuilderOptions, type ErrorNormalizationOptions, type FetchWorkspaceSecretFn, GraphQLContext, type HttpErrorPayload, type HttpErrorResult, IActor, ITenant, JWTPayload, type NormalizedErrorState, ServerDefinition, ServerInstance, type UserFacingErrorOptions, UserFacingGraphQLError, type WorkspaceGuardConfig, WorkspaceSecret, YogaPlugin, authCheck, buildContext, configureAuth, configureContext, configureDefaultAuth, configureServerAuth, createHttpErrorResponse, createHumanReadableErrorPlugin, createServer, createWorkspaceGuardPlugin, decodeJWT, fetchWorkspaceSecret, formatHttpError, generateSymmetricSecret, getContextOptions, normalizeError, normalizeExecutionResultErrors, normalizeGraphQLResponse, normalizeGraphQLResponsePayload, orgCheck, requireWorkspace, tenantCheck, toUserFacingGraphQLError, verifyJWT, workspaceCheck };
@@ -0,0 +1 @@
1
+ export { A as AccessResult, a as AccessVia, C as CreateLinkShareInput, b as CreateUserShareInput, R as RESOURCE_CAPABILITY_MAP, c as RESOURCE_TYPE_LABELS, d as ROLE_CAPABILITIES, e as ROLE_ORDER, f as ResourceMeta, S as SHARE_EMAIL_TEMPLATE_SLUG, g as SHARE_GRANT_PARTIAL_UNIQUE_SQL, h as SHARE_GRANT_PRISMA, j as SHARE_GRANT_SDL, k as SendShareEmailArgs, l as ShareActor, m as ShareCapabilities, n as ShareEmailNotifier, o as ShareGrantDelegate, p as ShareGrantRecord, q as ShareRole, r as ShareService, s as ShareServiceConfig, t as ShareServiceDeps, u as ShareServiceOptions, v as ShareStatus, w as ShareVisibility, x as buildPerEntityShareSdl, y as buildShareEmailVariables, z as capabilitiesFor, B as legacyToRole, D as makeSendShareEmail, E as maxRole, F as normalizeStatus, G as resourceTypeLabel, H as roleAtLeast, I as roleLabel, J as roleToLegacy } from '../index-kssw5ziY.js';
@@ -0,0 +1,5 @@
1
+ export { RESOURCE_CAPABILITY_MAP, RESOURCE_TYPE_LABELS, ROLE_CAPABILITIES, ROLE_ORDER, SHARE_EMAIL_TEMPLATE_SLUG, SHARE_GRANT_PARTIAL_UNIQUE_SQL, SHARE_GRANT_PRISMA, SHARE_GRANT_SDL, ShareRole, ShareService, ShareStatus, ShareVisibility, buildPerEntityShareSdl, buildShareEmailVariables, capabilitiesFor, legacyToRole, makeSendShareEmail, maxRole, normalizeStatus, resourceTypeLabel, roleAtLeast, roleLabel, roleToLegacy } from '../chunk-DVAZQEOL.js';
2
+ import '../chunk-CBZNP6RF.js';
3
+ import '../chunk-XE4OXN2W.js';
4
+ //# sourceMappingURL=index.js.map
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -68,34 +68,4 @@ interface LanguageInfo {
68
68
  declare const RTL_LANGUAGES: LanguageCode[];
69
69
  declare function getTextDirection(language: LanguageCode): TextDirection;
70
70
 
71
- declare class I18n implements II18n {
72
- private config;
73
- private currentLocale;
74
- private supportedLocales;
75
- private initialized;
76
- constructor(config: I18nConfig);
77
- initialize(): Promise<void>;
78
- getLocale(): LocaleCode;
79
- setLocale(locale: LocaleCode): void;
80
- getSupportedLocales(): LocaleCode[];
81
- isSupported(locale: LocaleCode): boolean;
82
- loadLocale(locale: LocaleCode): Promise<void>;
83
- getTranslations(locale: LocaleCode): FlatTranslationMap | undefined;
84
- t: TranslateFunction;
85
- tp: PluralTranslateFunction;
86
- private translate;
87
- private translatePlural;
88
- createContext(locale: LocaleCode): I18nContext;
89
- createContextFromRequest(request: Request): I18nContext;
90
- getLanguageInfo(locale: LocaleCode): {
91
- code: LanguageCode;
92
- direction: 'ltr' | 'rtl';
93
- locale: LocaleCode;
94
- region?: string;
95
- };
96
- }
97
- declare function initializeI18n(config: I18nConfig): Promise<I18n>;
98
- declare function getI18n(): I18n | null;
99
- declare function createI18n(config: I18nConfig): I18n;
100
-
101
- export { type FlatTranslationMap as F, type I18nContext as I, type LocaleCode as L, type ParsedLocale as P, RTL_LANGUAGES as R, type TranslationVariables as T, type LanguageCode as a, type TranslationDictionary as b, type I18nConfig as c, I18n as d, type II18n as e, type LanguageInfo as f, type PluralForms as g, type PluralTranslateFunction as h, type TextDirection as i, type TranslateFunction as j, createI18n as k, getI18n as l, getTextDirection as m, initializeI18n as n };
71
+ export { type FlatTranslationMap as F, type I18nContext as I, type LocaleCode as L, type PluralTranslateFunction as P, RTL_LANGUAGES as R, type TranslateFunction as T, type II18n as a, type I18nConfig as b, type LanguageCode as c, type TranslationVariables as d, type ParsedLocale as e, type TranslationDictionary as f, type LanguageInfo as g, type PluralForms as h, type TextDirection as i, getTextDirection as j };
@@ -0,0 +1,227 @@
1
+ import { GraphQLSchema } from 'graphql';
2
+ import { PubSub } from 'graphql-yoga';
3
+ import { P as PrismaClientBase, a as PrismaClientConstructorOptions } from './client-CSjIrYKS.js';
4
+ import { I as I18nContext, L as LocaleCode } from './types-C8TbSdEj.js';
5
+
6
+ interface IActor {
7
+ id: string;
8
+ type: string;
9
+ workspace_id?: string;
10
+ tenant_id?: string;
11
+ org_id?: string;
12
+ isAdmin?: boolean;
13
+ }
14
+ interface ITenant {
15
+ id: string;
16
+ endpoint: string;
17
+ }
18
+ interface IOrganization {
19
+ id: string;
20
+ }
21
+ interface IWorkspace {
22
+ id: string;
23
+ }
24
+ interface IProject {
25
+ id: string;
26
+ }
27
+ interface IProduct {
28
+ id: string;
29
+ }
30
+ interface ITracking {
31
+ ip?: string;
32
+ userAgent?: string;
33
+ }
34
+ interface ConsentContext {
35
+ grantedBy: string;
36
+ scopes?: string[];
37
+ grantedAt?: Date;
38
+ expiresAt?: Date;
39
+ }
40
+ interface GraphQLContext {
41
+ request: Request;
42
+ actor: IActor | null;
43
+ tenant: ITenant | null;
44
+ organization: IOrganization | null;
45
+ workspace: IWorkspace | null;
46
+ project: IProject | null;
47
+ product: IProduct | null;
48
+ tracking: ITracking;
49
+ consentContext?: ConsentContext;
50
+ onBehalfOf: string;
51
+ db: unknown;
52
+ pubsub?: PubSub<Record<string, [unknown]>>;
53
+ i18n?: I18nContext;
54
+ responseHeaders: Headers;
55
+ }
56
+ interface WspaceGraphQLContext extends Omit<GraphQLContext, 'workspace' | 'actor'> {
57
+ actor: IActor;
58
+ workspace: IWorkspace;
59
+ }
60
+
61
+ interface IOperationContext {
62
+ workspaceId?: string | null;
63
+ actorId?: string | null;
64
+ projectId?: string | null;
65
+ appId?: string | null;
66
+ custom?: Record<string, unknown> | null;
67
+ }
68
+ interface IContextFilterInput {
69
+ workspaceId?: string | null;
70
+ actorId?: string | null;
71
+ projectId?: string | null;
72
+ appId?: string | null;
73
+ }
74
+ interface ServerI18nConfig {
75
+ enabled?: boolean;
76
+ defaultLocale?: LocaleCode;
77
+ fallbackLocale?: LocaleCode;
78
+ localesPath?: string;
79
+ supportedLocales?: LocaleCode[];
80
+ namespace?: string;
81
+ lazyLoad?: boolean;
82
+ logMissing?: boolean;
83
+ }
84
+ interface ServerConfig {
85
+ serviceName: string;
86
+ serviceVersion?: string;
87
+ port: number;
88
+ host?: string;
89
+ environment?: 'development' | 'staging' | 'production';
90
+ boundary?: 'wspace' | 'global';
91
+ graphqlEndpoint?: string;
92
+ corsOrigins?: string | string[];
93
+ sessionSecret?: string;
94
+ enablePlayground?: boolean;
95
+ enableIntrospection?: boolean;
96
+ csrfSkipRoutes?: string[];
97
+ loginEndpoints?: string[];
98
+ enableCSRF?: boolean;
99
+ enableSessionSecurity?: boolean;
100
+ i18n?: ServerI18nConfig;
101
+ workspaceGuard?: {
102
+ enabled?: boolean;
103
+ whitelistedOperations?: string[];
104
+ };
105
+ }
106
+ interface ModuleGraphConfig {
107
+ getSchema: () => unknown;
108
+ exportAll: (orgId?: string, workspaceId?: string) => Promise<unknown>;
109
+ exportEntities: (orgId?: string, workspaceId?: string, types?: string[]) => Promise<unknown>;
110
+ exportRelationships: (orgId?: string, workspaceId?: string) => Promise<unknown>;
111
+ initialize: () => Promise<void>;
112
+ shutdown: () => Promise<void>;
113
+ }
114
+ interface RESTEndpoint {
115
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
116
+ path: string;
117
+ handler: (request: Request, context: GraphQLContext, rawBody?: string) => Promise<unknown>;
118
+ rawBody?: boolean;
119
+ }
120
+ type PrismaClientConstructor<T extends PrismaClientBase = PrismaClientBase> = new (options: PrismaClientConstructorOptions) => T;
121
+ interface YogaPlugin {
122
+ onExecute?: (args: {
123
+ args: {
124
+ document?: unknown;
125
+ operationName?: string | null;
126
+ variableValues?: Record<string, unknown>;
127
+ contextValue?: unknown;
128
+ };
129
+ }) => {
130
+ onExecuteDone: (args: {
131
+ result: unknown;
132
+ }) => void;
133
+ } | undefined | void;
134
+ onSubscribe?: (args: {
135
+ args: unknown;
136
+ }) => void;
137
+ [key: string]: unknown;
138
+ }
139
+ interface ServerDefinition {
140
+ config: ServerConfig;
141
+ prismaClient: PrismaClientConstructor;
142
+ schema: GraphQLSchema;
143
+ moduleGraph?: ModuleGraphConfig;
144
+ restEndpoints?: RESTEndpoint[];
145
+ yogaPlugins?: YogaPlugin[];
146
+ buildContext?: (defaultContext: GraphQLContext) => Promise<GraphQLContext> | GraphQLContext;
147
+ workspaceExtensionConfig?: {
148
+ strictMode?: boolean;
149
+ excludeModels?: string[];
150
+ excludeModelsFromReadIsolation?: string[];
151
+ allowedUnguardedOperations?: string[];
152
+ enableReadIsolation?: boolean;
153
+ enableDeleteIsolation?: boolean;
154
+ enableUpdateWhereIsolation?: boolean;
155
+ debug?: boolean;
156
+ };
157
+ disableWorkspaceExtension?: boolean;
158
+ onShutdown?: () => Promise<void>;
159
+ }
160
+ interface BunServerHandle {
161
+ stop(): void;
162
+ port: number;
163
+ hostname: string;
164
+ }
165
+ interface ElysiaLikeServer {
166
+ server: BunServerHandle | null;
167
+ listen(options: {
168
+ port: number;
169
+ hostname?: string;
170
+ }): ElysiaLikeServer;
171
+ use(plugin: unknown): ElysiaLikeServer;
172
+ all(path: string, handler: (ctx: {
173
+ request: Request;
174
+ }) => unknown): ElysiaLikeServer;
175
+ get(path: string, handler: (ctx: {
176
+ request: Request;
177
+ query: Record<string, string | undefined>;
178
+ }) => unknown): ElysiaLikeServer;
179
+ post(path: string, handler: (ctx: {
180
+ request: Request;
181
+ }) => unknown): ElysiaLikeServer;
182
+ put(path: string, handler: (ctx: {
183
+ request: Request;
184
+ }) => unknown): ElysiaLikeServer;
185
+ patch(path: string, handler: (ctx: {
186
+ request: Request;
187
+ }) => unknown): ElysiaLikeServer;
188
+ delete(path: string, handler: (ctx: {
189
+ request: Request;
190
+ }) => unknown): ElysiaLikeServer;
191
+ }
192
+ type ElysiaApp = ElysiaLikeServer;
193
+ interface ServerInstance {
194
+ app: ElysiaApp;
195
+ server: BunServerHandle | null;
196
+ start: () => Promise<void>;
197
+ stop: () => Promise<void>;
198
+ getInfo: () => ServerInfo;
199
+ }
200
+ interface ServerInfo {
201
+ serviceName: string;
202
+ serviceVersion: string;
203
+ environment: string;
204
+ port: number;
205
+ host: string;
206
+ graphqlEndpoint: string;
207
+ startedAt: string;
208
+ uptime: number;
209
+ }
210
+ interface JWTPayload {
211
+ sub: string;
212
+ actor_type?: string;
213
+ workspace_id?: string;
214
+ org_id?: string;
215
+ tenant_id?: string;
216
+ iat?: number;
217
+ exp?: number;
218
+ [key: string]: unknown;
219
+ }
220
+ interface WorkspaceSecret {
221
+ kty: string;
222
+ k: string;
223
+ alg?: string;
224
+ [key: string]: unknown;
225
+ }
226
+
227
+ export type { ConsentContext as C, ElysiaApp as E, GraphQLContext as G, IActor as I, JWTPayload as J, ModuleGraphConfig as M, PrismaClientConstructor as P, RESTEndpoint as R, ServerDefinition as S, WorkspaceSecret as W, YogaPlugin as Y, ServerInstance as a, ITenant as b, IContextFilterInput as c, IOperationContext as d, IOrganization as e, IProduct as f, IProject as g, ITracking as h, IWorkspace as i, ServerConfig as j, ServerI18nConfig as k, ServerInfo as l, WspaceGraphQLContext as m };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/be-sdk",
3
- "version": "2026.529.3",
3
+ "version": "2026.601.1",
4
4
  "description": "Backend SDK for Burdenoff products providing unified access to notifications, RBAC, activity tracking, usage monitoring, and more",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -71,8 +71,8 @@
71
71
  "deps:status": "bun scripts/deps-mode.ts status",
72
72
  "deps:workspace": "bun scripts/deps-mode.ts workspace",
73
73
  "dev": "tsx watch ./src/index.ts",
74
- "build": "NODE_OPTIONS=--max-old-space-size=4096 tsup src/index.ts src/init/index.ts src/logger/index.ts src/cache/index.ts src/database/index.ts src/event-queue/index.ts src/graph/index.ts src/middleware/index.ts src/observability/index.ts src/graphql/index.ts src/graphql/services/index.ts src/prisma/index.ts src/utils/index.ts src/notifications/index.ts src/tracker/index.ts src/export/index.ts src/dataloader/index.ts src/prisma/generator/index.ts src/server/index.ts src/i18n/index.ts src/instrumentation/index.ts src/rbac/index.ts src/temporal/index.ts src/client/internal-client.ts src/layer/index.ts src/gateway/index.ts src/gateway/security/index.ts src/crypto/index.ts src/feature-flags/index.ts src/telemetry/index.ts src/auth/index.ts src/captcha/index.ts src/metrics/index.ts src/platform/index.ts src/resource-caps/index.ts --format esm --dts --clean --shims",
75
- "build:watch": "tsup src/index.ts src/init/index.ts src/logger/index.ts src/cache/index.ts src/database/index.ts src/event-queue/index.ts src/graph/index.ts src/middleware/index.ts src/observability/index.ts src/graphql/index.ts src/graphql/services/index.ts src/prisma/index.ts src/utils/index.ts src/notifications/index.ts src/tracker/index.ts src/export/index.ts src/dataloader/index.ts src/prisma/generator/index.ts src/server/index.ts src/i18n/index.ts src/instrumentation/index.ts src/rbac/index.ts src/temporal/index.ts src/client/internal-client.ts src/layer/index.ts src/gateway/index.ts src/gateway/security/index.ts src/crypto/index.ts src/feature-flags/index.ts src/telemetry/index.ts src/auth/index.ts src/captcha/index.ts src/metrics/index.ts src/platform/index.ts src/resource-caps/index.ts --format esm --dts --watch --shims",
74
+ "build": "NODE_OPTIONS=--max-old-space-size=4096 tsup src/index.ts src/init/index.ts src/logger/index.ts src/cache/index.ts src/database/index.ts src/event-queue/index.ts src/graph/index.ts src/middleware/index.ts src/observability/index.ts src/graphql/index.ts src/graphql/services/index.ts src/prisma/index.ts src/utils/index.ts src/notifications/index.ts src/tracker/index.ts src/export/index.ts src/dataloader/index.ts src/prisma/generator/index.ts src/server/index.ts src/i18n/index.ts src/instrumentation/index.ts src/rbac/index.ts src/temporal/index.ts src/client/internal-client.ts src/layer/index.ts src/gateway/index.ts src/gateway/security/index.ts src/crypto/index.ts src/feature-flags/index.ts src/telemetry/index.ts src/auth/index.ts src/captcha/index.ts src/metrics/index.ts src/platform/index.ts src/resource-caps/index.ts src/sharing/index.ts --format esm --dts --clean --shims",
75
+ "build:watch": "tsup src/index.ts src/init/index.ts src/logger/index.ts src/cache/index.ts src/database/index.ts src/event-queue/index.ts src/graph/index.ts src/middleware/index.ts src/observability/index.ts src/graphql/index.ts src/graphql/services/index.ts src/prisma/index.ts src/utils/index.ts src/notifications/index.ts src/tracker/index.ts src/export/index.ts src/dataloader/index.ts src/prisma/generator/index.ts src/server/index.ts src/i18n/index.ts src/instrumentation/index.ts src/rbac/index.ts src/temporal/index.ts src/client/internal-client.ts src/layer/index.ts src/gateway/index.ts src/gateway/security/index.ts src/crypto/index.ts src/feature-flags/index.ts src/telemetry/index.ts src/auth/index.ts src/captcha/index.ts src/metrics/index.ts src/platform/index.ts src/resource-caps/index.ts src/sharing/index.ts --format esm --dts --watch --shims",
76
76
  "typecheck": "tsc --noEmit",
77
77
  "lint": "eslint ./src",
78
78
  "lint:sanity": "if [ \"${CI:-}\" = \"true\" ]; then bun run lint; else bun run lint -- --cache --cache-location .eslintcache; fi",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/auth/index.ts"],"names":["ACCESS_TOKEN_COOKIE","REFRESH_TOKEN_COOKIE","ACCESS_TOKEN_MAX_AGE","REFRESH_TOKEN_MAX_AGE","REFRESH_TOKEN_REMEMBER_MAX_AGE","buildCookieString","name","value","maxAge","buildClearCookieString","AuthCookieHelper","setAuthCookies","context","tokens","options","headers","responseHeaders","rememberMe","refreshMaxAge","append","accessToken","refreshToken","clearAuthCookies","AuthModule","client","verifyToken","token","logger","debug","isTokenExpired","valid","error","query","response","Error","message","decodeToken","payload","parseJWT","mutation","info","AuthenticationError","validatePermission","userId","permission","resourceId","allowed","isTokenValid","getUserIdFromToken","user_id","getWorkspaceIdFromToken","workspace_id","getTokenClaims","willExpireSoon","withinSeconds","exp","now","Math","floor","Date"],"mappings":"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","file":"chunk-7NUQXGA7.js","sourcesContent":["/**\n * Authentication Module\n * JWT verification, token management, and user authentication\n */\n\nimport type { BurdenoffGraphQLClient } from '../client/graphql.js';\nimport type { SDKContext } from '../types/index.js';\nimport { AuthenticationError } from '../types/index.js';\nimport { logger } from '../logger/index.js';\nimport { parseJWT, isTokenExpired } from '../utils/index.js';\n\ninterface CookieContext {\n responseHeaders?: Headers;\n [key: string]: unknown;\n}\n\nconst ACCESS_TOKEN_COOKIE = 'bf_access_token';\nconst REFRESH_TOKEN_COOKIE = 'bf_refresh_token';\nconst ACCESS_TOKEN_MAX_AGE = 15 * 60; // 15 minutes\nconst REFRESH_TOKEN_MAX_AGE = 30 * 24 * 60 * 60; // 30 days\nconst REFRESH_TOKEN_REMEMBER_MAX_AGE = 30 * 24 * 60 * 60; // 30 days (same, controlled by backend)\n\nfunction buildCookieString(name: string, value: string, maxAge: number): string {\n return `${name}=${value}; Max-Age=${maxAge}; Path=/; HttpOnly; SameSite=Strict`;\n}\n\nfunction buildClearCookieString(name: string): string {\n return `${name}=; Max-Age=0; Path=/; HttpOnly; SameSite=Strict`;\n}\n\nexport const AuthCookieHelper = {\n setAuthCookies(\n context: CookieContext,\n tokens: { accessToken: string; refreshToken: string },\n options?: { rememberMe?: boolean }\n ): void {\n const headers = context.responseHeaders;\n if (!headers) return;\n\n const rememberMe = options?.rememberMe ?? false;\n const refreshMaxAge = rememberMe ? REFRESH_TOKEN_REMEMBER_MAX_AGE : REFRESH_TOKEN_MAX_AGE;\n\n headers.append('Set-Cookie', buildCookieString(ACCESS_TOKEN_COOKIE, tokens.accessToken, ACCESS_TOKEN_MAX_AGE));\n headers.append('Set-Cookie', buildCookieString(REFRESH_TOKEN_COOKIE, tokens.refreshToken, refreshMaxAge));\n },\n\n clearAuthCookies(context: CookieContext): void {\n const headers = context.responseHeaders;\n if (!headers) return;\n\n headers.append('Set-Cookie', buildClearCookieString(ACCESS_TOKEN_COOKIE));\n headers.append('Set-Cookie', buildClearCookieString(REFRESH_TOKEN_COOKIE));\n },\n};\n\nexport interface TokenPayload {\n jti: string;\n sub: string;\n user_id: string;\n workspace_id?: string;\n org_id?: string;\n tenant_endpoint?: string;\n iat: number;\n exp: number;\n scope?: string;\n}\n\nexport interface VerifyTokenResult {\n valid: boolean;\n payload?: TokenPayload;\n error?: string;\n}\n\nexport interface RefreshTokenResult {\n accessToken: string;\n refreshToken: string;\n expiresIn: number;\n}\n\nexport * from './cookie-helper.js';\n\n/**\n * Authentication Module\n */\nexport class AuthModule {\n constructor(\n private client: BurdenoffGraphQLClient,\n private context: SDKContext\n ) {}\n\n /**\n * Verify JWT token\n */\n public async verifyToken(token: string): Promise<VerifyTokenResult> {\n logger.debug('[Auth] Verifying token');\n\n // First check if token is expired locally\n if (isTokenExpired(token)) {\n return {\n valid: false,\n error: 'Token expired',\n };\n }\n\n const query = `\n query VerifyToken($token: String!) {\n verifyToken(token: $token) {\n valid\n payload\n error\n }\n }\n `;\n\n try {\n const response = await this.client.query<{ verifyToken: VerifyTokenResult }>(query, { token }, this.context);\n\n logger.debug('[Auth] Token verification result', { valid: response.verifyToken.valid });\n\n return response.verifyToken;\n } catch (error) {\n logger.error('[Auth] Token verification failed', { error });\n return {\n valid: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n\n /**\n * Decode token without verification\n */\n public decodeToken(token: string): TokenPayload | null {\n const payload = parseJWT(token);\n if (!payload) {\n return null;\n }\n return payload as unknown as TokenPayload;\n }\n\n /**\n * Refresh access token using refresh token\n */\n public async refreshToken(refreshToken: string): Promise<RefreshTokenResult> {\n logger.debug('[Auth] Refreshing token');\n\n const mutation = `\n mutation RefreshToken($refreshToken: String!) {\n refreshToken(refreshToken: $refreshToken) {\n accessToken\n refreshToken\n expiresIn\n }\n }\n `;\n\n try {\n const response = await this.client.query<{ refreshToken: RefreshTokenResult }>(\n mutation,\n { refreshToken },\n this.context\n );\n\n logger.info('[Auth] Token refreshed successfully');\n\n return response.refreshToken;\n } catch (error) {\n logger.error('[Auth] Token refresh failed', { error });\n throw new AuthenticationError('Failed to refresh token', {\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n /**\n * Validate user has specific permission\n */\n public async validatePermission(userId: string, permission: string, resourceId?: string): Promise<boolean> {\n logger.debug('[Auth] Validating permission', { userId, permission, resourceId });\n\n const query = `\n query ValidatePermission($userId: ID!, $permission: String!, $resourceId: ID) {\n validatePermission(userId: $userId, permission: $permission, resourceId: $resourceId) {\n allowed\n }\n }\n `;\n\n try {\n const response = await this.client.query<{\n validatePermission: { allowed: boolean };\n }>(query, { userId, permission, resourceId }, this.context);\n\n logger.debug('[Auth] Permission validation result', {\n allowed: response.validatePermission.allowed,\n });\n\n return response.validatePermission.allowed;\n } catch (error) {\n logger.error('[Auth] Permission validation failed', { error });\n return false;\n }\n }\n\n /**\n * Check if token is valid and not expired\n */\n public isTokenValid(token: string): boolean {\n return !isTokenExpired(token);\n }\n\n /**\n * Get user ID from token\n */\n public getUserIdFromToken(token: string): string | null {\n const payload = this.decodeToken(token);\n return payload?.user_id || null;\n }\n\n /**\n * Get workspace ID from token\n */\n public getWorkspaceIdFromToken(token: string): string | null {\n const payload = this.decodeToken(token);\n return payload?.workspace_id || null;\n }\n\n /**\n * Extract all claims from token\n */\n public getTokenClaims(token: string): Record<string, unknown> | null {\n const payload = parseJWT(token);\n return payload;\n }\n\n /**\n * Check if token will expire soon (within given seconds)\n */\n public willExpireSoon(token: string, withinSeconds: number = 300): boolean {\n const payload = this.decodeToken(token);\n if (!payload || typeof payload.exp !== 'number') {\n return true;\n }\n\n const now = Math.floor(Date.now() / 1000);\n return payload.exp - now < withinSeconds;\n }\n}\n"]}