@growth-labs/video 0.3.2 → 0.3.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.
package/README.md CHANGED
@@ -26,22 +26,32 @@ video({
26
26
  })
27
27
  ```
28
28
 
29
- Premium playback additionally needs `premium.enabled`, an `accessCheck`, and a `GL_VIDEO_SESSION_SECRET` secret of at least 32 bytes:
29
+ Premium playback additionally needs `premium.enabled`, an `accessCheckModule` (a module-spec pointing at a file in your own codebase), and a `GL_VIDEO_SESSION_SECRET` secret of at least 32 bytes:
30
30
 
31
31
  ```ts
32
+ // astro.config.mjs
32
33
  video({
33
34
  publicDomain: 'media.example.com',
34
35
  premium: {
35
36
  enabled: true,
36
37
  sessionScope: 'per-video', // default; 'wildcard' opts into the 0.2.x behavior
37
38
  sessionTtl: '1h', // duration string: '1h' | '30m' | '2h30m' | '45s'
38
- },
39
- accessCheck: async ({ videoId, request, env }, context) => {
40
- // Returns { allowed, reason?, subjectId? }
39
+ accessCheckModule: { module: '/src/lib/video-access-check', export: 'check' },
41
40
  },
42
41
  })
43
42
  ```
44
43
 
44
+ ```ts
45
+ // /src/lib/video-access-check.ts
46
+ import type { AccessCheck } from '@growth-labs/video'
47
+
48
+ export const check: AccessCheck = async ({ videoId, request, env }, context) => {
49
+ // Returns { allowed, reason?, subjectId? }
50
+ }
51
+ ```
52
+
53
+ Why a module spec instead of an inline function? The integration runs in the build-time Node process; the session route runs in the Worker runtime — a different process. An inline `accessCheck` registered at build time **never reaches** the Worker bundle, so every request would 500 with `access_check_not_configured`. The module-spec lets the Vite plugin emit a real static ES import at the top of the `virtual:growth-labs/video/access-check` module, so the function is bundled with the worker. Matches the same pattern as `@growth-labs/auth`'s `renderers` (see auth 0.3.7+ MIGRATION.md).
54
+
45
55
  `per-video` scope (the 0.3.0 default) issues a cookie restricted to one `videoId`, so video status changes propagate within `sessionTtl`. `wildcard` issues a cookie that plays every premium video for the cookie's lifetime — cheaper per page but status changes do not propagate until the cookie expires.
46
56
 
47
57
  ## R2 Layout
package/dist/index.d.ts CHANGED
@@ -1,14 +1,25 @@
1
1
  import type { AstroIntegration } from 'astro';
2
- import { type AccessCheck } from './access-registry.js';
3
2
  import { type VideoOptions } from './options.js';
3
+ import type { AccessCheck } from './types.js';
4
+ /**
5
+ * Integration input. Mirrors `VideoOptions` (the Zod-validated shape). The
6
+ * legacy `accessCheck` inline function is accepted only to throw a clear
7
+ * migration error at integration init — it never worked in Cloudflare
8
+ * Workers production (build-time registration didn't survive to the
9
+ * runtime process). See MIGRATION.md.
10
+ */
4
11
  export interface VideoIntegrationInput extends VideoOptions {
12
+ /**
13
+ * @deprecated since 0.3.3 — removed. Wire your access check through
14
+ * `premium.accessCheckModule: { module, export }` instead. The inline
15
+ * form never worked in Cloudflare Workers production.
16
+ */
5
17
  accessCheck?: AccessCheck;
6
18
  }
7
19
  export default function video(userOptions: VideoIntegrationInput): AstroIntegration;
8
- export type { AccessCheck, AccessCheckParams, AccessResult, } from './access-registry.js';
9
20
  export type { ResolvedVideoOptions, VideoOptions } from './options.js';
10
21
  export { videoOptionsSchema } from './options.js';
11
- export type { Chapter, ChaptersFile, VideoObjectInput, VttCue } from './types.js';
22
+ export type { AccessCheck, AccessCheckParams, AccessResult, Chapter, ChaptersFile, VideoObjectInput, VttCue, } from './types.js';
12
23
  export { loadCaptions, parseVtt } from './utils/captions.js';
13
24
  export { loadChapters, parseChaptersJson, parseChaptersVtt } from './utils/chapters.js';
14
25
  export { type HlsBundleFile, type HlsBundleIngestResult, ingestHlsBundle, type ValidatedHlsBundle, type ValidatedHlsBundleFile, type VideoR2Bucket, validateHlsBundle, } from './utils/ingest.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,cAAc,CAAA;AAGpE,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAA;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,WAAW,EAAE,qBAAqB,GAAG,gBAAgB,CA2ClF;AAED,YAAY,EACX,WAAW,EACX,iBAAiB,EACjB,YAAY,GACZ,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACjF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACvF,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,iBAAiB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACN,WAAW,EACX,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,gBAAgB,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EACN,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACN,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,cAAc,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAG7C;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IAC1D;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,WAAW,EAAE,qBAAqB,GAAG,gBAAgB,CAuDlF;AAED,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,YAAY,EACX,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,MAAM,GACN,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACvF,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,iBAAiB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACN,WAAW,EACX,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,gBAAgB,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EACN,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACN,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -1,16 +1,25 @@
1
- import { registerAccessCheck } from './access-registry.js';
2
1
  import { videoOptionsSchema } from './options.js';
3
2
  import { growthLabsVideoPlugin } from './vite-plugin.js';
4
3
  export default function video(userOptions) {
5
- const { accessCheck, ...optionsInput } = userOptions;
4
+ const { accessCheck: inlineAccessCheck, ...optionsInput } = userOptions;
6
5
  const options = videoOptionsSchema.parse(optionsInput);
7
6
  if (options.premium?.enabled) {
8
- if (!accessCheck) {
9
- throw new Error('@growth-labs/video: premium.enabled=true but no accessCheck was provided. ' +
10
- 'Premium video must not be served without an entitlement check. ' +
11
- 'Either provide an accessCheck function or set premium.enabled=false.');
7
+ if (inlineAccessCheck !== undefined && !options.premium.accessCheckModule) {
8
+ throw new Error('@growth-labs/video: inline `accessCheck` function is no longer supported since 0.3.3. ' +
9
+ 'The inline form never worked in Cloudflare Workers production build-time ' +
10
+ 'registration of the function did not survive to the runtime process, so ' +
11
+ '`/api/video/session` returned `500 access_check_not_registered` on every request. ' +
12
+ 'Move the function into its own module and reference it via ' +
13
+ "`premium.accessCheckModule: { module: '/src/lib/video-access-check', export: 'check' }`. " +
14
+ 'See MIGRATION.md for the migration.');
15
+ }
16
+ if (!options.premium.accessCheckModule) {
17
+ throw new Error('@growth-labs/video: premium.enabled=true but no `premium.accessCheckModule` was provided. ' +
18
+ 'Premium video must not be served without an entitlement check. Wire one as ' +
19
+ "`premium.accessCheckModule: { module: '/src/lib/video-access-check', export: 'check' }` " +
20
+ '(the module path is project-root absolute; the export must implement the `AccessCheck` type). ' +
21
+ 'See README + MIGRATION.md for the module shape, or set `premium.enabled=false`.');
12
22
  }
13
- registerAccessCheck(accessCheck);
14
23
  }
15
24
  return {
16
25
  name: '@growth-labs/video',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAqB,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAMxD,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,WAAkC;IAC/D,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,WAAW,CAAA;IACpD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAEtD,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACd,4EAA4E;gBAC3E,iEAAiE;gBACjE,sEAAsE,CACvE,CAAA;QACF,CAAC;QACD,mBAAmB,CAAC,WAAW,CAAC,CAAA;IACjC,CAAC;IAED,OAAO;QACN,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE;YACN,oBAAoB,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE;gBACvD,YAAY,CAAC;oBACZ,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE;iBACnD,CAAC,CAAA;gBAEF,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;oBAC9B,WAAW,CAAC;wBACX,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY;wBACrC,UAAU,EAAE,mCAAmC;qBAC/C,CAAC,CAAA;oBACF,WAAW,CAAC;wBACX,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,YAAY;wBACrD,UAAU,EAAE,oCAAoC;qBAChD,CAAC,CAAA;gBACH,CAAC;gBAED,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBACvC,WAAW,CAAC;wBACX,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI;wBACvC,UAAU,EAAE,kCAAkC;qBAC9C,CAAC,CAAA;gBACH,CAAC;YACF,CAAC;SACD;KACD,CAAA;AACF,CAAC;AAQD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACvF,OAAO,EAGN,eAAe,EAIf,iBAAiB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACN,WAAW,EACX,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,gBAAgB,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EACN,eAAe,EACf,eAAe,EAIf,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACN,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/options.d.ts CHANGED
@@ -37,6 +37,16 @@ export declare const videoOptionsSchema: z.ZodObject<{
37
37
  sessionScope: z.ZodDefault<z.ZodEnum<["per-video", "wildcard"]>>;
38
38
  sessionTtl: z.ZodEffects<z.ZodDefault<z.ZodString>, number, string | undefined>;
39
39
  signingSecretEnv: z.ZodDefault<z.ZodString>;
40
+ accessCheckModule: z.ZodOptional<z.ZodObject<{
41
+ module: z.ZodString;
42
+ export: z.ZodDefault<z.ZodString>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ module: string;
45
+ export: string;
46
+ }, {
47
+ module: string;
48
+ export?: string | undefined;
49
+ }>>;
40
50
  }, "strip", z.ZodTypeAny, {
41
51
  enabled: boolean;
42
52
  sessionRoute: string;
@@ -45,6 +55,10 @@ export declare const videoOptionsSchema: z.ZodObject<{
45
55
  sessionScope: "per-video" | "wildcard";
46
56
  sessionTtl: number;
47
57
  signingSecretEnv: string;
58
+ accessCheckModule?: {
59
+ module: string;
60
+ export: string;
61
+ } | undefined;
48
62
  }, {
49
63
  enabled?: boolean | undefined;
50
64
  sessionRoute?: string | undefined;
@@ -53,6 +67,10 @@ export declare const videoOptionsSchema: z.ZodObject<{
53
67
  sessionScope?: "per-video" | "wildcard" | undefined;
54
68
  sessionTtl?: string | undefined;
55
69
  signingSecretEnv?: string | undefined;
70
+ accessCheckModule?: {
71
+ module: string;
72
+ export?: string | undefined;
73
+ } | undefined;
56
74
  }>>;
57
75
  player: z.ZodDefault<z.ZodObject<{
58
76
  autoplay: z.ZodDefault<z.ZodBoolean>;
@@ -138,6 +156,10 @@ export declare const videoOptionsSchema: z.ZodObject<{
138
156
  sessionScope: "per-video" | "wildcard";
139
157
  sessionTtl: number;
140
158
  signingSecretEnv: string;
159
+ accessCheckModule?: {
160
+ module: string;
161
+ export: string;
162
+ } | undefined;
141
163
  } | undefined;
142
164
  }, {
143
165
  publicDomain: string;
@@ -157,6 +179,10 @@ export declare const videoOptionsSchema: z.ZodObject<{
157
179
  sessionScope?: "per-video" | "wildcard" | undefined;
158
180
  sessionTtl?: string | undefined;
159
181
  signingSecretEnv?: string | undefined;
182
+ accessCheckModule?: {
183
+ module: string;
184
+ export?: string | undefined;
185
+ } | undefined;
160
186
  } | undefined;
161
187
  player?: {
162
188
  autoplay?: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4F7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkG7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
package/dist/options.js CHANGED
@@ -72,6 +72,12 @@ export const videoOptionsSchema = z.object({
72
72
  return seconds;
73
73
  }),
74
74
  signingSecretEnv: z.string().default('GL_VIDEO_SESSION_SECRET'),
75
+ accessCheckModule: z
76
+ .object({
77
+ module: z.string().min(1),
78
+ export: z.string().min(1).default('accessCheck'),
79
+ })
80
+ .optional(),
75
81
  })
76
82
  .optional(),
77
83
  // ─── Player defaults ───
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/routes/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAarC,eAAO,MAAM,IAAI,EAAE,QAqElB,CAAA"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/routes/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAYrC,eAAO,MAAM,IAAI,EAAE,QAqElB,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { env as cloudflareEnv } from 'cloudflare:workers';
2
+ import { accessRegistry } from 'virtual:growth-labs/video/access-check';
2
3
  import { config } from 'virtual:growth-labs/video/config';
3
- import { getAccessCheck } from '../access-registry.js';
4
4
  import { issueSession } from '../utils/session.js';
5
5
  const MIN_SECRET_BYTES = 32;
6
6
  function json(body, status) {
@@ -29,9 +29,9 @@ export const POST = async (context) => {
29
29
  if (!config.premium) {
30
30
  return json({ error: 'premium_not_enabled' }, 500);
31
31
  }
32
- const accessCheck = getAccessCheck();
33
- if (!accessCheck) {
34
- return json({ error: 'access_check_not_registered' }, 500);
32
+ const accessCheck = accessRegistry.check;
33
+ if (typeof accessCheck !== 'function') {
34
+ return json({ error: 'access_check_not_configured' }, 500);
35
35
  }
36
36
  const result = await accessCheck({ videoId: body.videoId, request, env }, context);
37
37
  if (!result.allowed) {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/routes/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/routes/session.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,15 @@
1
+ import type { APIContext } from 'astro';
2
+ export interface AccessCheckParams {
3
+ videoId: string;
4
+ request: Request;
5
+ env: Record<string, unknown>;
6
+ }
7
+ export interface AccessResult {
8
+ allowed: boolean;
9
+ reason?: string;
10
+ subjectId?: string;
11
+ }
12
+ export type AccessCheck = (params: AccessCheckParams, context: APIContext) => Promise<AccessResult>;
1
13
  export interface Chapter {
2
14
  index: number;
3
15
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,MAAM;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACzD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEvC,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAEnG,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,MAAM;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAKxD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAc1E"}
1
+ {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAOxD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAyB1E"}
@@ -1,17 +1,32 @@
1
1
  const VIRTUAL_MODULE_ID = 'virtual:growth-labs/video/config';
2
2
  const RESOLVED_VIRTUAL_MODULE_ID = `\0${VIRTUAL_MODULE_ID}`;
3
+ const ACCESS_CHECK_VIRTUAL_ID = 'virtual:growth-labs/video/access-check';
4
+ const RESOLVED_ACCESS_CHECK_VIRTUAL_ID = `\0${ACCESS_CHECK_VIRTUAL_ID}`;
3
5
  export function growthLabsVideoPlugin(config) {
4
6
  return {
5
7
  name: 'growth-labs-video-config',
6
8
  resolveId(id) {
7
- if (id === VIRTUAL_MODULE_ID) {
9
+ if (id === VIRTUAL_MODULE_ID)
8
10
  return RESOLVED_VIRTUAL_MODULE_ID;
9
- }
11
+ if (id === ACCESS_CHECK_VIRTUAL_ID)
12
+ return RESOLVED_ACCESS_CHECK_VIRTUAL_ID;
10
13
  },
11
14
  load(id) {
12
15
  if (id === RESOLVED_VIRTUAL_MODULE_ID) {
13
16
  return `export const config = ${JSON.stringify(config)};`;
14
17
  }
18
+ if (id === RESOLVED_ACCESS_CHECK_VIRTUAL_ID) {
19
+ const spec = config.premium?.accessCheckModule;
20
+ if (!spec) {
21
+ return 'export const accessRegistry = {};\n';
22
+ }
23
+ const local = '__gl_video_access_check_0';
24
+ return [
25
+ `import { ${spec.export} as ${local} } from ${JSON.stringify(spec.module)};`,
26
+ `export const accessRegistry = { check: ${local} };`,
27
+ '',
28
+ ].join('\n');
29
+ }
15
30
  },
16
31
  };
17
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAGA,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AAC5D,MAAM,0BAA0B,GAAG,KAAK,iBAAiB,EAAE,CAAA;AAE3D,MAAM,UAAU,qBAAqB,CAAC,MAA4B;IACjE,OAAO;QACN,IAAI,EAAE,0BAA0B;QAChC,SAAS,CAAC,EAAE;YACX,IAAI,EAAE,KAAK,iBAAiB,EAAE,CAAC;gBAC9B,OAAO,0BAA0B,CAAA;YAClC,CAAC;QACF,CAAC;QACD,IAAI,CAAC,EAAE;YACN,IAAI,EAAE,KAAK,0BAA0B,EAAE,CAAC;gBACvC,OAAO,yBAAyB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAA;YAC1D,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAGA,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AAC5D,MAAM,0BAA0B,GAAG,KAAK,iBAAiB,EAAE,CAAA;AAC3D,MAAM,uBAAuB,GAAG,wCAAwC,CAAA;AACxE,MAAM,gCAAgC,GAAG,KAAK,uBAAuB,EAAE,CAAA;AAEvE,MAAM,UAAU,qBAAqB,CAAC,MAA4B;IACjE,OAAO;QACN,IAAI,EAAE,0BAA0B;QAChC,SAAS,CAAC,EAAE;YACX,IAAI,EAAE,KAAK,iBAAiB;gBAAE,OAAO,0BAA0B,CAAA;YAC/D,IAAI,EAAE,KAAK,uBAAuB;gBAAE,OAAO,gCAAgC,CAAA;QAC5E,CAAC;QACD,IAAI,CAAC,EAAE;YACN,IAAI,EAAE,KAAK,0BAA0B,EAAE,CAAC;gBACvC,OAAO,yBAAyB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAA;YAC1D,CAAC;YACD,IAAI,EAAE,KAAK,gCAAgC,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAA;gBAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,OAAO,qCAAqC,CAAA;gBAC7C,CAAC;gBACD,MAAM,KAAK,GAAG,2BAA2B,CAAA;gBACzC,OAAO;oBACN,YAAY,IAAI,CAAC,MAAM,OAAO,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;oBAC5E,0CAA0C,KAAK,KAAK;oBACpD,EAAE;iBACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACb,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/video",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -7,6 +7,7 @@ import {
7
7
  posterUrl,
8
8
  premiumManifestUrl,
9
9
  } from '@growth-labs/video/utils'
10
+ import { buildPlayerBooleanAttrs } from './player-boolean-attrs'
10
11
 
11
12
  interface Props {
12
13
  videoId: string
@@ -48,6 +49,14 @@ const chaptersSrc = showChapters ? chaptersUrl(config.publicDomain, videoId) : n
48
49
  const captionsSrc = showCaptions
49
50
  ? captionsUrl(config.publicDomain, videoId, captionsLang)
50
51
  : null
52
+
53
+ // Custom elements treat attribute *presence* as truthy. Spread only the
54
+ // keys that resolve to true so SSR for `autoplay: false` / `muted: false`
55
+ // omits the attributes entirely — see player-boolean-attrs.ts.
56
+ const playerBoolAttrs = buildPlayerBooleanAttrs({
57
+ autoplay: Astro.props.autoplay ?? config.player.autoplay,
58
+ muted: Astro.props.muted ?? config.player.muted,
59
+ })
51
60
  ---
52
61
 
53
62
  <media-player
@@ -63,9 +72,8 @@ const captionsSrc = showCaptions
63
72
  src={premium ? undefined : src}
64
73
  poster={poster}
65
74
  preload={config.player.preload}
66
- autoplay={Astro.props.autoplay ?? config.player.autoplay}
67
- muted={Astro.props.muted ?? config.player.muted}
68
75
  class={`gl-video ${className ?? ''}`.trim()}
76
+ {...playerBoolAttrs}
69
77
  >
70
78
  <media-provider>
71
79
  {captionsSrc && (
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Build the subset of boolean-presence attributes for a `<media-player>`
3
+ * element. Custom elements (including Vidstack's `media-player`) treat
4
+ * attribute *presence* as truthy regardless of the string value — so
5
+ * `autoplay="false"` is read as truthy by `hasAttribute('autoplay')` and
6
+ * triggers autoplay. Astro renders interpolated booleans as the literal
7
+ * strings `"true"` / `"false"` for custom elements (it has no allowlist
8
+ * of HTML-spec'd boolean attrs on non-HTMLElement tags), so we cannot
9
+ * write `autoplay={resolvedAutoplay}` directly. Instead we spread an
10
+ * attrs object that only contains the key when the value is truthy.
11
+ *
12
+ * The returned shape is `Record<string, true>` so a downstream
13
+ * `<media-player {...attrs}>` emits `autoplay` / `muted` as bare
14
+ * presence attributes when set, and emits nothing for them when not.
15
+ */
16
+ export function buildPlayerBooleanAttrs(input: {
17
+ autoplay: boolean
18
+ muted: boolean
19
+ }): Record<string, true> {
20
+ const attrs: Record<string, true> = {}
21
+ if (input.autoplay) attrs.autoplay = true
22
+ if (input.muted) attrs.muted = true
23
+ return attrs
24
+ }
@@ -1,16 +0,0 @@
1
- import type { APIContext } from 'astro';
2
- export interface AccessCheckParams {
3
- videoId: string;
4
- request: Request;
5
- env: Record<string, unknown>;
6
- }
7
- export interface AccessResult {
8
- allowed: boolean;
9
- reason?: string;
10
- subjectId?: string;
11
- }
12
- export type AccessCheck = (params: AccessCheckParams, context: APIContext) => Promise<AccessResult>;
13
- export declare function registerAccessCheck(check: AccessCheck): void;
14
- export declare function getAccessCheck(): AccessCheck | null;
15
- export declare function _resetAccessRegistry(): void;
16
- //# sourceMappingURL=access-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"access-registry.d.ts","sourceRoot":"","sources":["../src/access-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEvC,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAInG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAK5D;AAED,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAGD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -1,15 +0,0 @@
1
- let registered = null;
2
- export function registerAccessCheck(check) {
3
- if (registered) {
4
- console.warn('@growth-labs/video: access check replaced (previous registration overwritten)');
5
- }
6
- registered = check;
7
- }
8
- export function getAccessCheck() {
9
- return registered;
10
- }
11
- // Test-only reset. Not exported from the package's public surface.
12
- export function _resetAccessRegistry() {
13
- registered = null;
14
- }
15
- //# sourceMappingURL=access-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"access-registry.js","sourceRoot":"","sources":["../src/access-registry.ts"],"names":[],"mappings":"AAgBA,IAAI,UAAU,GAAuB,IAAI,CAAA;AAEzC,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACrD,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC9F,CAAC;IACD,UAAU,GAAG,KAAK,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,OAAO,UAAU,CAAA;AAClB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,oBAAoB;IACnC,UAAU,GAAG,IAAI,CAAA;AAClB,CAAC"}