@seaverse/data-service-sdk 0.3.0 → 0.5.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/README.md +198 -32
- package/dist/browser.js +4266 -0
- package/dist/browser.js.map +1 -0
- package/dist/browser.umd.js +4279 -0
- package/dist/browser.umd.js.map +1 -0
- package/dist/index.cjs +91 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +85 -6
- package/dist/index.js +90 -1
- package/dist/index.js.map +1 -1
- package/package.json +7 -1
package/dist/index.cjs
CHANGED
|
@@ -265,8 +265,99 @@ class DataServiceClient {
|
|
|
265
265
|
}
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
+
/**
|
|
269
|
+
* Create Firebase configuration from Firestore token response
|
|
270
|
+
*
|
|
271
|
+
* This helper function extracts the Firebase config from the token response,
|
|
272
|
+
* making it easy to initialize Firebase app.
|
|
273
|
+
*
|
|
274
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
275
|
+
* @returns Firebase configuration object ready for initializeApp()
|
|
276
|
+
*
|
|
277
|
+
* @example
|
|
278
|
+
* ```typescript
|
|
279
|
+
* import { initializeApp } from 'firebase/app';
|
|
280
|
+
* import { getFirebaseConfig } from '@seaverse/data-service-sdk';
|
|
281
|
+
*
|
|
282
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
283
|
+
* const firebaseConfig = getFirebaseConfig(tokenResponse);
|
|
284
|
+
*
|
|
285
|
+
* const app = initializeApp(firebaseConfig);
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
function getFirebaseConfig(tokenResponse) {
|
|
289
|
+
return {
|
|
290
|
+
apiKey: tokenResponse.web_api_key,
|
|
291
|
+
projectId: tokenResponse.project_id,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Initialize Firebase with Firestore token response (browser only)
|
|
296
|
+
*
|
|
297
|
+
* This is a convenience function that automatically:
|
|
298
|
+
* 1. Creates Firebase config from token response
|
|
299
|
+
* 2. Initializes Firebase app
|
|
300
|
+
* 3. Signs in with the custom token
|
|
301
|
+
* 4. Returns authenticated Firebase instances
|
|
302
|
+
*
|
|
303
|
+
* IMPORTANT: This function requires Firebase SDK to be installed separately:
|
|
304
|
+
* npm install firebase
|
|
305
|
+
*
|
|
306
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
307
|
+
* @returns Object containing initialized Firebase app, auth, and db instances
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* ```typescript
|
|
311
|
+
* import { initializeWithToken } from '@seaverse/data-service-sdk';
|
|
312
|
+
*
|
|
313
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
314
|
+
* const { app, auth, db, userId, appId } = await initializeWithToken(tokenResponse);
|
|
315
|
+
*
|
|
316
|
+
* // Ready to use Firestore!
|
|
317
|
+
* const snapshot = await getDocs(collection(db, `appData/${appId}/publicData/posts`));
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
async function initializeWithToken(tokenResponse) {
|
|
321
|
+
// Check if Firebase SDK is available
|
|
322
|
+
let initializeApp;
|
|
323
|
+
let getAuth;
|
|
324
|
+
let signInWithCustomToken;
|
|
325
|
+
let getFirestore;
|
|
326
|
+
try {
|
|
327
|
+
// Try to import Firebase modules
|
|
328
|
+
const firebaseApp = await import('firebase/app');
|
|
329
|
+
const firebaseAuth = await import('firebase/auth');
|
|
330
|
+
const firebaseFirestore = await import('firebase/firestore');
|
|
331
|
+
initializeApp = firebaseApp.initializeApp;
|
|
332
|
+
getAuth = firebaseAuth.getAuth;
|
|
333
|
+
signInWithCustomToken = firebaseAuth.signInWithCustomToken;
|
|
334
|
+
getFirestore = firebaseFirestore.getFirestore;
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
throw new Error('Firebase SDK not found. Please install it: npm install firebase\n' +
|
|
338
|
+
'Or import manually and use getFirebaseConfig() helper instead.');
|
|
339
|
+
}
|
|
340
|
+
// Initialize Firebase
|
|
341
|
+
const config = getFirebaseConfig(tokenResponse);
|
|
342
|
+
const app = initializeApp(config);
|
|
343
|
+
// Sign in with custom token
|
|
344
|
+
const auth = getAuth(app);
|
|
345
|
+
await signInWithCustomToken(auth, tokenResponse.custom_token);
|
|
346
|
+
// Get Firestore instance
|
|
347
|
+
const db = getFirestore(app);
|
|
348
|
+
return {
|
|
349
|
+
app,
|
|
350
|
+
auth,
|
|
351
|
+
db,
|
|
352
|
+
userId: tokenResponse.user_id,
|
|
353
|
+
appId: tokenResponse.app_id || '',
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
|
|
268
357
|
exports.DEFAULT_BASE_URL = DEFAULT_BASE_URL;
|
|
269
358
|
exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
|
|
270
359
|
exports.DataServiceClient = DataServiceClient;
|
|
271
360
|
exports.ENDPOINTS = ENDPOINTS;
|
|
361
|
+
exports.getFirebaseConfig = getFirebaseConfig;
|
|
362
|
+
exports.initializeWithToken = initializeWithToken;
|
|
272
363
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/config.ts","../src/client.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/config.ts","../src/client.ts","../src/helpers.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -127,9 +127,24 @@ interface FirestoreTokenResponse {
|
|
|
127
127
|
* Custom Token itself does not expire, but the ID Token it generates expires after 1 hour
|
|
128
128
|
*/
|
|
129
129
|
custom_token: string;
|
|
130
|
+
/**
|
|
131
|
+
* Firebase Web API Key
|
|
132
|
+
* Use this to initialize Firebase app along with project_id
|
|
133
|
+
* This is automatically provided by the backend
|
|
134
|
+
*
|
|
135
|
+
* Example:
|
|
136
|
+
* ```typescript
|
|
137
|
+
* import { initializeApp } from 'firebase/app';
|
|
138
|
+
* const app = initializeApp({
|
|
139
|
+
* apiKey: response.web_api_key,
|
|
140
|
+
* projectId: response.project_id
|
|
141
|
+
* });
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
web_api_key: string;
|
|
130
145
|
/**
|
|
131
146
|
* Firebase Project ID
|
|
132
|
-
* Use this to initialize Firebase app
|
|
147
|
+
* Use this to initialize Firebase app
|
|
133
148
|
*/
|
|
134
149
|
project_id: string;
|
|
135
150
|
/**
|
|
@@ -151,15 +166,15 @@ interface FirestoreTokenResponse {
|
|
|
151
166
|
*/
|
|
152
167
|
user_id: string;
|
|
153
168
|
/**
|
|
154
|
-
* User
|
|
169
|
+
* User type - Determines access permissions
|
|
155
170
|
* - 'guest': Can read publicRead/publicData, write publicData
|
|
156
171
|
* - 'user': Can read publicRead/publicData, write publicData, read/write own userData
|
|
157
172
|
* - 'admin' or 'appadmin': Can also write to publicRead data
|
|
158
173
|
*/
|
|
159
|
-
|
|
174
|
+
user_type: string;
|
|
160
175
|
/**
|
|
161
176
|
* Token expiration time in seconds (typically 3600 = 1 hour)
|
|
162
|
-
* After this time, you need to generate a new token
|
|
177
|
+
* After this time, you need to generate a new token
|
|
163
178
|
*/
|
|
164
179
|
expires_in: number;
|
|
165
180
|
}
|
|
@@ -418,5 +433,69 @@ declare const ENDPOINTS: {
|
|
|
418
433
|
readonly FIRESTORE_GUEST_TOKEN: "/api/v1/firestore/guest-token";
|
|
419
434
|
};
|
|
420
435
|
|
|
421
|
-
|
|
422
|
-
|
|
436
|
+
/**
|
|
437
|
+
* Firebase initialization configuration
|
|
438
|
+
* Generated from Firestore token response
|
|
439
|
+
*/
|
|
440
|
+
interface FirebaseConfig {
|
|
441
|
+
apiKey: string;
|
|
442
|
+
projectId: string;
|
|
443
|
+
[key: string]: any;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Create Firebase configuration from Firestore token response
|
|
447
|
+
*
|
|
448
|
+
* This helper function extracts the Firebase config from the token response,
|
|
449
|
+
* making it easy to initialize Firebase app.
|
|
450
|
+
*
|
|
451
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
452
|
+
* @returns Firebase configuration object ready for initializeApp()
|
|
453
|
+
*
|
|
454
|
+
* @example
|
|
455
|
+
* ```typescript
|
|
456
|
+
* import { initializeApp } from 'firebase/app';
|
|
457
|
+
* import { getFirebaseConfig } from '@seaverse/data-service-sdk';
|
|
458
|
+
*
|
|
459
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
460
|
+
* const firebaseConfig = getFirebaseConfig(tokenResponse);
|
|
461
|
+
*
|
|
462
|
+
* const app = initializeApp(firebaseConfig);
|
|
463
|
+
* ```
|
|
464
|
+
*/
|
|
465
|
+
declare function getFirebaseConfig(tokenResponse: FirestoreTokenResponse): FirebaseConfig;
|
|
466
|
+
/**
|
|
467
|
+
* Initialize Firebase with Firestore token response (browser only)
|
|
468
|
+
*
|
|
469
|
+
* This is a convenience function that automatically:
|
|
470
|
+
* 1. Creates Firebase config from token response
|
|
471
|
+
* 2. Initializes Firebase app
|
|
472
|
+
* 3. Signs in with the custom token
|
|
473
|
+
* 4. Returns authenticated Firebase instances
|
|
474
|
+
*
|
|
475
|
+
* IMPORTANT: This function requires Firebase SDK to be installed separately:
|
|
476
|
+
* npm install firebase
|
|
477
|
+
*
|
|
478
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
479
|
+
* @returns Object containing initialized Firebase app, auth, and db instances
|
|
480
|
+
*
|
|
481
|
+
* @example
|
|
482
|
+
* ```typescript
|
|
483
|
+
* import { initializeWithToken } from '@seaverse/data-service-sdk';
|
|
484
|
+
*
|
|
485
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
486
|
+
* const { app, auth, db, userId, appId } = await initializeWithToken(tokenResponse);
|
|
487
|
+
*
|
|
488
|
+
* // Ready to use Firestore!
|
|
489
|
+
* const snapshot = await getDocs(collection(db, `appData/${appId}/publicData/posts`));
|
|
490
|
+
* ```
|
|
491
|
+
*/
|
|
492
|
+
declare function initializeWithToken(tokenResponse: FirestoreTokenResponse): Promise<{
|
|
493
|
+
app: any;
|
|
494
|
+
auth: any;
|
|
495
|
+
db: any;
|
|
496
|
+
userId: string;
|
|
497
|
+
appId: string;
|
|
498
|
+
}>;
|
|
499
|
+
|
|
500
|
+
export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS, getFirebaseConfig, initializeWithToken };
|
|
501
|
+
export type { ApiError, ApiResponse, DataServiceClientOptions, FirebaseConfig, FirestoreTokenResponse, GenerateFirestoreTokenRequest, GenerateGuestFirestoreTokenRequest };
|
package/dist/index.js
CHANGED
|
@@ -263,5 +263,94 @@ class DataServiceClient {
|
|
|
263
263
|
}
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
|
|
266
|
+
/**
|
|
267
|
+
* Create Firebase configuration from Firestore token response
|
|
268
|
+
*
|
|
269
|
+
* This helper function extracts the Firebase config from the token response,
|
|
270
|
+
* making it easy to initialize Firebase app.
|
|
271
|
+
*
|
|
272
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
273
|
+
* @returns Firebase configuration object ready for initializeApp()
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* import { initializeApp } from 'firebase/app';
|
|
278
|
+
* import { getFirebaseConfig } from '@seaverse/data-service-sdk';
|
|
279
|
+
*
|
|
280
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
281
|
+
* const firebaseConfig = getFirebaseConfig(tokenResponse);
|
|
282
|
+
*
|
|
283
|
+
* const app = initializeApp(firebaseConfig);
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
function getFirebaseConfig(tokenResponse) {
|
|
287
|
+
return {
|
|
288
|
+
apiKey: tokenResponse.web_api_key,
|
|
289
|
+
projectId: tokenResponse.project_id,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Initialize Firebase with Firestore token response (browser only)
|
|
294
|
+
*
|
|
295
|
+
* This is a convenience function that automatically:
|
|
296
|
+
* 1. Creates Firebase config from token response
|
|
297
|
+
* 2. Initializes Firebase app
|
|
298
|
+
* 3. Signs in with the custom token
|
|
299
|
+
* 4. Returns authenticated Firebase instances
|
|
300
|
+
*
|
|
301
|
+
* IMPORTANT: This function requires Firebase SDK to be installed separately:
|
|
302
|
+
* npm install firebase
|
|
303
|
+
*
|
|
304
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
305
|
+
* @returns Object containing initialized Firebase app, auth, and db instances
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* ```typescript
|
|
309
|
+
* import { initializeWithToken } from '@seaverse/data-service-sdk';
|
|
310
|
+
*
|
|
311
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
312
|
+
* const { app, auth, db, userId, appId } = await initializeWithToken(tokenResponse);
|
|
313
|
+
*
|
|
314
|
+
* // Ready to use Firestore!
|
|
315
|
+
* const snapshot = await getDocs(collection(db, `appData/${appId}/publicData/posts`));
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
async function initializeWithToken(tokenResponse) {
|
|
319
|
+
// Check if Firebase SDK is available
|
|
320
|
+
let initializeApp;
|
|
321
|
+
let getAuth;
|
|
322
|
+
let signInWithCustomToken;
|
|
323
|
+
let getFirestore;
|
|
324
|
+
try {
|
|
325
|
+
// Try to import Firebase modules
|
|
326
|
+
const firebaseApp = await import('firebase/app');
|
|
327
|
+
const firebaseAuth = await import('firebase/auth');
|
|
328
|
+
const firebaseFirestore = await import('firebase/firestore');
|
|
329
|
+
initializeApp = firebaseApp.initializeApp;
|
|
330
|
+
getAuth = firebaseAuth.getAuth;
|
|
331
|
+
signInWithCustomToken = firebaseAuth.signInWithCustomToken;
|
|
332
|
+
getFirestore = firebaseFirestore.getFirestore;
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
throw new Error('Firebase SDK not found. Please install it: npm install firebase\n' +
|
|
336
|
+
'Or import manually and use getFirebaseConfig() helper instead.');
|
|
337
|
+
}
|
|
338
|
+
// Initialize Firebase
|
|
339
|
+
const config = getFirebaseConfig(tokenResponse);
|
|
340
|
+
const app = initializeApp(config);
|
|
341
|
+
// Sign in with custom token
|
|
342
|
+
const auth = getAuth(app);
|
|
343
|
+
await signInWithCustomToken(auth, tokenResponse.custom_token);
|
|
344
|
+
// Get Firestore instance
|
|
345
|
+
const db = getFirestore(app);
|
|
346
|
+
return {
|
|
347
|
+
app,
|
|
348
|
+
auth,
|
|
349
|
+
db,
|
|
350
|
+
userId: tokenResponse.user_id,
|
|
351
|
+
appId: tokenResponse.app_id || '',
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS, getFirebaseConfig, initializeWithToken };
|
|
267
356
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/config.ts","../src/client.ts"],"sourcesContent":[null,null],"names":[],"mappings":";;AAAA;;AAEG;AAEH;;AAEG;AACI,MAAM,gBAAgB,GAAG;AAEhC;;AAEG;AACI,MAAM,eAAe,GAAG;AAE/B;;AAEG;AACI,MAAM,SAAS,GAAG;AACvB,IAAA,eAAe,EAAE,yBAAyB;AAC1C,IAAA,qBAAqB,EAAE,+BAA+B;;;ACaxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuEG;MACU,iBAAiB,CAAA;AAG5B,IAAA,WAAA,CAAY,UAAoC,EAAE,EAAA;AAChD,QAAA,MAAM,EACJ,OAAO,GAAG,gBAAgB,EAC1B,OAAO,GAAG,eAAe,EACzB,OAAO,GAAG,EAAE,GACb,GAAG,OAAO;AAEX,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;YAChC,OAAO;YACP,OAAO;AACP,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,GAAG,OAAO;AACX,aAAA;AACF,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC1C,CAAC,QAAQ,KAAI;;YAEX,IAAI,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AACtD,gBAAA,IAAI,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE;;AAEtD,oBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAwB;oBACrD,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE;AAC9C,wBAAA,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI;oBAClC;AAAO,yBAAA,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE;;AAEjC,wBAAA,MAAM,KAAK,GAAa;4BACtB,IAAI,EAAE,WAAW,CAAC,IAAI;4BACtB,OAAO,EAAE,WAAW,CAAC,OAAO;4BAC5B,UAAU,EAAE,WAAW,CAAC,UAAU;yBACnC;AACD,wBAAA,MAAM,KAAK;oBACb;gBACF;YACF;AACA,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,EACD,CAAC,KAAiB,KAAI;;AAEpB,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;AACxB,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAgB;gBAChD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;YACpD;AACA,YAAA,MAAM,KAAK;AACb,QAAA,CAAC,CACF;IACH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDG;AACH,IAAA,MAAM,sBAAsB,CAC1B,OAAsC,EACtC,OAA4B,EAAA;AAE5B,QAAA,MAAM,MAAM,GAAuB;AACjC,YAAA,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,SAAS,CAAC,eAAe;AAC9B,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,OAAO;SACX;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAyB,MAAM,CAAC;QACjF,OAAO,QAAQ,CAAC,IAAI;IACtB;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDG;AACH,IAAA,MAAM,2BAA2B,CAC/B,OAA2C,EAC3C,OAA4B,EAAA;AAE5B,QAAA,MAAM,MAAM,GAAuB;AACjC,YAAA,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,SAAS,CAAC,qBAAqB;AACpC,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,OAAO;SACX;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAyB,MAAM,CAAC;QACjF,OAAO,QAAQ,CAAC,IAAI;IACtB;AACD;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/config.ts","../src/client.ts","../src/helpers.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seaverse/data-service-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "SDK for SeaVerse Data Service - Firestore token management with three-tier permission model",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
7
7
|
"module": "dist/index.js",
|
|
8
|
+
"browser": "dist/browser.js",
|
|
8
9
|
"types": "dist/index.d.ts",
|
|
9
10
|
"exports": {
|
|
10
11
|
".": {
|
|
12
|
+
"browser": "./dist/browser.js",
|
|
11
13
|
"import": "./dist/index.js",
|
|
12
14
|
"require": "./dist/index.cjs",
|
|
13
15
|
"types": "./dist/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./browser": {
|
|
18
|
+
"import": "./dist/browser.js",
|
|
19
|
+
"script": "./dist/browser.umd.js"
|
|
14
20
|
}
|
|
15
21
|
},
|
|
16
22
|
"files": [
|