@dotdo/do 0.1.2 → 0.1.4

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.
@@ -16,4 +16,5 @@ export type { DigitalObjectIdentity, DigitalObjectRef, DOType, WellKnownType, DO
16
16
  export { resolveTypeUrl } from '../types/identity';
17
17
  export * from './domains';
18
18
  export * from './colo';
19
+ export { DOAuthStorage } from './oauth';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../do/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,aAAa,EACb,OAAO,EACP,KAAK,KAAK,EACV,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,IAAI,gBAAgB,EACpC,KAAK,UAAU,IAAI,eAAe,GACnC,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,MAAM,EACN,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGlD,cAAc,WAAW,CAAA;AAGzB,cAAc,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../do/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,aAAa,EACb,OAAO,EACP,KAAK,KAAK,EACV,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,IAAI,gBAAgB,EACpC,KAAK,UAAU,IAAI,eAAe,GACnC,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,MAAM,EACN,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGlD,cAAc,WAAW,CAAA;AAGzB,cAAc,QAAQ,CAAA;AAGtB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA"}
package/dist/do/index.js CHANGED
@@ -20,4 +20,6 @@ export { resolveTypeUrl } from '../types/identity';
20
20
  export * from './domains';
21
21
  // Colo awareness (geo-distribution, replication)
22
22
  export * from './colo';
23
+ // OAuth storage (implements @dotdo/oauth OAuthStorage interface)
24
+ export { DOAuthStorage } from './oauth';
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../do/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,OAAO,GAIR,MAAM,iBAAiB,CAAA;AAExB,mBAAmB;AACnB,OAAO,EACL,aAAa,GAOd,MAAM,SAAS,CAAA;AAEhB,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAIzB,MAAM,eAAe,CAAA;AAYtB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,oBAAoB;AACpB,cAAc,WAAW,CAAA;AAEzB,iDAAiD;AACjD,cAAc,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../do/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,OAAO,GAIR,MAAM,iBAAiB,CAAA;AAExB,mBAAmB;AACnB,OAAO,EACL,aAAa,GAOd,MAAM,SAAS,CAAA;AAEhB,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAIzB,MAAM,eAAe,CAAA;AAYtB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,oBAAoB;AACpB,cAAc,WAAW,CAAA;AAEzB,iDAAiD;AACjD,cAAc,QAAQ,CAAA;AAEtB,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * DOAuthStorage - OAuth 2.1 storage implementation using Durable Object SQLite
3
+ *
4
+ * Implements the OAuthStorage interface from @dotdo/oauth, providing
5
+ * persistent storage for OAuth users, organizations, clients, grants,
6
+ * and tokens using the DigitalObject state system.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { DigitalObject } from '@dotdo/do'
11
+ * import { createOAuth21Server } from '@dotdo/oauth'
12
+ * import { DOAuthStorage } from '@dotdo/do/oauth'
13
+ *
14
+ * class AuthDO extends DigitalObject {
15
+ * async fetch(request: Request) {
16
+ * const storage = new DOAuthStorage(this.state)
17
+ * const server = createOAuth21Server({
18
+ * issuer: 'https://mcp.do',
19
+ * storage,
20
+ * upstream: { provider: 'workos', ... }
21
+ * })
22
+ * return server.fetch(request)
23
+ * }
24
+ * }
25
+ * ```
26
+ *
27
+ * @module do/oauth
28
+ */
29
+ import type { OAuthStorage, OAuthUser, OAuthOrganization, OAuthClient, OAuthAuthorizationCode, OAuthAccessToken, OAuthRefreshToken, OAuthGrant, ListOptions } from '@dotdo/oauth';
30
+ import type { DOState } from './state';
31
+ /**
32
+ * DOAuthStorage - OAuth storage backed by Durable Object SQLite
33
+ *
34
+ * Uses the DigitalObject state system for persistent storage.
35
+ * All data is stored with appropriate prefixes to enable efficient
36
+ * listing and lookup operations.
37
+ */
38
+ export declare class DOAuthStorage implements OAuthStorage {
39
+ private state;
40
+ constructor(state: DOState);
41
+ getUser(id: string): Promise<OAuthUser | null>;
42
+ getUserByEmail(email: string): Promise<OAuthUser | null>;
43
+ getUserByProvider(provider: string, providerId: string): Promise<OAuthUser | null>;
44
+ saveUser(user: OAuthUser): Promise<void>;
45
+ deleteUser(id: string): Promise<void>;
46
+ listUsers(options?: ListOptions): Promise<OAuthUser[]>;
47
+ getOrganization(id: string): Promise<OAuthOrganization | null>;
48
+ getOrganizationBySlug(slug: string): Promise<OAuthOrganization | null>;
49
+ getOrganizationByDomain(domain: string): Promise<OAuthOrganization | null>;
50
+ saveOrganization(org: OAuthOrganization): Promise<void>;
51
+ deleteOrganization(id: string): Promise<void>;
52
+ listOrganizations(options?: ListOptions): Promise<OAuthOrganization[]>;
53
+ getClient(clientId: string): Promise<OAuthClient | null>;
54
+ saveClient(client: OAuthClient): Promise<void>;
55
+ deleteClient(clientId: string): Promise<void>;
56
+ listClients(options?: ListOptions): Promise<OAuthClient[]>;
57
+ saveAuthorizationCode(authCode: OAuthAuthorizationCode): Promise<void>;
58
+ consumeAuthorizationCode(code: string): Promise<OAuthAuthorizationCode | null>;
59
+ saveAccessToken(accessToken: OAuthAccessToken): Promise<void>;
60
+ getAccessToken(token: string): Promise<OAuthAccessToken | null>;
61
+ revokeAccessToken(token: string): Promise<void>;
62
+ saveRefreshToken(refreshToken: OAuthRefreshToken): Promise<void>;
63
+ getRefreshToken(token: string): Promise<OAuthRefreshToken | null>;
64
+ revokeRefreshToken(token: string): Promise<void>;
65
+ revokeAllUserTokens(userId: string): Promise<void>;
66
+ revokeAllClientTokens(clientId: string): Promise<void>;
67
+ getGrant(userId: string, clientId: string): Promise<OAuthGrant | null>;
68
+ saveGrant(grant: OAuthGrant): Promise<void>;
69
+ revokeGrant(userId: string, clientId: string): Promise<void>;
70
+ listUserGrants(userId: string): Promise<OAuthGrant[]>;
71
+ }
72
+ export default DOAuthStorage;
73
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../do/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,334 @@
1
+ /**
2
+ * DOAuthStorage - OAuth 2.1 storage implementation using Durable Object SQLite
3
+ *
4
+ * Implements the OAuthStorage interface from @dotdo/oauth, providing
5
+ * persistent storage for OAuth users, organizations, clients, grants,
6
+ * and tokens using the DigitalObject state system.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { DigitalObject } from '@dotdo/do'
11
+ * import { createOAuth21Server } from '@dotdo/oauth'
12
+ * import { DOAuthStorage } from '@dotdo/do/oauth'
13
+ *
14
+ * class AuthDO extends DigitalObject {
15
+ * async fetch(request: Request) {
16
+ * const storage = new DOAuthStorage(this.state)
17
+ * const server = createOAuth21Server({
18
+ * issuer: 'https://mcp.do',
19
+ * storage,
20
+ * upstream: { provider: 'workos', ... }
21
+ * })
22
+ * return server.fetch(request)
23
+ * }
24
+ * }
25
+ * ```
26
+ *
27
+ * @module do/oauth
28
+ */
29
+ /**
30
+ * Key prefixes for different OAuth entities
31
+ * @internal
32
+ */
33
+ const PREFIXES = {
34
+ user: 'oauth:user',
35
+ userByEmail: 'oauth:user:email',
36
+ userByProvider: 'oauth:user:provider',
37
+ org: 'oauth:org',
38
+ orgBySlug: 'oauth:org:slug',
39
+ orgByDomain: 'oauth:org:domain',
40
+ client: 'oauth:client',
41
+ code: 'oauth:code',
42
+ accessToken: 'oauth:access',
43
+ refreshToken: 'oauth:refresh',
44
+ grant: 'oauth:grant',
45
+ };
46
+ /**
47
+ * DOAuthStorage - OAuth storage backed by Durable Object SQLite
48
+ *
49
+ * Uses the DigitalObject state system for persistent storage.
50
+ * All data is stored with appropriate prefixes to enable efficient
51
+ * listing and lookup operations.
52
+ */
53
+ export class DOAuthStorage {
54
+ state;
55
+ constructor(state) {
56
+ this.state = state;
57
+ }
58
+ // ═══════════════════════════════════════════════════════════════════════════
59
+ // User Operations
60
+ // ═══════════════════════════════════════════════════════════════════════════
61
+ async getUser(id) {
62
+ return this.state.get(`${PREFIXES.user}:${id}`);
63
+ }
64
+ async getUserByEmail(email) {
65
+ const userId = await this.state.get(`${PREFIXES.userByEmail}:${email.toLowerCase()}`);
66
+ if (!userId)
67
+ return null;
68
+ return this.getUser(userId);
69
+ }
70
+ async getUserByProvider(provider, providerId) {
71
+ const userId = await this.state.get(`${PREFIXES.userByProvider}:${provider}:${providerId}`);
72
+ if (!userId)
73
+ return null;
74
+ return this.getUser(userId);
75
+ }
76
+ async saveUser(user) {
77
+ // Save the user
78
+ await this.state.set(`${PREFIXES.user}:${user.id}`, user);
79
+ // Create email index
80
+ if (user.email) {
81
+ await this.state.set(`${PREFIXES.userByEmail}:${user.email.toLowerCase()}`, user.id);
82
+ }
83
+ // Create provider index
84
+ if (user.provider && user.providerId) {
85
+ await this.state.set(`${PREFIXES.userByProvider}:${user.provider}:${user.providerId}`, user.id);
86
+ }
87
+ }
88
+ async deleteUser(id) {
89
+ const user = await this.getUser(id);
90
+ if (!user)
91
+ return;
92
+ // Delete indexes
93
+ if (user.email) {
94
+ await this.state.delete(`${PREFIXES.userByEmail}:${user.email.toLowerCase()}`);
95
+ }
96
+ if (user.provider && user.providerId) {
97
+ await this.state.delete(`${PREFIXES.userByProvider}:${user.provider}:${user.providerId}`);
98
+ }
99
+ // Delete the user
100
+ await this.state.delete(`${PREFIXES.user}:${id}`);
101
+ }
102
+ async listUsers(options) {
103
+ const result = await this.state.list({ prefix: `${PREFIXES.user}:` });
104
+ const users = [];
105
+ for (const key of result.keys) {
106
+ const user = await this.state.get(key);
107
+ if (user) {
108
+ if (options?.organizationId && user.organizationId !== options.organizationId) {
109
+ continue;
110
+ }
111
+ users.push(user);
112
+ if (options?.limit && users.length >= options.limit) {
113
+ break;
114
+ }
115
+ }
116
+ }
117
+ return users;
118
+ }
119
+ // ═══════════════════════════════════════════════════════════════════════════
120
+ // Organization Operations
121
+ // ═══════════════════════════════════════════════════════════════════════════
122
+ async getOrganization(id) {
123
+ return this.state.get(`${PREFIXES.org}:${id}`);
124
+ }
125
+ async getOrganizationBySlug(slug) {
126
+ const orgId = await this.state.get(`${PREFIXES.orgBySlug}:${slug.toLowerCase()}`);
127
+ if (!orgId)
128
+ return null;
129
+ return this.getOrganization(orgId);
130
+ }
131
+ async getOrganizationByDomain(domain) {
132
+ const orgId = await this.state.get(`${PREFIXES.orgByDomain}:${domain.toLowerCase()}`);
133
+ if (!orgId)
134
+ return null;
135
+ return this.getOrganization(orgId);
136
+ }
137
+ async saveOrganization(org) {
138
+ // Save the organization
139
+ await this.state.set(`${PREFIXES.org}:${org.id}`, org);
140
+ // Create slug index
141
+ if (org.slug) {
142
+ await this.state.set(`${PREFIXES.orgBySlug}:${org.slug.toLowerCase()}`, org.id);
143
+ }
144
+ // Create domain indexes
145
+ if (org.domains) {
146
+ for (const domain of org.domains) {
147
+ await this.state.set(`${PREFIXES.orgByDomain}:${domain.toLowerCase()}`, org.id);
148
+ }
149
+ }
150
+ }
151
+ async deleteOrganization(id) {
152
+ const org = await this.getOrganization(id);
153
+ if (!org)
154
+ return;
155
+ // Delete slug index
156
+ if (org.slug) {
157
+ await this.state.delete(`${PREFIXES.orgBySlug}:${org.slug.toLowerCase()}`);
158
+ }
159
+ // Delete domain indexes
160
+ if (org.domains) {
161
+ for (const domain of org.domains) {
162
+ await this.state.delete(`${PREFIXES.orgByDomain}:${domain.toLowerCase()}`);
163
+ }
164
+ }
165
+ // Delete the organization
166
+ await this.state.delete(`${PREFIXES.org}:${id}`);
167
+ }
168
+ async listOrganizations(options) {
169
+ const result = await this.state.list({ prefix: `${PREFIXES.org}:` });
170
+ const orgs = [];
171
+ for (const key of result.keys) {
172
+ const org = await this.state.get(key);
173
+ if (org) {
174
+ orgs.push(org);
175
+ if (options?.limit && orgs.length >= options.limit) {
176
+ break;
177
+ }
178
+ }
179
+ }
180
+ return orgs;
181
+ }
182
+ // ═══════════════════════════════════════════════════════════════════════════
183
+ // Client Operations
184
+ // ═══════════════════════════════════════════════════════════════════════════
185
+ async getClient(clientId) {
186
+ return this.state.get(`${PREFIXES.client}:${clientId}`);
187
+ }
188
+ async saveClient(client) {
189
+ await this.state.set(`${PREFIXES.client}:${client.clientId}`, client);
190
+ }
191
+ async deleteClient(clientId) {
192
+ await this.state.delete(`${PREFIXES.client}:${clientId}`);
193
+ }
194
+ async listClients(options) {
195
+ const result = await this.state.list({ prefix: `${PREFIXES.client}:` });
196
+ const clients = [];
197
+ for (const key of result.keys) {
198
+ const client = await this.state.get(key);
199
+ if (client) {
200
+ clients.push(client);
201
+ if (options?.limit && clients.length >= options.limit) {
202
+ break;
203
+ }
204
+ }
205
+ }
206
+ return clients;
207
+ }
208
+ // ═══════════════════════════════════════════════════════════════════════════
209
+ // Authorization Code Operations
210
+ // ═══════════════════════════════════════════════════════════════════════════
211
+ async saveAuthorizationCode(authCode) {
212
+ // Calculate TTL - auth codes should expire (default 10 minutes)
213
+ const ttl = authCode.expiresAt - Date.now();
214
+ await this.state.set(`${PREFIXES.code}:${authCode.code}`, authCode, {
215
+ ttl: ttl > 0 ? ttl : undefined,
216
+ });
217
+ }
218
+ async consumeAuthorizationCode(code) {
219
+ const authCode = await this.state.get(`${PREFIXES.code}:${code}`);
220
+ if (!authCode)
221
+ return null;
222
+ await this.state.delete(`${PREFIXES.code}:${code}`);
223
+ return authCode;
224
+ }
225
+ // ═══════════════════════════════════════════════════════════════════════════
226
+ // Access Token Operations
227
+ // ═══════════════════════════════════════════════════════════════════════════
228
+ async saveAccessToken(accessToken) {
229
+ // Calculate TTL - access tokens should expire
230
+ const ttl = accessToken.expiresAt - Date.now();
231
+ await this.state.set(`${PREFIXES.accessToken}:${accessToken.token}`, accessToken, {
232
+ ttl: ttl > 0 ? ttl : undefined,
233
+ });
234
+ }
235
+ async getAccessToken(token) {
236
+ return this.state.get(`${PREFIXES.accessToken}:${token}`);
237
+ }
238
+ async revokeAccessToken(token) {
239
+ await this.state.delete(`${PREFIXES.accessToken}:${token}`);
240
+ }
241
+ // ═══════════════════════════════════════════════════════════════════════════
242
+ // Refresh Token Operations
243
+ // ═══════════════════════════════════════════════════════════════════════════
244
+ async saveRefreshToken(refreshToken) {
245
+ // Calculate TTL if there's an expiration
246
+ const ttl = refreshToken.expiresAt ? refreshToken.expiresAt - Date.now() : undefined;
247
+ await this.state.set(`${PREFIXES.refreshToken}:${refreshToken.token}`, refreshToken, {
248
+ ttl: ttl && ttl > 0 ? ttl : undefined,
249
+ });
250
+ }
251
+ async getRefreshToken(token) {
252
+ return this.state.get(`${PREFIXES.refreshToken}:${token}`);
253
+ }
254
+ async revokeRefreshToken(token) {
255
+ await this.state.delete(`${PREFIXES.refreshToken}:${token}`);
256
+ }
257
+ async revokeAllUserTokens(userId) {
258
+ // Revoke access tokens
259
+ const accessResult = await this.state.list({ prefix: `${PREFIXES.accessToken}:` });
260
+ for (const key of accessResult.keys) {
261
+ const token = await this.state.get(key);
262
+ if (token && token.userId === userId) {
263
+ await this.state.delete(key);
264
+ }
265
+ }
266
+ // Revoke refresh tokens
267
+ const refreshResult = await this.state.list({ prefix: `${PREFIXES.refreshToken}:` });
268
+ for (const key of refreshResult.keys) {
269
+ const token = await this.state.get(key);
270
+ if (token && token.userId === userId) {
271
+ await this.state.delete(key);
272
+ }
273
+ }
274
+ }
275
+ async revokeAllClientTokens(clientId) {
276
+ // Revoke access tokens
277
+ const accessResult = await this.state.list({ prefix: `${PREFIXES.accessToken}:` });
278
+ for (const key of accessResult.keys) {
279
+ const token = await this.state.get(key);
280
+ if (token && token.clientId === clientId) {
281
+ await this.state.delete(key);
282
+ }
283
+ }
284
+ // Revoke refresh tokens
285
+ const refreshResult = await this.state.list({ prefix: `${PREFIXES.refreshToken}:` });
286
+ for (const key of refreshResult.keys) {
287
+ const token = await this.state.get(key);
288
+ if (token && token.clientId === clientId) {
289
+ await this.state.delete(key);
290
+ }
291
+ }
292
+ }
293
+ // ═══════════════════════════════════════════════════════════════════════════
294
+ // Grant Operations
295
+ // ═══════════════════════════════════════════════════════════════════════════
296
+ async getGrant(userId, clientId) {
297
+ return this.state.get(`${PREFIXES.grant}:${userId}:${clientId}`);
298
+ }
299
+ async saveGrant(grant) {
300
+ await this.state.set(`${PREFIXES.grant}:${grant.userId}:${grant.clientId}`, grant);
301
+ }
302
+ async revokeGrant(userId, clientId) {
303
+ // Delete the grant
304
+ await this.state.delete(`${PREFIXES.grant}:${userId}:${clientId}`);
305
+ // Revoke associated tokens
306
+ const accessResult = await this.state.list({ prefix: `${PREFIXES.accessToken}:` });
307
+ for (const key of accessResult.keys) {
308
+ const token = await this.state.get(key);
309
+ if (token && token.userId === userId && token.clientId === clientId) {
310
+ await this.state.delete(key);
311
+ }
312
+ }
313
+ const refreshResult = await this.state.list({ prefix: `${PREFIXES.refreshToken}:` });
314
+ for (const key of refreshResult.keys) {
315
+ const token = await this.state.get(key);
316
+ if (token && token.userId === userId && token.clientId === clientId) {
317
+ await this.state.delete(key);
318
+ }
319
+ }
320
+ }
321
+ async listUserGrants(userId) {
322
+ const result = await this.state.list({ prefix: `${PREFIXES.grant}:${userId}:` });
323
+ const grants = [];
324
+ for (const key of result.keys) {
325
+ const grant = await this.state.get(key);
326
+ if (grant) {
327
+ grants.push(grant);
328
+ }
329
+ }
330
+ return grants;
331
+ }
332
+ }
333
+ export default DOAuthStorage;
334
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../do/oauth.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotdo/do",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Digital Object - Every business entity IS a Durable Object. Unified edge-native platform with CRUD APIs, SDK, AI, payments, and more.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -66,8 +66,26 @@
66
66
  "./ai": {
67
67
  "types": "./dist/ai/index.d.ts",
68
68
  "import": "./dist/ai/index.js"
69
+ },
70
+ "./oauth": {
71
+ "types": "./dist/do/oauth.d.ts",
72
+ "import": "./dist/do/oauth.js"
69
73
  }
70
74
  },
