@d-najd/universal-media-tracker-sdk 0.0.8 → 0.1.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.
Files changed (47) hide show
  1. package/dist/index.d.ts +10 -58
  2. package/dist/index.js +91 -70
  3. package/dist/types/handler/base/baseHandler.d.ts +10 -0
  4. package/dist/types/handler/base/baseHandler.js +1 -0
  5. package/dist/types/handler/base/baseHandlerArgs.d.ts +6 -0
  6. package/dist/types/handler/base/baseHandlerArgs.js +1 -0
  7. package/dist/types/handler/base/baseHandlerResponse.d.ts +4 -0
  8. package/dist/types/handler/base/baseHandlerResponse.js +1 -0
  9. package/dist/types/handler/base/createHandler.d.ts +5 -0
  10. package/dist/types/handler/base/createHandler.js +1 -0
  11. package/dist/types/handler/base/handler.d.ts +8 -0
  12. package/dist/types/handler/base/handler.js +13 -0
  13. package/dist/types/handler/base/handlerTypes.d.ts +2 -0
  14. package/dist/types/handler/base/handlerTypes.js +1 -0
  15. package/dist/types/handler/media/baseResourceHandler.d.ts +9 -0
  16. package/dist/types/handler/media/baseResourceHandler.js +1 -0
  17. package/dist/types/handler/media/catalog/catalogHandlerArgs.d.ts +3 -0
  18. package/dist/types/handler/media/catalog/catalogHandlerArgs.js +1 -0
  19. package/dist/types/handler/media/catalog/catalogHandlerResponse.d.ts +4 -0
  20. package/dist/types/handler/media/catalog/catalogHandlerResponse.js +1 -0
  21. package/dist/types/handler/media/catalog/createCatalogHandler.d.ts +8 -0
  22. package/dist/types/handler/media/catalog/createCatalogHandler.js +1 -0
  23. package/dist/types/handler/media/catalog/metaPreview.d.ts +7 -0
  24. package/dist/types/handler/media/catalog/metaPreview.js +1 -0
  25. package/dist/types/handler/media/createResourceHandler.d.ts +10 -0
  26. package/dist/types/handler/media/createResourceHandler.js +1 -0
  27. package/dist/types/handler/media/resourceHandler.d.ts +15 -0
  28. package/dist/types/handler/media/resourceHandler.js +1 -0
  29. package/dist/types/handler/media/resourceType.d.ts +2 -0
  30. package/dist/types/handler/media/resourceType.js +1 -0
  31. package/dist/types/handler/plugin/factory/createPluginFactoryHandler.d.ts +4 -0
  32. package/dist/types/handler/plugin/factory/createPluginFactoryHandler.js +1 -0
  33. package/dist/types/handler/plugin/factory/pluginFactoryHandlerArgs.d.ts +3 -0
  34. package/dist/types/handler/plugin/factory/pluginFactoryHandlerArgs.js +1 -0
  35. package/dist/types/handler/plugin/factory/pluginFactoryHandlerResponse.d.ts +12 -0
  36. package/dist/types/handler/plugin/factory/pluginFactoryHandlerResponse.js +1 -0
  37. package/dist/types/handler/plugin/source/createPluginSourceHandler.d.ts +4 -0
  38. package/dist/types/handler/plugin/source/createPluginSourceHandler.js +1 -0
  39. package/dist/types/handler/plugin/source/pluginSourceHandlerArgs.d.ts +3 -0
  40. package/dist/types/handler/plugin/source/pluginSourceHandlerArgs.js +1 -0
  41. package/dist/types/handler/plugin/source/pluginSourceHandlerResponse.d.ts +11 -0
  42. package/dist/types/handler/plugin/source/pluginSourceHandlerResponse.js +1 -0
  43. package/dist/types/pluginConfig.d.ts +6 -0
  44. package/dist/types/pluginConfig.js +1 -0
  45. package/dist/types/pluginSpec.d.ts +8 -0
  46. package/dist/types/pluginSpec.js +1 -0
  47. package/package.json +3 -5
