strapi-typed-client 1.0.2 → 1.0.3

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.
@@ -6,6 +6,9 @@ export interface StrapiContext {
6
6
  state: {
7
7
  user?: unknown;
8
8
  };
9
+ request: {
10
+ header: Record<string, string | undefined>;
11
+ };
9
12
  unauthorized: (message: string) => void;
10
13
  body: unknown;
11
14
  }
@@ -19,6 +22,7 @@ export interface StrapiInstance {
19
22
  getSchemaHash: () => unknown;
20
23
  };
21
24
  };
25
+ service: (uid: string) => any;
22
26
  log: {
23
27
  error: (message: string, error?: unknown) => void;
24
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/plugin/server/src/controllers/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE;QACH,IAAI,CAAC,EAAE,OAAO,CAAA;KACjB,CAAA;IACD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,IAAI,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE;QACJ,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;KACxD,CAAA;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QACtB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;YACvB,SAAS,EAAE,MAAM,OAAO,CAAA;YACxB,aAAa,EAAE,MAAM,OAAO,CAAA;SAC/B,CAAA;KACJ,CAAA;IACD,GAAG,EAAE;QACD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KACpD,CAAA;CACJ;yBAEe,YAAY;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE;IAClD;;;OAGG;mBACkB,aAAa;IAwBlC;;;OAGG;uBACsB,aAAa;;AAjC1C,wBA0DE"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/plugin/server/src/controllers/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE;QACH,IAAI,CAAC,EAAE,OAAO,CAAA;KACjB,CAAA;IACD,OAAO,EAAE;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;KAC7C,CAAA;IACD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,IAAI,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE;QACJ,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;KACxD,CAAA;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QACtB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;YACvB,SAAS,EAAE,MAAM,OAAO,CAAA;YACxB,aAAa,EAAE,MAAM,OAAO,CAAA;SAC/B,CAAA;KACJ,CAAA;IACD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAA;IAC7B,GAAG,EAAE;QACD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KACpD,CAAA;CACJ;yBA6Be,YAAY;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE;IAClD;;;OAGG;mBACkB,aAAa;IA4BlC;;;OAGG;uBACsB,aAAa;;AArC1C,wBAgEE"}
@@ -2,16 +2,42 @@
2
2
  * Schema controller for Strapi Types Plugin
3
3
  * Exposes endpoints for fetching schema and schema hash
4
4
  */
5
+ /**
6
+ * Manually validate an API token since routes use auth: false
7
+ * (Strapi skips its auth middleware when auth: false is set)
8
+ */
9
+ async function validateApiToken(strapi, ctx) {
10
+ // Already authenticated via other means
11
+ if (ctx.state.user)
12
+ return true;
13
+ const authorization = ctx.request.header.authorization;
14
+ if (!authorization)
15
+ return false;
16
+ const [scheme, token] = authorization.split(' ');
17
+ if (scheme !== 'Bearer' || !token)
18
+ return false;
19
+ try {
20
+ const apiTokenService = strapi.service('admin::api-token');
21
+ const accessKey = await apiTokenService.hash(token);
22
+ const storedToken = await apiTokenService.getBy({ accessKey });
23
+ return !!storedToken;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
5
29
  export default ({ strapi }) => ({
6
30
  /**
7
31
  * GET /api/strapi-types/schema
8
32
  * Returns the full schema with hash
9
33
  */
10
34
  async getSchema(ctx) {
11
- // Check auth based on config
12
35
  const requireAuth = strapi.config.get('plugin::strapi-typed-client.requireAuth', process.env.NODE_ENV === 'production');
13
- if (requireAuth && !ctx.state.user) {
14
- return ctx.unauthorized('Authentication required to access schema');
36
+ if (requireAuth) {
37
+ const isAuthenticated = await validateApiToken(strapi, ctx);
38
+ if (!isAuthenticated) {
39
+ return ctx.unauthorized('Authentication required to access schema');
40
+ }
15
41
  }
16
42
  try {
17
43
  const schemaService = strapi
@@ -30,10 +56,12 @@ export default ({ strapi }) => ({
30
56
  * Returns only the schema hash (lightweight)
31
57
  */
32
58
  async getSchemaHash(ctx) {
33
- // Check auth based on config
34
59
  const requireAuth = strapi.config.get('plugin::strapi-typed-client.requireAuth', process.env.NODE_ENV === 'production');
35
- if (requireAuth && !ctx.state.user) {
36
- return ctx.unauthorized('Authentication required to access schema hash');
60
+ if (requireAuth) {
61
+ const isAuthenticated = await validateApiToken(strapi, ctx);
62
+ if (!isAuthenticated) {
63
+ return ctx.unauthorized('Authentication required to access schema hash');
64
+ }
37
65
  }
38
66
  try {
39
67
  const schemaService = strapi
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../src/plugin/server/src/controllers/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,eAAe,CAAC,EAAE,MAAM,EAA8B,EAAE,EAAE,CAAC,CAAC;IACxD;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,GAAkB;QAC9B,6BAA6B;QAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CACjC,yCAAyC,EACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CACxC,CAAA;QAED,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAA;QACvE,CAAC;QAED,IAAI,CAAC;YACD,MAAM,aAAa,GAAG,MAAM;iBACvB,MAAM,CAAC,qBAAqB,CAAC;iBAC7B,OAAO,CAAC,QAAQ,CAAC,CAAA;YACtB,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAA;YAExC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAA;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;YACnD,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,GAAkB;QAClC,6BAA6B;QAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CACjC,yCAAyC,EACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CACxC,CAAA;QAED,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,YAAY,CACnB,+CAA+C,CAClD,CAAA;QACL,CAAC;QAED,IAAI,CAAC;YACD,MAAM,aAAa,GAAG,MAAM;iBACvB,MAAM,CAAC,qBAAqB,CAAC;iBAC7B,OAAO,CAAC,QAAQ,CAAC,CAAA;YACtB,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,EAAE,CAAA;YAE5C,GAAG,CAAC,IAAI,GAAG,MAAM,CAAA;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YACvD,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;CACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../src/plugin/server/src/controllers/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "strapi-typed-client",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "description": "Type-safe Strapi v5 client with automatic TypeScript codegen and populate type inference",
6
6
  "main": "dist/index.js",