75
+ "scripts": {
76
+ "build": "tsc -p tsconfig.build.json",
77
+ "check": "tsc --noEmit",
78
+ "clean": "rm -rf dist",
79
+ "prepublishOnly": "pnpm run clean && pnpm run build",
80
+ "test": "vitest",
81
+ "test:run": "vitest run",
82
+ "test:coverage": "vitest run --coverage",
83
+ "test:workers": "vitest run --config vitest.workers.config.ts",
84
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
85
+ "dev": "wrangler dev --config proxy/wrangler.jsonc",
86
+ "deploy": "wrangler deploy --config proxy/wrangler.jsonc",
87
+ "deploy:dry-run": "wrangler deploy --config proxy/wrangler.jsonc --dry-run"
88
+ },
71
89
  "keywords": [
72
90
  "durable-objects",
73
91
  "cloudflare",
@@ -104,6 +122,8 @@
104
122
  ],
105
123
  "sideEffects": false,
106
124
  "dependencies": {
125
+ "@dotdo/apis": "^0.1.0",
126
+ "@dotdo/oauth": "^0.1.1",
107
127
  "ai-database": "^2.1.3",
108
128
  "ai-evaluate": "^2.1.5",
109
129
  "ai-functions": "^2.1.3",
@@ -115,10 +135,12 @@
115
135
  "hono": "^4.7.0",
116
136
  "language-models": "^2.1.3",
117
137
  "mdxui": "^2.1.1",
118
- "oauth.do": "^0.2.0",
119
138
  "rpc.do": "^0.2.0",
120
139
  "zod": "^4.3.6"
121
140
  },
