@churchapps/content-providers 0.5.0 → 0.5.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.
- package/dist/index.cjs +1 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -108
- package/dist/index.d.ts +16 -108
- package/dist/index.js +1 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -235,10 +235,7 @@ interface IProvider {
|
|
|
235
235
|
checkMediaLicense?(mediaId: string, auth?: ContentProviderAuthData | null): Promise<MediaLicenseResult | null>;
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
/**
|
|
239
|
-
* Navigate to a specific item using a dot-notation path.
|
|
240
|
-
* Path format: "0.2.1" means items[0].children[2].children[1]
|
|
241
|
-
*/
|
|
238
|
+
/** Navigate to a specific item using dot-notation path (e.g. "0.2.1" → items[0].children[2].children[1]). */
|
|
242
239
|
declare function navigateToPath(instructions: Instructions, path: string): InstructionItem | null;
|
|
243
240
|
|
|
244
241
|
declare class OAuthHelper {
|
|
@@ -269,12 +266,7 @@ declare class DeviceFlowHelper {
|
|
|
269
266
|
calculatePollDelay(baseInterval?: number, slowDownCount?: number): number;
|
|
270
267
|
}
|
|
271
268
|
|
|
272
|
-
/**
|
|
273
|
-
* Shared base for providers: identity metadata, an authenticated fetch wrapper, and a
|
|
274
|
-
* config-driven supportsDeviceFlow. Auth-flow methods (initiateDeviceFlow, buildAuthUrl, ...)
|
|
275
|
-
* deliberately do NOT live here: consumers feature-detect them with `"method" in provider`,
|
|
276
|
-
* so they must exist only on the providers that actually support each flow.
|
|
277
|
-
*/
|
|
269
|
+
/** Base for providers; auth-flow methods are intentionally not here so consumers can feature-detect with `"method" in provider`. */
|
|
278
270
|
declare abstract class BaseProvider implements IProvider {
|
|
279
271
|
abstract readonly id: string;
|
|
280
272
|
abstract readonly name: string;
|
|
@@ -289,16 +281,7 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
289
281
|
supportsDeviceFlow(): boolean;
|
|
290
282
|
}
|
|
291
283
|
|
|
292
|
-
/**
|
|
293
|
-
* APlay Provider
|
|
294
|
-
*
|
|
295
|
-
* Path structure (variable depth based on module products):
|
|
296
|
-
* /modules -> list modules
|
|
297
|
-
* /modules/{moduleId} -> list products OR libraries (depends on module)
|
|
298
|
-
* /modules/{moduleId}/products/{productId} -> list libraries (if module has multiple products)
|
|
299
|
-
* /modules/{moduleId}/products/{productId}/{libraryId} -> media files
|
|
300
|
-
* /modules/{moduleId}/libraries/{libraryId} -> media files (if module has 0-1 products)
|
|
301
|
-
*/
|
|
284
|
+
/** APlay Provider: media curriculum library with OAuth 2.0 auth. */
|
|
302
285
|
declare class APlayProvider extends BaseProvider {
|
|
303
286
|
readonly id = "aplay";
|
|
304
287
|
readonly name = "APlay";
|
|
@@ -317,13 +300,7 @@ declare class APlayProvider extends BaseProvider {
|
|
|
317
300
|
checkMediaLicense(mediaId: string, auth?: ContentProviderAuthData | null): Promise<MediaLicenseResult | null>;
|
|
318
301
|
}
|
|
319
302
|
|
|
320
|
-
/**
|
|
321
|
-
* SignPresenter Provider
|
|
322
|
-
*
|
|
323
|
-
* Path structure:
|
|
324
|
-
* /playlists -> list playlists
|
|
325
|
-
* /playlists/{playlistId} -> list messages (files)
|
|
326
|
-
*/
|
|
303
|
+
/** Browses SignPresenter playlists → messages (files). */
|
|
327
304
|
declare class SignPresenterProvider extends BaseProvider {
|
|
328
305
|
private readonly oauthHelper;
|
|
329
306
|
private readonly deviceFlowHelper;
|
|
@@ -351,18 +328,9 @@ declare class SignPresenterProvider extends BaseProvider {
|
|
|
351
328
|
}
|
|
352
329
|
|
|
353
330
|
/**
|
|
354
|
-
*
|
|
355
|
-
*
|
|
356
|
-
*
|
|
357
|
-
* /lessons -> programs
|
|
358
|
-
* /lessons/{programId} -> studies
|
|
359
|
-
* /lessons/{programId}/{studyId} -> lessons
|
|
360
|
-
* /lessons/{programId}/{studyId}/{lessonId} -> venues
|
|
361
|
-
* /lessons/{programId}/{studyId}/{lessonId}/{venueId} -> playlist files
|
|
362
|
-
*
|
|
363
|
-
* /addons -> categories
|
|
364
|
-
* /addons/{category} -> individual add-ons
|
|
365
|
-
* /addons/{category}/{addOnId} -> single add-on file
|
|
331
|
+
* Path: /lessons → programs, /lessons/{id} → studies, /lessons/{id}/{id} → lessons,
|
|
332
|
+
* /lessons/{id}/{id}/{id} → venues, /lessons/{id}/{id}/{id}/{id} → files;
|
|
333
|
+
* /addons → categories, /addons/{cat} → items, /addons/{cat}/{id} → file.
|
|
366
334
|
*/
|
|
367
335
|
declare class LessonsChurchProvider extends BaseProvider {
|
|
368
336
|
readonly id = "lessonschurch";
|
|
@@ -436,7 +404,6 @@ declare class DropboxProvider extends BaseProvider {
|
|
|
436
404
|
private resolveFileLinks;
|
|
437
405
|
private checkIsLeaf;
|
|
438
406
|
browse(path?: string | null, auth?: ContentProviderAuthData | null): Promise<ContentItem[]>;
|
|
439
|
-
/** Resolve a folder path to playable files (list + media filter + link resolution). */
|
|
440
407
|
private resolveMediaFiles;
|
|
441
408
|
getPlaylist(path: string, auth?: ContentProviderAuthData | null, _resolution?: number): Promise<ContentFile[] | null>;
|
|
442
409
|
getInstructions(path: string, auth?: ContentProviderAuthData | null): Promise<Instructions | null>;
|
|
@@ -450,14 +417,7 @@ declare class DropboxProvider extends BaseProvider {
|
|
|
450
417
|
exchangeCodeForTokens(code: string, codeVerifier: string, redirectUri: string): Promise<ContentProviderAuthData | null>;
|
|
451
418
|
}
|
|
452
419
|
|
|
453
|
-
/**
|
|
454
|
-
* PlanningCenter Provider
|
|
455
|
-
*
|
|
456
|
-
* Path structure:
|
|
457
|
-
* /serviceTypes -> list service types
|
|
458
|
-
* /serviceTypes/{serviceTypeId} -> list plans
|
|
459
|
-
* /serviceTypes/{serviceTypeId}/{planId} -> plan items (leaf)
|
|
460
|
-
*/
|
|
420
|
+
/** Browses Planning Center service types → plans → items. */
|
|
461
421
|
declare class PlanningCenterProvider extends BaseProvider {
|
|
462
422
|
readonly id = "planningcenter";
|
|
463
423
|
readonly name = "Planning Center";
|
|
@@ -472,14 +432,7 @@ declare class PlanningCenterProvider extends BaseProvider {
|
|
|
472
432
|
private getPlanItems;
|
|
473
433
|
}
|
|
474
434
|
|
|
475
|
-
/**
|
|
476
|
-
* BibleProject Provider
|
|
477
|
-
*
|
|
478
|
-
* Path structure:
|
|
479
|
-
* / -> list collections
|
|
480
|
-
* /{collectionSlug} -> list videos in collection
|
|
481
|
-
* /{collectionSlug}/{videoId} -> single video
|
|
482
|
-
*/
|
|
435
|
+
/** BibleProject Provider: Bible education video content. */
|
|
483
436
|
declare class BibleProjectProvider extends BaseProvider {
|
|
484
437
|
readonly id = "bibleproject";
|
|
485
438
|
readonly name = "The Bible Project";
|
|
@@ -499,13 +452,8 @@ declare class BibleProjectProvider extends BaseProvider {
|
|
|
499
452
|
}
|
|
500
453
|
|
|
501
454
|
/**
|
|
502
|
-
*
|
|
503
|
-
*
|
|
504
|
-
* Path structure:
|
|
505
|
-
* / -> list collections (Elementary, Preschool)
|
|
506
|
-
* /{collectionSlug} -> list studies
|
|
507
|
-
* /{collectionSlug}/{studyId} -> list lessons
|
|
508
|
-
* /{collectionSlug}/{studyId}/{lessonId} -> lesson files (leaf)
|
|
455
|
+
* Path structure: / → collections, /{collection} → studies, /{collection}/{study} → lessons,
|
|
456
|
+
* /{collection}/{study}/{lesson} → files (leaf).
|
|
509
457
|
*/
|
|
510
458
|
declare class HighVoltageKidsProvider extends BaseProvider {
|
|
511
459
|
readonly id = "highvoltagekids";
|
|
@@ -522,15 +470,8 @@ declare class HighVoltageKidsProvider extends BaseProvider {
|
|
|
522
470
|
}
|
|
523
471
|
|
|
524
472
|
/**
|
|
525
|
-
*
|
|
526
|
-
*
|
|
527
|
-
* Uses the public Arclight API to browse video content from jesusfilm.org.
|
|
528
|
-
*
|
|
529
|
-
* Path structure:
|
|
530
|
-
* / -> categories (Feature Films, Series, Collections)
|
|
531
|
-
* /{category} -> list items in category
|
|
532
|
-
* /{category}/{id} -> single video (feature film) or container children (series/collection)
|
|
533
|
-
* /{category}/{...containerIds}/{id} -> nested containers or single video (supports arbitrary depth)
|
|
473
|
+
* Path: / → categories, /{category} → items, /{category}/{id} → video or children,
|
|
474
|
+
* /{category}/{...ids}/{id} → nested containers or video.
|
|
534
475
|
*/
|
|
535
476
|
declare class JesusFilmProvider extends BaseProvider {
|
|
536
477
|
readonly id = "jesusfilm";
|
|
@@ -556,17 +497,7 @@ declare class JesusFilmProvider extends BaseProvider {
|
|
|
556
497
|
getInstructions(path: string, _auth?: ContentProviderAuthData | null): Promise<Instructions | null>;
|
|
557
498
|
}
|
|
558
499
|
|
|
559
|
-
/**
|
|
560
|
-
* CBN Provider
|
|
561
|
-
*
|
|
562
|
-
* Faith-based kids' video curriculum. Auth uses OAuth 2.0 Device Flow.
|
|
563
|
-
*
|
|
564
|
-
* Path structure:
|
|
565
|
-
* / -> single "Catalog" root folder
|
|
566
|
-
* /catalog -> course folders (GET /catalog)
|
|
567
|
-
* /catalog/{courseId} -> lesson folders (GET /catalog/{courseId})
|
|
568
|
-
* /catalog/{courseId}/{lessonId} -> video files (GET /lesson-playlist/{lessonId})
|
|
569
|
-
*/
|
|
500
|
+
/** Faith-based kids' video curriculum with OAuth 2.0 Device Flow auth. */
|
|
570
501
|
declare class CbnProvider extends BaseProvider {
|
|
571
502
|
private readonly deviceFlowHelper;
|
|
572
503
|
readonly id = "cbn";
|
|
@@ -585,26 +516,7 @@ declare class CbnProvider extends BaseProvider {
|
|
|
585
516
|
pollDeviceFlowToken(deviceCode: string): Promise<DeviceFlowPollResult>;
|
|
586
517
|
}
|
|
587
518
|
|
|
588
|
-
/**
|
|
589
|
-
* Life.Church Provider
|
|
590
|
-
*
|
|
591
|
-
* Browses the Life.Church kids curriculum from a static catalog generated by
|
|
592
|
-
* scripts/scrape-lifechurch.ts (sourced from life.church/media/* + the
|
|
593
|
-
* open.life.church weekly calendar).
|
|
594
|
-
*
|
|
595
|
-
* Path structure:
|
|
596
|
-
* / -> "scheduled" folder + 4 series
|
|
597
|
-
* /scheduled -> this Sunday's scheduled lessons (one per age group)
|
|
598
|
-
* /scheduled/{scheduledId} -> single video file (leaf)
|
|
599
|
-
* /{seriesId} -> units within the series
|
|
600
|
-
* /{seriesId}/{unitId} -> lessons within the unit
|
|
601
|
-
* /{seriesId}/{unitId}/{lessonId} -> single video file (leaf)
|
|
602
|
-
*
|
|
603
|
-
* Video delivery: ContentFile.url is a direct mp4 on Life.Church's CDN
|
|
604
|
-
* (https://d.life.church/.../{slug}_720p.mp4). Public, no auth, supports
|
|
605
|
-
* range requests — plays in any standard mp4 player including
|
|
606
|
-
* react-native-video.
|
|
607
|
-
*/
|
|
519
|
+
/** Browses Life.Church's kids curriculum from a static catalog (series → units → lessons), plus a weekly scheduled lesson index. */
|
|
608
520
|
declare class LifeChurchProvider extends BaseProvider {
|
|
609
521
|
readonly id = "lifechurch";
|
|
610
522
|
readonly name = "Life.Church";
|
|
@@ -638,11 +550,7 @@ declare function registerProvider(provider: IProvider): void;
|
|
|
638
550
|
* Get provider configuration by ID (for backward compatibility).
|
|
639
551
|
*/
|
|
640
552
|
declare function getProviderConfig(providerId: string): ContentProviderConfig | null;
|
|
641
|
-
/**
|
|
642
|
-
* Get list of available providers with their info including logos and auth types.
|
|
643
|
-
* Includes both implemented providers and coming soon providers.
|
|
644
|
-
* @param ids - Optional array of provider IDs to filter the results. If provided, only providers with matching IDs will be returned.
|
|
645
|
-
*/
|
|
553
|
+
/** Get available providers (implemented and coming soon), optionally filtered by IDs. */
|
|
646
554
|
declare function getAvailableProviders(ids?: string[]): ProviderInfo[];
|
|
647
555
|
|
|
648
556
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -235,10 +235,7 @@ interface IProvider {
|
|
|
235
235
|
checkMediaLicense?(mediaId: string, auth?: ContentProviderAuthData | null): Promise<MediaLicenseResult | null>;
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
/**
|
|
239
|
-
* Navigate to a specific item using a dot-notation path.
|
|
240
|
-
* Path format: "0.2.1" means items[0].children[2].children[1]
|
|
241
|
-
*/
|
|
238
|
+
/** Navigate to a specific item using dot-notation path (e.g. "0.2.1" → items[0].children[2].children[1]). */
|
|
242
239
|
declare function navigateToPath(instructions: Instructions, path: string): InstructionItem | null;
|
|
243
240
|
|
|
244
241
|
declare class OAuthHelper {
|
|
@@ -269,12 +266,7 @@ declare class DeviceFlowHelper {
|
|
|
269
266
|
calculatePollDelay(baseInterval?: number, slowDownCount?: number): number;
|
|
270
267
|
}
|
|
271
268
|
|
|
272
|
-
/**
|
|
273
|
-
* Shared base for providers: identity metadata, an authenticated fetch wrapper, and a
|
|
274
|
-
* config-driven supportsDeviceFlow. Auth-flow methods (initiateDeviceFlow, buildAuthUrl, ...)
|
|
275
|
-
* deliberately do NOT live here: consumers feature-detect them with `"method" in provider`,
|
|
276
|
-
* so they must exist only on the providers that actually support each flow.
|
|
277
|
-
*/
|
|
269
|
+
/** Base for providers; auth-flow methods are intentionally not here so consumers can feature-detect with `"method" in provider`. */
|
|
278
270
|
declare abstract class BaseProvider implements IProvider {
|
|
279
271
|
abstract readonly id: string;
|
|
280
272
|
abstract readonly name: string;
|
|
@@ -289,16 +281,7 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
289
281
|
supportsDeviceFlow(): boolean;
|
|
290
282
|
}
|
|
291
283
|
|
|
292
|
-
/**
|
|
293
|
-
* APlay Provider
|
|
294
|
-
*
|
|
295
|
-
* Path structure (variable depth based on module products):
|
|
296
|
-
* /modules -> list modules
|
|
297
|
-
* /modules/{moduleId} -> list products OR libraries (depends on module)
|
|
298
|
-
* /modules/{moduleId}/products/{productId} -> list libraries (if module has multiple products)
|
|
299
|
-
* /modules/{moduleId}/products/{productId}/{libraryId} -> media files
|
|
300
|
-
* /modules/{moduleId}/libraries/{libraryId} -> media files (if module has 0-1 products)
|
|
301
|
-
*/
|
|
284
|
+
/** APlay Provider: media curriculum library with OAuth 2.0 auth. */
|
|
302
285
|
declare class APlayProvider extends BaseProvider {
|
|
303
286
|
readonly id = "aplay";
|
|
304
287
|
readonly name = "APlay";
|
|
@@ -317,13 +300,7 @@ declare class APlayProvider extends BaseProvider {
|
|
|
317
300
|
checkMediaLicense(mediaId: string, auth?: ContentProviderAuthData | null): Promise<MediaLicenseResult | null>;
|
|
318
301
|
}
|
|
319
302
|
|
|
320
|
-
/**
|
|
321
|
-
* SignPresenter Provider
|
|
322
|
-
*
|
|
323
|
-
* Path structure:
|
|
324
|
-
* /playlists -> list playlists
|
|
325
|
-
* /playlists/{playlistId} -> list messages (files)
|
|
326
|
-
*/
|
|
303
|
+
/** Browses SignPresenter playlists → messages (files). */
|
|
327
304
|
declare class SignPresenterProvider extends BaseProvider {
|
|
328
305
|
private readonly oauthHelper;
|
|
329
306
|
private readonly deviceFlowHelper;
|
|
@@ -351,18 +328,9 @@ declare class SignPresenterProvider extends BaseProvider {
|
|
|
351
328
|
}
|
|
352
329
|
|
|
353
330
|
/**
|
|
354
|
-
*
|
|
355
|
-
*
|
|
356
|
-
*
|
|
357
|
-
* /lessons -> programs
|
|
358
|
-
* /lessons/{programId} -> studies
|
|
359
|
-
* /lessons/{programId}/{studyId} -> lessons
|
|
360
|
-
* /lessons/{programId}/{studyId}/{lessonId} -> venues
|
|
361
|
-
* /lessons/{programId}/{studyId}/{lessonId}/{venueId} -> playlist files
|
|
362
|
-
*
|
|
363
|
-
* /addons -> categories
|
|
364
|
-
* /addons/{category} -> individual add-ons
|
|
365
|
-
* /addons/{category}/{addOnId} -> single add-on file
|
|
331
|
+
* Path: /lessons → programs, /lessons/{id} → studies, /lessons/{id}/{id} → lessons,
|
|
332
|
+
* /lessons/{id}/{id}/{id} → venues, /lessons/{id}/{id}/{id}/{id} → files;
|
|
333
|
+
* /addons → categories, /addons/{cat} → items, /addons/{cat}/{id} → file.
|
|
366
334
|
*/
|
|
367
335
|
declare class LessonsChurchProvider extends BaseProvider {
|
|
368
336
|
readonly id = "lessonschurch";
|
|
@@ -436,7 +404,6 @@ declare class DropboxProvider extends BaseProvider {
|
|
|
436
404
|
private resolveFileLinks;
|
|
437
405
|
private checkIsLeaf;
|
|
438
406
|
browse(path?: string | null, auth?: ContentProviderAuthData | null): Promise<ContentItem[]>;
|
|
439
|
-
/** Resolve a folder path to playable files (list + media filter + link resolution). */
|
|
440
407
|
private resolveMediaFiles;
|
|
441
408
|
getPlaylist(path: string, auth?: ContentProviderAuthData | null, _resolution?: number): Promise<ContentFile[] | null>;
|
|
442
409
|
getInstructions(path: string, auth?: ContentProviderAuthData | null): Promise<Instructions | null>;
|
|
@@ -450,14 +417,7 @@ declare class DropboxProvider extends BaseProvider {
|
|
|
450
417
|
exchangeCodeForTokens(code: string, codeVerifier: string, redirectUri: string): Promise<ContentProviderAuthData | null>;
|
|
451
418
|
}
|
|
452
419
|
|
|
453
|
-
/**
|
|
454
|
-
* PlanningCenter Provider
|
|
455
|
-
*
|
|
456
|
-
* Path structure:
|
|
457
|
-
* /serviceTypes -> list service types
|
|
458
|
-
* /serviceTypes/{serviceTypeId} -> list plans
|
|
459
|
-
* /serviceTypes/{serviceTypeId}/{planId} -> plan items (leaf)
|
|
460
|
-
*/
|
|
420
|
+
/** Browses Planning Center service types → plans → items. */
|
|
461
421
|
declare class PlanningCenterProvider extends BaseProvider {
|
|
462
422
|
readonly id = "planningcenter";
|
|
463
423
|
readonly name = "Planning Center";
|
|
@@ -472,14 +432,7 @@ declare class PlanningCenterProvider extends BaseProvider {
|
|
|
472
432
|
private getPlanItems;
|
|
473
433
|
}
|
|
474
434
|
|
|
475
|
-
/**
|
|
476
|
-
* BibleProject Provider
|
|
477
|
-
*
|
|
478
|
-
* Path structure:
|
|
479
|
-
* / -> list collections
|
|
480
|
-
* /{collectionSlug} -> list videos in collection
|
|
481
|
-
* /{collectionSlug}/{videoId} -> single video
|
|
482
|
-
*/
|
|
435
|
+
/** BibleProject Provider: Bible education video content. */
|
|
483
436
|
declare class BibleProjectProvider extends BaseProvider {
|
|
484
437
|
readonly id = "bibleproject";
|
|
485
438
|
readonly name = "The Bible Project";
|
|
@@ -499,13 +452,8 @@ declare class BibleProjectProvider extends BaseProvider {
|
|
|
499
452
|
}
|
|
500
453
|
|
|
501
454
|
/**
|
|
502
|
-
*
|
|
503
|
-
*
|
|
504
|
-
* Path structure:
|
|
505
|
-
* / -> list collections (Elementary, Preschool)
|
|
506
|
-
* /{collectionSlug} -> list studies
|
|
507
|
-
* /{collectionSlug}/{studyId} -> list lessons
|
|
508
|
-
* /{collectionSlug}/{studyId}/{lessonId} -> lesson files (leaf)
|
|
455
|
+
* Path structure: / → collections, /{collection} → studies, /{collection}/{study} → lessons,
|
|
456
|
+
* /{collection}/{study}/{lesson} → files (leaf).
|
|
509
457
|
*/
|
|
510
458
|
declare class HighVoltageKidsProvider extends BaseProvider {
|
|
511
459
|
readonly id = "highvoltagekids";
|
|
@@ -522,15 +470,8 @@ declare class HighVoltageKidsProvider extends BaseProvider {
|
|
|
522
470
|
}
|
|
523
471
|
|
|
524
472
|
/**
|
|
525
|
-
*
|
|
526
|
-
*
|
|
527
|
-
* Uses the public Arclight API to browse video content from jesusfilm.org.
|
|
528
|
-
*
|
|
529
|
-
* Path structure:
|
|
530
|
-
* / -> categories (Feature Films, Series, Collections)
|
|
531
|
-
* /{category} -> list items in category
|
|
532
|
-
* /{category}/{id} -> single video (feature film) or container children (series/collection)
|
|
533
|
-
* /{category}/{...containerIds}/{id} -> nested containers or single video (supports arbitrary depth)
|
|
473
|
+
* Path: / → categories, /{category} → items, /{category}/{id} → video or children,
|
|
474
|
+
* /{category}/{...ids}/{id} → nested containers or video.
|
|
534
475
|
*/
|
|
535
476
|
declare class JesusFilmProvider extends BaseProvider {
|
|
536
477
|
readonly id = "jesusfilm";
|
|
@@ -556,17 +497,7 @@ declare class JesusFilmProvider extends BaseProvider {
|
|
|
556
497
|
getInstructions(path: string, _auth?: ContentProviderAuthData | null): Promise<Instructions | null>;
|
|
557
498
|
}
|
|
558
499
|
|
|
559
|
-
/**
|
|
560
|
-
* CBN Provider
|
|
561
|
-
*
|
|
562
|
-
* Faith-based kids' video curriculum. Auth uses OAuth 2.0 Device Flow.
|
|
563
|
-
*
|
|
564
|
-
* Path structure:
|
|
565
|
-
* / -> single "Catalog" root folder
|
|
566
|
-
* /catalog -> course folders (GET /catalog)
|
|
567
|
-
* /catalog/{courseId} -> lesson folders (GET /catalog/{courseId})
|
|
568
|
-
* /catalog/{courseId}/{lessonId} -> video files (GET /lesson-playlist/{lessonId})
|
|
569
|
-
*/
|
|
500
|
+
/** Faith-based kids' video curriculum with OAuth 2.0 Device Flow auth. */
|
|
570
501
|
declare class CbnProvider extends BaseProvider {
|
|
571
502
|
private readonly deviceFlowHelper;
|
|
572
503
|
readonly id = "cbn";
|
|
@@ -585,26 +516,7 @@ declare class CbnProvider extends BaseProvider {
|
|
|
585
516
|
pollDeviceFlowToken(deviceCode: string): Promise<DeviceFlowPollResult>;
|
|
586
517
|
}
|
|
587
518
|
|
|
588
|
-
/**
|
|
589
|
-
* Life.Church Provider
|
|
590
|
-
*
|
|
591
|
-
* Browses the Life.Church kids curriculum from a static catalog generated by
|
|
592
|
-
* scripts/scrape-lifechurch.ts (sourced from life.church/media/* + the
|
|
593
|
-
* open.life.church weekly calendar).
|
|
594
|
-
*
|
|
595
|
-
* Path structure:
|
|
596
|
-
* / -> "scheduled" folder + 4 series
|
|
597
|
-
* /scheduled -> this Sunday's scheduled lessons (one per age group)
|
|
598
|
-
* /scheduled/{scheduledId} -> single video file (leaf)
|
|
599
|
-
* /{seriesId} -> units within the series
|
|
600
|
-
* /{seriesId}/{unitId} -> lessons within the unit
|
|
601
|
-
* /{seriesId}/{unitId}/{lessonId} -> single video file (leaf)
|
|
602
|
-
*
|
|
603
|
-
* Video delivery: ContentFile.url is a direct mp4 on Life.Church's CDN
|
|
604
|
-
* (https://d.life.church/.../{slug}_720p.mp4). Public, no auth, supports
|
|
605
|
-
* range requests — plays in any standard mp4 player including
|
|
606
|
-
* react-native-video.
|
|
607
|
-
*/
|
|
519
|
+
/** Browses Life.Church's kids curriculum from a static catalog (series → units → lessons), plus a weekly scheduled lesson index. */
|
|
608
520
|
declare class LifeChurchProvider extends BaseProvider {
|
|
609
521
|
readonly id = "lifechurch";
|
|
610
522
|
readonly name = "Life.Church";
|
|
@@ -638,11 +550,7 @@ declare function registerProvider(provider: IProvider): void;
|
|
|
638
550
|
* Get provider configuration by ID (for backward compatibility).
|
|
639
551
|
*/
|
|
640
552
|
declare function getProviderConfig(providerId: string): ContentProviderConfig | null;
|
|
641
|
-
/**
|
|
642
|
-
* Get list of available providers with their info including logos and auth types.
|
|
643
|
-
* Includes both implemented providers and coming soon providers.
|
|
644
|
-
* @param ids - Optional array of provider IDs to filter the results. If provided, only providers with matching IDs will be returned.
|
|
645
|
-
*/
|
|
553
|
+
/** Get available providers (implemented and coming soon), optionally filtered by IDs. */
|
|
646
554
|
declare function getAvailableProviders(ids?: string[]): ProviderInfo[];
|
|
647
555
|
|
|
648
556
|
/**
|
package/dist/index.js
CHANGED
|
@@ -546,7 +546,6 @@ var SignPresenterProvider = class extends BaseProvider {
|
|
|
546
546
|
const instructions = filesToInstructions(title, files, { id: playlistId + "-section", label: title });
|
|
547
547
|
return { name: title, items: [{ id: playlistId + "-header", itemType: "header", label: title, children: instructions.items }] };
|
|
548
548
|
}
|
|
549
|
-
// Auth methods
|
|
550
549
|
generateCodeVerifier() {
|
|
551
550
|
return this.oauthHelper.generateCodeVerifier();
|
|
552
551
|
}
|
|
@@ -1663,7 +1662,6 @@ var DropboxProvider = class extends BaseProvider {
|
|
|
1663
1662
|
mediaLicensing: false
|
|
1664
1663
|
};
|
|
1665
1664
|
}
|
|
1666
|
-
// -- Pagination helper --
|
|
1667
1665
|
dropboxPost(endpoint, body, auth) {
|
|
1668
1666
|
if (!auth) {
|
|
1669
1667
|
console.error("[Dropbox] No auth token provided");
|
|
@@ -1697,7 +1695,6 @@ var DropboxProvider = class extends BaseProvider {
|
|
|
1697
1695
|
}
|
|
1698
1696
|
return allEntries;
|
|
1699
1697
|
}
|
|
1700
|
-
// -- File link helpers --
|
|
1701
1698
|
async getSharedLink(filePath, auth) {
|
|
1702
1699
|
if (!auth) return null;
|
|
1703
1700
|
try {
|
|
@@ -1753,7 +1750,6 @@ var DropboxProvider = class extends BaseProvider {
|
|
|
1753
1750
|
);
|
|
1754
1751
|
return results.filter((r) => r.viewUrl || r.downloadUrl).map((r) => fileEntryToContentFile(r.entry, r.viewUrl || r.downloadUrl, r.downloadUrl));
|
|
1755
1752
|
}
|
|
1756
|
-
// -- Leaf detection --
|
|
1757
1753
|
async checkIsLeaf(folderPath, auth) {
|
|
1758
1754
|
const response = await this.dropboxPost(
|
|
1759
1755
|
"/2/files/list_folder",
|
|
@@ -1763,7 +1759,6 @@ var DropboxProvider = class extends BaseProvider {
|
|
|
1763
1759
|
if (!response) return false;
|
|
1764
1760
|
return !response.entries.some((e) => e[".tag"] === "folder");
|
|
1765
1761
|
}
|
|
1766
|
-
// -- IProvider methods --
|
|
1767
1762
|
async browse(path, auth) {
|
|
1768
1763
|
const dropboxPath = path && path !== "/" ? path.startsWith("/") ? path : "/" + path : "";
|
|
1769
1764
|
const allEntries = await this.listAllEntries(dropboxPath, auth);
|
|
@@ -1775,7 +1770,6 @@ var DropboxProvider = class extends BaseProvider {
|
|
|
1775
1770
|
const fileItems = await this.resolveFileLinks(mediaFiles, auth);
|
|
1776
1771
|
return [...folderItems, ...fileItems];
|
|
1777
1772
|
}
|
|
1778
|
-
/** Resolve a folder path to playable files (list + media filter + link resolution). */
|
|
1779
1773
|
async resolveMediaFiles(path, auth) {
|
|
1780
1774
|
if (!path || path === "/") return null;
|
|
1781
1775
|
const dropboxPath = path.startsWith("/") ? path : "/" + path;
|
|
@@ -1797,7 +1791,6 @@ var DropboxProvider = class extends BaseProvider {
|
|
|
1797
1791
|
const folderName = segments[segments.length - 1] || "Dropbox";
|
|
1798
1792
|
return filesToInstructions(folderName, resolved.files, { id: "dropbox-section", label: folderName });
|
|
1799
1793
|
}
|
|
1800
|
-
// -- Auth methods --
|
|
1801
1794
|
generateCodeVerifier() {
|
|
1802
1795
|
return this.oauthHelper.generateCodeVerifier();
|
|
1803
1796
|
}
|
|
@@ -16317,7 +16310,7 @@ function getAvailableProviders(ids) {
|
|
|
16317
16310
|
}
|
|
16318
16311
|
|
|
16319
16312
|
// src/index.ts
|
|
16320
|
-
var VERSION = true ? "0.5.
|
|
16313
|
+
var VERSION = true ? "0.5.1" : "dev";
|
|
16321
16314
|
export {
|
|
16322
16315
|
APlayProvider,
|
|
16323
16316
|
B1ChurchProvider,
|