package/dist/index.d.ts CHANGED
@@ -1,59 +1,10 @@
1
- type PluginConfig = {
2
- readonly id: string;
3
- readonly name: string;
4
- readonly version: string;
5
- };
6
-
7
- type BaseHandlerArgs = {
8
- readonly search?: string;
9
- readonly skip?: number;
10
- readonly pageSize?: number;
11
- };
12
-
13
- type BaseHandlerResponse<T = any> = {
14
- readonly data: T[];
15
- };
16
-
17
- type Handler<T = any, R = any> = {
18
- id: string;
19
- type: string;
20
- callback: (args: T) => Promise<R>;
21
- };
22
-
23
- type ResourceHandlerType = 'catalog-request';
24
-
25
- type ResourceType = 'movie' | 'series';
26
-
27
- type ResourceHandler<T extends BaseHandlerArgs = BaseHandlerArgs, R extends BaseHandlerResponse = BaseHandlerResponse> = Handler<T, R> & {
28
- /**
29
- * Displayed in the app
30
- */
31
- name: string;
32
- type: ResourceHandlerType | string;
33
- resourceType: ResourceType | string;
34
- };
35
-
36
- type CreateResourceHandler<T extends BaseHandlerArgs = BaseHandlerArgs, R extends BaseHandlerResponse = BaseHandlerResponse> = Omit<ResourceHandler<T, R>, 'id' | 'name'> & {
37
- id?: string;
38
- name?: string;
39
- };
40
-
41
- type CatalogHandlerArgs = BaseHandlerArgs & {};
42
-
43
- type MetaPreview = {
44
- readonly id: string;
45
- readonly type: string;
46
- readonly name: string;
47
- readonly poster: string;
48
- };
49
-
50
- type CatalogHandlerResponse = BaseHandlerResponse<MetaPreview> & {};
51
-
52
- type CreateCatalogHandler = Omit<CreateResourceHandler<CatalogHandlerArgs, CatalogHandlerResponse>, 'type'> & {
53
- type?: ResourceHandlerType | string;
54
- };
55
-
56
- declare class Plugin {
1
+ import PluginConfig from "./types/pluginConfig";
2
+ import CreateCatalogHandler from "./types/handler/media/catalog/createCatalogHandler";
3
+ import CreateResourceHandler from "./types/handler/media/createResourceHandler";
4
+ import CreatePluginSourceHandler from "./types/handler/plugin/source/createPluginSourceHandler";
5
+ import CreateHandler from "./types/handler/base/createHandler";
6
+ import CreatePluginFactoryHandler from "./types/handler/plugin/factory/createPluginFactoryHandler";
7
+ export default class Plugin {
57
8
  readonly config: PluginConfig;
58
9
  private handlers;
59
10
  private counter;
@@ -64,6 +15,7 @@ declare class Plugin {
64
15
  */
65
16
  onLoad(callback: () => Promise<void>): void;
66
17
  onUnload(callback: () => Promise<void>): void;
18
+ defineHandler(handler: CreateHandler): string;
67
19
  /**
68
20
  * @see Handler
69
21
  */
@@ -74,9 +26,9 @@ declare class Plugin {
74
26
  * @see defineResourceHandler
75
27
  */
76
28
  defineCatalogHandler(handler: CreateCatalogHandler): string;
29
+ definePluginSourceHandler(handler: CreatePluginSourceHandler): string;
30
+ definePluginFactoryHandler(handler: CreatePluginFactoryHandler): string;
77
31
  private getSpec;
78
32
  private onLoadCallback;
79
33
  private onUnloadCallback;
80
34
  }
81
-
82
- export { Plugin as default };
package/dist/index.js CHANGED
@@ -1,72 +1,93 @@
1
- // src/index.ts
2
- var Plugin = class {
3
- config;
4
- handlers = /* @__PURE__ */ new Map();
5
- counter = 0;
6
- loaded = false;
7
- constructor(options) {
8
- this.config = options;
9
- }
10
- /**
11
- * Don't define handlers here, they are part of the spec
12
- */
13
- onLoad(callback) {
14
- this.onLoadCallback = async () => {
15
- await callback();
16
- this.loaded = true;
17
- };
18
- }
19
- onUnload(callback) {
20
- this.onUnloadCallback = async () => {
21
- await callback();
22
- this.loaded = false;
23
- };
24
- }
25
- /**
26
- * @see Handler
27
- */
28
- defineResourceHandler(handler) {
29
- const newHandler = {
30
- id: `${this.config.id}-custom-${this.counter++}`,
31
- name: `${this.config.name}`,
32
- ...handler
33
- };
34
- this.handlers.set(newHandler.id, newHandler);
35
- return newHandler.id;
36
- }
37
- /**
38
- * Defines or overrides if a catalog handler has already been defined, if
39
- * you use multiple catalog handlers use `defineMediaHandler` instead
40
- * @see defineResourceHandler
41
- */
42
- defineCatalogHandler(handler) {
43
- const newHandler = {
44
- id: `${this.config.id}-catalog-handler`,
45
- ...handler,
46
- type: "catalog-request"
47
- };
48
- return this.defineResourceHandler(newHandler);
49
- }
50
- // Used internally, private since its internal api
51
- // noinspection JSUnusedLocalSymbols
52
- getSpec() {
53
- if (!this.loaded) {
54
- throw Error("The plugin must be loaded before getting it's spec");
1
+ export default class Plugin {
2
+ config;
3
+ handlers = new Map();
4
+ counter = 0;
5
+ loaded = false;
6
+ constructor(options) {
7
+ this.config = options;
8
+ }
9
+ /**
10
+ * Don't define handlers here, they are part of the spec
11
+ */
12
+ onLoad(callback) {
13
+ this.onLoadCallback = async () => {
14
+ await callback();
15
+ this.loaded = true;
16
+ };
17
+ }
18
+ onUnload(callback) {
19
+ this.onUnloadCallback = async () => {
20
+ await callback();
21
+ this.loaded = false;
22
+ };
23
+ }
24
+ defineHandler(handler) {
25
+ const newHandler = {
26
+ id: `${this.config.id}-custom-${this.counter++}`,
27
+ ...handler
28
+ };
29
+ this.handlers.set(newHandler.id, newHandler);
30
+ return newHandler.id;
55
31
  }
56
- return {
57
- config: this.config,
58
- handlers: this.handlers,
59
- onLoad: this.onLoadCallback,
60
- onUnload: this.onUnloadCallback
32
+ /**
33
+ * @see Handler
34
+ */
35
+ defineResourceHandler(handler) {
36
+ const newHandler = {
37
+ id: `${this.config.id}-custom-resource-${this.counter++}`,
38
+ name: `${this.config.name}`,
39
+ ...handler
40
+ };
41
+ this.handlers.set(newHandler.id, newHandler);
42
+ return newHandler.id;
43
+ }
44
+ /**
45
+ * Defines or overrides if a catalog handler has already been defined, if
46
+ * you use multiple catalog handlers use `defineMediaHandler` instead
47
+ * @see defineResourceHandler
48
+ */
49
+ defineCatalogHandler(handler) {
50
+ const newHandler = {
51
+ id: `${this.config.id}-catalog`,
52
+ name: `${this.config.name}`,
53
+ ...handler,
54
+ type: 'catalog-request'
55
+ };
56
+ return this.defineResourceHandler(newHandler);
57
+ }
58
+ definePluginSourceHandler(handler) {
59
+ const newHandler = {
60
+ id: `${this.config.id}-plugin-source`,
61
+ ...handler,
62
+ type: 'plugin-source'
63
+ };
64
+ return this.defineHandler(newHandler);
65
+ }
66
+ definePluginFactoryHandler(handler) {
67
+ const newHandler = {
68
+ id: `${this.config.id}-plugin-factory`,
69
+ ...handler,
70
+ type: 'plugin-factory'
71
+ };
72
+ return this.defineHandler(newHandler);
73
+ }
74
+ // Used internally, private since its internal api
75
+ // noinspection JSUnusedLocalSymbols
76
+ getSpec() {
77
+ if (!this.loaded) {
78
+ throw Error("The plugin must be loaded before getting it's spec");
79
+ }
80
+ return {
81
+ config: this.config,
82
+ handlers: this.handlers,
83
+ onLoad: this.onLoadCallback,
84
+ onUnload: this.onUnloadCallback
85
+ };
86
+ }
87
+ onLoadCallback = async () => {
88
+ this.loaded = true;
89
+ };
90
+ onUnloadCallback = async () => {
91
+ this.loaded = false;
61
92
  };
62
- }
63
- onLoadCallback = async () => {
64
- this.loaded = true;
65
- };
66
- onUnloadCallback = async () => {
67
- this.loaded = false;
68
- };
69
- };
70
- export {
71
- Plugin as default
72
- };
93
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Less strict version because helper scripts define default type and id
3
+ * @see Handler
4
+ */
5
+ type BaseHandler<T = any, R = any> = {
6
+ id?: string;
7
+ type?: string;
8
+ callback: (args: T) => Promise<R>;
9
+ };
10
+ export default BaseHandler;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ type BaseHandlerArgs = {
2
+ readonly search?: string;
3
+ readonly skip?: number;
4
+ readonly pageSize?: number;
5
+ };
6
+ export default BaseHandlerArgs;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ type BaseHandlerResponse<T = any> = {
2
+ readonly data: T[];
3
+ };
4
+ export default BaseHandlerResponse;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import BaseHandler from "./baseHandler";
2
+ type CreateHandler<T = any, R = any> = BaseHandler<T, R> & {
3
+ type: string;
4
+ };
5
+ export default CreateHandler;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import BaseHandler from "./baseHandler";
2
+ import HandlerTypes from "./handlerTypes";
3
+ type Handler<T = any, R = any> = BaseHandler<T, R> & {
4
+ id: string;
5
+ type: HandlerTypes | string;
6
+ callback: (args: T) => Promise<R>;
7
+ };
8
+ export default Handler;
@@ -0,0 +1,13 @@
1
+ /*
2
+ * Represents a plugin handler.
3
+ *
4
+ * @remarks
5
+ * - `type` can be a predefined `MediaHandlerTypes` value or any custom string.
6
+ * Custom types must be handled by the plugin author.
7
+ * - `id` is a unique identifier for the handler. If a handler with the same
8
+ * id exists, it will be overridden.
9
+ * - `name` name of the handler that will be displayed in the app
10
+ * - `callback` callback function that is called when the handler is invoked
11
+ * @see BaseHandler
12
+ */
13
+ export {};
@@ -0,0 +1,2 @@
1
+ type ResourceHandlerType = 'catalog-request' | 'plugin-source' | 'plugin-factory';
2
+ export default ResourceHandlerType;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import BaseHandlerArgs from "../base/baseHandlerArgs";
2
+ import BaseHandlerResponse from "../base/baseHandlerResponse";
3
+ import ResourceType from "./resourceType";
4
+ import BaseHandler from "../base/baseHandler";
5
+ type BaseResourceHandler<T extends BaseHandlerArgs = BaseHandlerArgs, R extends BaseHandlerResponse = BaseHandlerResponse> = BaseHandler<T, R> & {
6
+ name?: string;
7
+ resourceType?: ResourceType | string;
8
+ };
9
+ export default BaseResourceHandler;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import BaseHandlerArgs from "../../base/baseHandlerArgs";
2
+ type CatalogHandlerArgs = BaseHandlerArgs & {};
3
+ export default CatalogHandlerArgs;
@@ -0,0 +1,4 @@
1
+ import BaseHandlerResponse from "../../base/baseHandlerResponse";
2
+ import MetaPreview from "./metaPreview";
3
+ type CatalogHandlerResponse = BaseHandlerResponse<MetaPreview> & {};
4
+ export default CatalogHandlerResponse;
@@ -0,0 +1,8 @@
1
+ import BaseResourceHandler from "../baseResourceHandler";
2
+ import CatalogHandlerArgs from "./catalogHandlerArgs";
3
+ import CatalogHandlerResponse from "./catalogHandlerResponse";
4
+ import ResourceType from "../resourceType";
5
+ type CreateCatalogHandler = BaseResourceHandler<CatalogHandlerArgs, CatalogHandlerResponse> & {
6
+ resourceType: ResourceType | string;
7
+ };
8
+ export default CreateCatalogHandler;
@@ -0,0 +1,7 @@
1
+ type MetaPreview = {
2
+ readonly id: string;
3
+ readonly type: string;
4
+ readonly name: string;
5
+ readonly poster: string;
6
+ };
7
+ export default MetaPreview;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import BaseHandlerArgs from "../base/baseHandlerArgs";
2
+ import BaseHandlerResponse from "../base/baseHandlerResponse";
3
+ import BaseResourceHandler from "./baseResourceHandler";
4
+ import ResourceType from "./resourceType";
5
+ import HandlerTypes from "../base/handlerTypes";
6
+ type CreateResourceHandler<T extends BaseHandlerArgs = BaseHandlerArgs, R extends BaseHandlerResponse = BaseHandlerResponse> = BaseResourceHandler<T, R> & {
7
+ type: HandlerTypes | string;
8
+ resourceType: ResourceType | string;
9
+ };
10
+ export default CreateResourceHandler;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import BaseHandlerArgs from "../base/baseHandlerArgs";
2
+ import BaseHandlerResponse from "../base/baseHandlerResponse";
3
+ import ResourceType from "./resourceType";
4
+ import BaseResourceHandler from "./baseResourceHandler";
5
+ import Handler from "../base/handler";
6
+ import HandlerTypes from "../base/handlerTypes";
7
+ type ResourceHandler<T extends BaseHandlerArgs = BaseHandlerArgs, R extends BaseHandlerResponse = BaseHandlerResponse> = BaseResourceHandler<T, R> & Handler<T, R> & {
8
+ /**
9
+ * Displayed in the app
10
+ */
11
+ name: string;
12
+ type: HandlerTypes | string;
13
+ resourceType: ResourceType | string;
14
+ };
15
+ export default ResourceHandler;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ type ResourceType = 'movie' | 'series';
2
+ export default ResourceType;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import BaseHandler from "../../base/baseHandler";
2
+ import PluginSourceHandlerResponse from "../source/pluginSourceHandlerResponse";
3
+ type CreatePluginFactoryHandler = BaseHandler<PluginSourceHandlerArgs, PluginSourceHandlerResponse> & {};
4
+ export default CreatePluginFactoryHandler;
@@ -0,0 +1,3 @@
1
+ type PluginFactoryHandlerArgs = {
2
+ uri: string;
3
+ };
@@ -0,0 +1,12 @@
1
+ import Plugin from '../../../../index';
2
+ export type PluginFactoryHandlerResponse = {
3
+ readonly status: 'valid';
4
+ readonly plugin: Plugin;
5
+ } | {
6
+ readonly status: 'skip';
7
+ readonly reason?: string;
8
+ } | {
9
+ readonly status: 'invalid';
10
+ readonly reason: string;
11
+ };
12
+ export default PluginFactoryHandlerResponse;
@@ -0,0 +1,4 @@
1
+ import PluginSourceHandlerResponse from "./pluginSourceHandlerResponse";
2
+ import BaseHandler from "../../base/baseHandler";
3
+ type CreatePluginSourceHandler = BaseHandler<PluginSourceHandlerArgs, PluginSourceHandlerResponse> & {};
4
+ export default CreatePluginSourceHandler;
@@ -0,0 +1,3 @@
1
+ type PluginSourceHandlerArgs = {
2
+ uri: string;
3
+ };
@@ -0,0 +1,11 @@
1
+ export type PluginSourceHandlerResponse = {
2
+ readonly status: 'valid';
3
+ readonly code: string;
4
+ } | {
5
+ readonly status: 'skip';
6
+ readonly reason?: string;
7
+ } | {
8
+ readonly status: 'invalid';
9
+ readonly reason: string;
10
+ };
11
+ export default PluginSourceHandlerResponse;
@@ -0,0 +1,6 @@
1
+ type PluginConfig = {
2
+ readonly id: string;
3
+ readonly name: string;
4
+ readonly version: string;
5
+ };
6
+ export default PluginConfig;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import PluginConfig from "./pluginConfig";
2
+ import Handler from "./handler/base/handler";
3
+ export default interface PluginSpec {
4
+ readonly config: PluginConfig;
5
+ readonly onLoad: () => Promise<void>;
6
+ readonly onUnload: () => Promise<void>;
7
+ readonly handlers: Map<string, Handler>;
8
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,19 +1,17 @@
1
1
  {
2
2
  "name": "@d-najd/universal-media-tracker-sdk",
3
- "version": "0.0.8",
3
+ "version": "0.1.0",
4
4
  "main": "dist/index.js",
5
- "module": "dist/index.js",
6
- "types": "dist/index.d.ts",
5
+ "types": "dist/types/index.d.ts",
7
6
  "files": [
8
7
  "dist"
9
8
  ],
10
9
  "scripts": {
11
- "build": "tsup src/index.ts --format esm --dts --clean"
10
+ "build": "tsc"
12
11
  },
13
12
  "license": "MIT",
14
13
  "type": "module",
15
14
  "devDependencies": {
16
- "tsup": "^8.5.1",
17
15
  "typescript": "^5.9.3"
18
16
  }
19
17
  }