141
+ "optionalDependencies": {
142
+ "oauth.do": "^0.2.0"
143
+ },
122
144
  "devDependencies": {
123
145
  "@cloudflare/vitest-pool-workers": "^0.12.6",
124
146
  "@cloudflare/workers-types": "^4.20241230.0",
@@ -130,24 +152,12 @@
130
152
  "peerDependencies": {
131
153
  "@cloudflare/workers-types": "^4.0.0"
132
154
  },
155
+ "packageManager": "pnpm@9.15.4",
133
156
  "prettier": {
134
157
  "semi": false,
135
158
  "singleQuote": true,
136
159
  "jsxSingleQuote": true,
137
160
  "tabWidth": 2,
138
161
  "printWidth": 160
139
- },
140
- "scripts": {
141
- "build": "tsc -p tsconfig.build.json",
142
- "check": "tsc --noEmit",
143
- "clean": "rm -rf dist",
144
- "test": "vitest",
145
- "test:run": "vitest run",
146
- "test:coverage": "vitest run --coverage",
147
- "test:workers": "vitest run --config vitest.workers.config.ts",
148
- "test:e2e": "vitest run --config vitest.e2e.config.ts",
149
- "dev": "wrangler dev --config proxy/wrangler.jsonc",
150
- "deploy": "wrangler deploy --config proxy/wrangler.jsonc",
151
- "deploy:dry-run": "wrangler deploy --config proxy/wrangler.jsonc --dry-run"
152
162
  }
153
- }
163
+ }