@graffiti-garden/api 1.0.7 → 1.0.8
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/cjs/4-utilities.js
CHANGED
|
@@ -70,7 +70,7 @@ function isMediaAcceptable(mediaType, acceptableMediaTypes) {
|
|
|
70
70
|
let ajv = void 0;
|
|
71
71
|
async function compileGraffitiObjectSchema(schema) {
|
|
72
72
|
if (!ajv) {
|
|
73
|
-
const { Ajv } = await import("ajv");
|
|
73
|
+
const { default: Ajv } = await import("ajv");
|
|
74
74
|
ajv = new Ajv({ strict: false });
|
|
75
75
|
}
|
|
76
76
|
try {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/4-utilities.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n GraffitiObject,\n GraffitiObjectBase,\n GraffitiObjectUrl,\n GraffitiSession,\n} from \"./2-types.js\";\nimport { GraffitiErrorInvalidSchema } from \"./3-errors.js\";\nimport type { JSONSchema } from \"json-schema-to-ts\";\nimport type Ajv from \"ajv\";\n\nexport function unpackObjectUrl(url: string | GraffitiObjectUrl) {\n return typeof url === \"string\" ? url : url.url;\n}\n\nexport function isActorAllowedGraffitiObject(\n object: GraffitiObjectBase,\n session?: GraffitiSession | null,\n) {\n return (\n // If there is no allowed list, the actor is allowed.\n !Array.isArray(object.allowed) ||\n // Otherwise...\n (typeof session?.actor === \"string\" &&\n // The actor must be the creator of the object\n (object.actor === session.actor ||\n // Or be on the allowed list\n object.allowed.includes(session.actor)))\n );\n}\n\nexport function maskGraffitiObject(\n object: GraffitiObjectBase,\n channels: string[],\n actor?: string | null,\n): GraffitiObjectBase {\n // If the actor is the creator, return the object as is\n if (actor === object.actor) return object;\n\n // If there is an allowed list, mask it to only include the actor\n // (This assumes the actor is already allowed to access the object)\n const allowedMasked = object.allowed && actor ? [actor] : undefined;\n // Mask the channels to only include the channels that are being queried\n const channelsMasked = object.channels.filter((c) => channels.includes(c));\n\n return {\n ...object,\n allowed: allowedMasked,\n channels: channelsMasked,\n };\n}\n\nexport function isMediaAcceptable(\n mediaType: string,\n acceptableMediaTypes: string[],\n): boolean {\n const [type, subtype] = mediaType.toLowerCase().split(\";\")[0].split(\"/\");\n\n if (!type || !subtype) return false;\n\n return acceptableMediaTypes.some((acceptable) => {\n const [accType, accSubtype] = acceptable\n .toLowerCase()\n .split(\";\")[0]\n .split(\"/\");\n\n if (!accType || !accSubtype) return false;\n\n return (\n (accType === type || accType === \"*\") &&\n (accSubtype === subtype || accSubtype === \"*\")\n );\n });\n}\n\nlet ajv: Ajv | undefined = undefined;\nexport async function compileGraffitiObjectSchema<Schema extends JSONSchema>(\n schema: Schema,\n) {\n if (!ajv) {\n const { Ajv } = await import(\"ajv\");\n ajv = new Ajv({ strict: false });\n }\n\n try {\n // Force the validation guard because\n // it is too big for the type checker.\n // Fortunately json-schema-to-ts is\n // well tested against ajv.\n return ajv.compile(schema) as (\n data: GraffitiObjectBase,\n ) => data is GraffitiObject<Schema>;\n } catch (error) {\n throw new GraffitiErrorInvalidSchema(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,oBAA2C;AAIpC,SAAS,gBAAgB,KAAiC;AAC/D,SAAO,OAAO,QAAQ,WAAW,MAAM,IAAI;AAC7C;AAEO,SAAS,6BACd,QACA,SACA;AACA;AAAA;AAAA,IAEE,CAAC,MAAM,QAAQ,OAAO,OAAO;AAAA,IAE5B,OAAO,SAAS,UAAU;AAAA,KAExB,OAAO,UAAU,QAAQ;AAAA,IAExB,OAAO,QAAQ,SAAS,QAAQ,KAAK;AAAA;AAE7C;AAEO,SAAS,mBACd,QACA,UACA,OACoB;AAEpB,MAAI,UAAU,OAAO,MAAO,QAAO;AAInC,QAAM,gBAAgB,OAAO,WAAW,QAAQ,CAAC,KAAK,IAAI;AAE1D,QAAM,iBAAiB,OAAO,SAAS,OAAO,CAAC,MAAM,SAAS,SAAS,CAAC,CAAC;AAEzE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,kBACd,WACA,sBACS;AACT,QAAM,CAAC,MAAM,OAAO,IAAI,UAAU,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG;AAEvE,MAAI,CAAC,QAAQ,CAAC,QAAS,QAAO;AAE9B,SAAO,qBAAqB,KAAK,CAAC,eAAe;AAC/C,UAAM,CAAC,SAAS,UAAU,IAAI,WAC3B,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC,EACZ,MAAM,GAAG;AAEZ,QAAI,CAAC,WAAW,CAAC,WAAY,QAAO;AAEpC,YACG,YAAY,QAAQ,YAAY,SAChC,eAAe,WAAW,eAAe;AAAA,EAE9C,CAAC;AACH;AAEA,IAAI,MAAuB;AAC3B,eAAsB,4BACpB,QACA;AACA,MAAI,CAAC,KAAK;AACR,UAAM,EAAE,IAAI,IAAI,MAAM,OAAO,KAAK;
|
|
4
|
+
"sourcesContent": ["import type {\n GraffitiObject,\n GraffitiObjectBase,\n GraffitiObjectUrl,\n GraffitiSession,\n} from \"./2-types.js\";\nimport { GraffitiErrorInvalidSchema } from \"./3-errors.js\";\nimport type { JSONSchema } from \"json-schema-to-ts\";\nimport type Ajv from \"ajv\";\n\nexport function unpackObjectUrl(url: string | GraffitiObjectUrl) {\n return typeof url === \"string\" ? url : url.url;\n}\n\nexport function isActorAllowedGraffitiObject(\n object: GraffitiObjectBase,\n session?: GraffitiSession | null,\n) {\n return (\n // If there is no allowed list, the actor is allowed.\n !Array.isArray(object.allowed) ||\n // Otherwise...\n (typeof session?.actor === \"string\" &&\n // The actor must be the creator of the object\n (object.actor === session.actor ||\n // Or be on the allowed list\n object.allowed.includes(session.actor)))\n );\n}\n\nexport function maskGraffitiObject(\n object: GraffitiObjectBase,\n channels: string[],\n actor?: string | null,\n): GraffitiObjectBase {\n // If the actor is the creator, return the object as is\n if (actor === object.actor) return object;\n\n // If there is an allowed list, mask it to only include the actor\n // (This assumes the actor is already allowed to access the object)\n const allowedMasked = object.allowed && actor ? [actor] : undefined;\n // Mask the channels to only include the channels that are being queried\n const channelsMasked = object.channels.filter((c) => channels.includes(c));\n\n return {\n ...object,\n allowed: allowedMasked,\n channels: channelsMasked,\n };\n}\n\nexport function isMediaAcceptable(\n mediaType: string,\n acceptableMediaTypes: string[],\n): boolean {\n const [type, subtype] = mediaType.toLowerCase().split(\";\")[0].split(\"/\");\n\n if (!type || !subtype) return false;\n\n return acceptableMediaTypes.some((acceptable) => {\n const [accType, accSubtype] = acceptable\n .toLowerCase()\n .split(\";\")[0]\n .split(\"/\");\n\n if (!accType || !accSubtype) return false;\n\n return (\n (accType === type || accType === \"*\") &&\n (accSubtype === subtype || accSubtype === \"*\")\n );\n });\n}\n\nlet ajv: Ajv | undefined = undefined;\nexport async function compileGraffitiObjectSchema<Schema extends JSONSchema>(\n schema: Schema,\n) {\n if (!ajv) {\n const { default: Ajv } = await import(\"ajv\");\n ajv = new Ajv({ strict: false });\n }\n\n try {\n // Force the validation guard because\n // it is too big for the type checker.\n // Fortunately json-schema-to-ts is\n // well tested against ajv.\n return ajv.compile(schema) as (\n data: GraffitiObjectBase,\n ) => data is GraffitiObject<Schema>;\n } catch (error) {\n throw new GraffitiErrorInvalidSchema(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,oBAA2C;AAIpC,SAAS,gBAAgB,KAAiC;AAC/D,SAAO,OAAO,QAAQ,WAAW,MAAM,IAAI;AAC7C;AAEO,SAAS,6BACd,QACA,SACA;AACA;AAAA;AAAA,IAEE,CAAC,MAAM,QAAQ,OAAO,OAAO;AAAA,IAE5B,OAAO,SAAS,UAAU;AAAA,KAExB,OAAO,UAAU,QAAQ;AAAA,IAExB,OAAO,QAAQ,SAAS,QAAQ,KAAK;AAAA;AAE7C;AAEO,SAAS,mBACd,QACA,UACA,OACoB;AAEpB,MAAI,UAAU,OAAO,MAAO,QAAO;AAInC,QAAM,gBAAgB,OAAO,WAAW,QAAQ,CAAC,KAAK,IAAI;AAE1D,QAAM,iBAAiB,OAAO,SAAS,OAAO,CAAC,MAAM,SAAS,SAAS,CAAC,CAAC;AAEzE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,kBACd,WACA,sBACS;AACT,QAAM,CAAC,MAAM,OAAO,IAAI,UAAU,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG;AAEvE,MAAI,CAAC,QAAQ,CAAC,QAAS,QAAO;AAE9B,SAAO,qBAAqB,KAAK,CAAC,eAAe;AAC/C,UAAM,CAAC,SAAS,UAAU,IAAI,WAC3B,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC,EACZ,MAAM,GAAG;AAEZ,QAAI,CAAC,WAAW,CAAC,WAAY,QAAO;AAEpC,YACG,YAAY,QAAQ,YAAY,SAChC,eAAe,WAAW,eAAe;AAAA,EAE9C,CAAC;AACH;AAEA,IAAI,MAAuB;AAC3B,eAAsB,4BACpB,QACA;AACA,MAAI,CAAC,KAAK;AACR,UAAM,EAAE,SAAS,IAAI,IAAI,MAAM,OAAO,KAAK;AAC3C,UAAM,IAAI,IAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EACjC;AAEA,MAAI;AAKF,WAAO,IAAI,QAAQ,MAAM;AAAA,EAG3B,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/esm/4-utilities.js
CHANGED
|
@@ -33,7 +33,7 @@ function isMediaAcceptable(mediaType, acceptableMediaTypes) {
|
|
|
33
33
|
let ajv = void 0;
|
|
34
34
|
async function compileGraffitiObjectSchema(schema) {
|
|
35
35
|
if (!ajv) {
|
|
36
|
-
const { Ajv } = await import("ajv");
|
|
36
|
+
const { default: Ajv } = await import("ajv");
|
|
37
37
|
ajv = new Ajv({ strict: false });
|
|
38
38
|
}
|
|
39
39
|
try {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/4-utilities.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n GraffitiObject,\n GraffitiObjectBase,\n GraffitiObjectUrl,\n GraffitiSession,\n} from \"./2-types.js\";\nimport { GraffitiErrorInvalidSchema } from \"./3-errors.js\";\nimport type { JSONSchema } from \"json-schema-to-ts\";\nimport type Ajv from \"ajv\";\n\nexport function unpackObjectUrl(url: string | GraffitiObjectUrl) {\n return typeof url === \"string\" ? url : url.url;\n}\n\nexport function isActorAllowedGraffitiObject(\n object: GraffitiObjectBase,\n session?: GraffitiSession | null,\n) {\n return (\n // If there is no allowed list, the actor is allowed.\n !Array.isArray(object.allowed) ||\n // Otherwise...\n (typeof session?.actor === \"string\" &&\n // The actor must be the creator of the object\n (object.actor === session.actor ||\n // Or be on the allowed list\n object.allowed.includes(session.actor)))\n );\n}\n\nexport function maskGraffitiObject(\n object: GraffitiObjectBase,\n channels: string[],\n actor?: string | null,\n): GraffitiObjectBase {\n // If the actor is the creator, return the object as is\n if (actor === object.actor) return object;\n\n // If there is an allowed list, mask it to only include the actor\n // (This assumes the actor is already allowed to access the object)\n const allowedMasked = object.allowed && actor ? [actor] : undefined;\n // Mask the channels to only include the channels that are being queried\n const channelsMasked = object.channels.filter((c) => channels.includes(c));\n\n return {\n ...object,\n allowed: allowedMasked,\n channels: channelsMasked,\n };\n}\n\nexport function isMediaAcceptable(\n mediaType: string,\n acceptableMediaTypes: string[],\n): boolean {\n const [type, subtype] = mediaType.toLowerCase().split(\";\")[0].split(\"/\");\n\n if (!type || !subtype) return false;\n\n return acceptableMediaTypes.some((acceptable) => {\n const [accType, accSubtype] = acceptable\n .toLowerCase()\n .split(\";\")[0]\n .split(\"/\");\n\n if (!accType || !accSubtype) return false;\n\n return (\n (accType === type || accType === \"*\") &&\n (accSubtype === subtype || accSubtype === \"*\")\n );\n });\n}\n\nlet ajv: Ajv | undefined = undefined;\nexport async function compileGraffitiObjectSchema<Schema extends JSONSchema>(\n schema: Schema,\n) {\n if (!ajv) {\n const { Ajv } = await import(\"ajv\");\n ajv = new Ajv({ strict: false });\n }\n\n try {\n // Force the validation guard because\n // it is too big for the type checker.\n // Fortunately json-schema-to-ts is\n // well tested against ajv.\n return ajv.compile(schema) as (\n data: GraffitiObjectBase,\n ) => data is GraffitiObject<Schema>;\n } catch (error) {\n throw new GraffitiErrorInvalidSchema(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "AAMA,SAAS,kCAAkC;AAIpC,SAAS,gBAAgB,KAAiC;AAC/D,SAAO,OAAO,QAAQ,WAAW,MAAM,IAAI;AAC7C;AAEO,SAAS,6BACd,QACA,SACA;AACA;AAAA;AAAA,IAEE,CAAC,MAAM,QAAQ,OAAO,OAAO;AAAA,IAE5B,OAAO,SAAS,UAAU;AAAA,KAExB,OAAO,UAAU,QAAQ;AAAA,IAExB,OAAO,QAAQ,SAAS,QAAQ,KAAK;AAAA;AAE7C;AAEO,SAAS,mBACd,QACA,UACA,OACoB;AAEpB,MAAI,UAAU,OAAO,MAAO,QAAO;AAInC,QAAM,gBAAgB,OAAO,WAAW,QAAQ,CAAC,KAAK,IAAI;AAE1D,QAAM,iBAAiB,OAAO,SAAS,OAAO,CAAC,MAAM,SAAS,SAAS,CAAC,CAAC;AAEzE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,kBACd,WACA,sBACS;AACT,QAAM,CAAC,MAAM,OAAO,IAAI,UAAU,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG;AAEvE,MAAI,CAAC,QAAQ,CAAC,QAAS,QAAO;AAE9B,SAAO,qBAAqB,KAAK,CAAC,eAAe;AAC/C,UAAM,CAAC,SAAS,UAAU,IAAI,WAC3B,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC,EACZ,MAAM,GAAG;AAEZ,QAAI,CAAC,WAAW,CAAC,WAAY,QAAO;AAEpC,YACG,YAAY,QAAQ,YAAY,SAChC,eAAe,WAAW,eAAe;AAAA,EAE9C,CAAC;AACH;AAEA,IAAI,MAAuB;AAC3B,eAAsB,4BACpB,QACA;AACA,MAAI,CAAC,KAAK;AACR,UAAM,EAAE,IAAI,IAAI,MAAM,OAAO,KAAK;
|
|
4
|
+
"sourcesContent": ["import type {\n GraffitiObject,\n GraffitiObjectBase,\n GraffitiObjectUrl,\n GraffitiSession,\n} from \"./2-types.js\";\nimport { GraffitiErrorInvalidSchema } from \"./3-errors.js\";\nimport type { JSONSchema } from \"json-schema-to-ts\";\nimport type Ajv from \"ajv\";\n\nexport function unpackObjectUrl(url: string | GraffitiObjectUrl) {\n return typeof url === \"string\" ? url : url.url;\n}\n\nexport function isActorAllowedGraffitiObject(\n object: GraffitiObjectBase,\n session?: GraffitiSession | null,\n) {\n return (\n // If there is no allowed list, the actor is allowed.\n !Array.isArray(object.allowed) ||\n // Otherwise...\n (typeof session?.actor === \"string\" &&\n // The actor must be the creator of the object\n (object.actor === session.actor ||\n // Or be on the allowed list\n object.allowed.includes(session.actor)))\n );\n}\n\nexport function maskGraffitiObject(\n object: GraffitiObjectBase,\n channels: string[],\n actor?: string | null,\n): GraffitiObjectBase {\n // If the actor is the creator, return the object as is\n if (actor === object.actor) return object;\n\n // If there is an allowed list, mask it to only include the actor\n // (This assumes the actor is already allowed to access the object)\n const allowedMasked = object.allowed && actor ? [actor] : undefined;\n // Mask the channels to only include the channels that are being queried\n const channelsMasked = object.channels.filter((c) => channels.includes(c));\n\n return {\n ...object,\n allowed: allowedMasked,\n channels: channelsMasked,\n };\n}\n\nexport function isMediaAcceptable(\n mediaType: string,\n acceptableMediaTypes: string[],\n): boolean {\n const [type, subtype] = mediaType.toLowerCase().split(\";\")[0].split(\"/\");\n\n if (!type || !subtype) return false;\n\n return acceptableMediaTypes.some((acceptable) => {\n const [accType, accSubtype] = acceptable\n .toLowerCase()\n .split(\";\")[0]\n .split(\"/\");\n\n if (!accType || !accSubtype) return false;\n\n return (\n (accType === type || accType === \"*\") &&\n (accSubtype === subtype || accSubtype === \"*\")\n );\n });\n}\n\nlet ajv: Ajv | undefined = undefined;\nexport async function compileGraffitiObjectSchema<Schema extends JSONSchema>(\n schema: Schema,\n) {\n if (!ajv) {\n const { default: Ajv } = await import(\"ajv\");\n ajv = new Ajv({ strict: false });\n }\n\n try {\n // Force the validation guard because\n // it is too big for the type checker.\n // Fortunately json-schema-to-ts is\n // well tested against ajv.\n return ajv.compile(schema) as (\n data: GraffitiObjectBase,\n ) => data is GraffitiObject<Schema>;\n } catch (error) {\n throw new GraffitiErrorInvalidSchema(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "AAMA,SAAS,kCAAkC;AAIpC,SAAS,gBAAgB,KAAiC;AAC/D,SAAO,OAAO,QAAQ,WAAW,MAAM,IAAI;AAC7C;AAEO,SAAS,6BACd,QACA,SACA;AACA;AAAA;AAAA,IAEE,CAAC,MAAM,QAAQ,OAAO,OAAO;AAAA,IAE5B,OAAO,SAAS,UAAU;AAAA,KAExB,OAAO,UAAU,QAAQ;AAAA,IAExB,OAAO,QAAQ,SAAS,QAAQ,KAAK;AAAA;AAE7C;AAEO,SAAS,mBACd,QACA,UACA,OACoB;AAEpB,MAAI,UAAU,OAAO,MAAO,QAAO;AAInC,QAAM,gBAAgB,OAAO,WAAW,QAAQ,CAAC,KAAK,IAAI;AAE1D,QAAM,iBAAiB,OAAO,SAAS,OAAO,CAAC,MAAM,SAAS,SAAS,CAAC,CAAC;AAEzE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,kBACd,WACA,sBACS;AACT,QAAM,CAAC,MAAM,OAAO,IAAI,UAAU,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG;AAEvE,MAAI,CAAC,QAAQ,CAAC,QAAS,QAAO;AAE9B,SAAO,qBAAqB,KAAK,CAAC,eAAe;AAC/C,UAAM,CAAC,SAAS,UAAU,IAAI,WAC3B,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC,EACZ,MAAM,GAAG;AAEZ,QAAI,CAAC,WAAW,CAAC,WAAY,QAAO;AAEpC,YACG,YAAY,QAAQ,YAAY,SAChC,eAAe,WAAW,eAAe;AAAA,EAE9C,CAAC;AACH;AAEA,IAAI,MAAuB;AAC3B,eAAsB,4BACpB,QACA;AACA,MAAI,CAAC,KAAK;AACR,UAAM,EAAE,SAAS,IAAI,IAAI,MAAM,OAAO,KAAK;AAC3C,UAAM,IAAI,IAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EACjC;AAEA,MAAI;AAKF,WAAO,IAAI,QAAQ,MAAM;AAAA,EAG3B,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
package/src/4-utilities.ts
CHANGED