@shopware-ag/app-server-sdk 1.1.5 → 1.1.6
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 +24 -1
- package/dist/commonjs/helper/admin-api.d.ts.map +1 -1
- package/dist/commonjs/helper/admin-api.js +13 -6
- package/dist/commonjs/helper/admin-api.js.map +1 -1
- package/dist/commonjs/helper/media.d.ts +48 -0
- package/dist/commonjs/helper/media.d.ts.map +1 -0
- package/dist/commonjs/helper/media.js +100 -0
- package/dist/commonjs/helper/media.js.map +1 -0
- package/dist/commonjs/integration/better-sqlite3.js +1 -1
- package/dist/commonjs/integration/better-sqlite3.js.map +1 -1
- package/dist/commonjs/integration/bun-sqlite.d.ts.map +1 -1
- package/dist/commonjs/integration/bun-sqlite.js +2 -1
- package/dist/commonjs/integration/bun-sqlite.js.map +1 -1
- package/dist/commonjs/types.d.ts +12 -0
- package/dist/commonjs/types.d.ts.map +1 -1
- package/dist/commonjs/types.js.map +1 -1
- package/dist/esm/helper/admin-api.d.ts.map +1 -1
- package/dist/esm/helper/admin-api.js +13 -6
- package/dist/esm/helper/admin-api.js.map +1 -1
- package/dist/esm/helper/media.d.ts +48 -0
- package/dist/esm/helper/media.d.ts.map +1 -0
- package/dist/esm/helper/media.js +94 -0
- package/dist/esm/helper/media.js.map +1 -0
- package/dist/esm/integration/better-sqlite3.js +1 -1
- package/dist/esm/integration/better-sqlite3.js.map +1 -1
- package/dist/esm/integration/bun-sqlite.d.ts.map +1 -1
- package/dist/esm/integration/bun-sqlite.js +2 -1
- package/dist/esm/integration/bun-sqlite.js.map +1 -1
- package/dist/esm/types.d.ts +12 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +12 -1
package/README.md
CHANGED
|
@@ -17,6 +17,9 @@ npm install @shopware-ag/app-server-sdk --save
|
|
|
17
17
|
|
|
18
18
|
## Example
|
|
19
19
|
|
|
20
|
+
<details>
|
|
21
|
+
<summary>Bun Plain</summary>
|
|
22
|
+
|
|
20
23
|
```typescript
|
|
21
24
|
import { AppServer, InMemoryShopRepository } from '@shopware-ag/app-server-sdk'
|
|
22
25
|
import { createNotificationResponse } from '@shopware-ag/app-server-sdk/helper/app-actions'
|
|
@@ -36,7 +39,7 @@ const server = Bun.serve({
|
|
|
36
39
|
} else if (pathname === '/authorize/callback') {
|
|
37
40
|
return app.registration.authorizeCallback(request);
|
|
38
41
|
} else if (pathname === '/app/product') {
|
|
39
|
-
const context = await app.contextResolver.
|
|
42
|
+
const context = await app.contextResolver.fromAPI(request);
|
|
40
43
|
|
|
41
44
|
// do something with payload, and http client
|
|
42
45
|
|
|
@@ -55,8 +58,28 @@ const server = Bun.serve({
|
|
|
55
58
|
console.log(`Listening on localhost:${server.port}`);
|
|
56
59
|
```
|
|
57
60
|
|
|
61
|
+
</details>
|
|
62
|
+
|
|
58
63
|
Checkout the [examples](./examples) folder for more examples using:
|
|
59
64
|
|
|
60
65
|
- [Cloudflare Worker with Hono](./examples/cloudflare-hono)
|
|
61
66
|
- [Deno with Hono](./examples/deno-hono)
|
|
62
67
|
- [Node with Hono](./examples/node-hono)
|
|
68
|
+
|
|
69
|
+
or use clone them as a starting point for your own project.
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Node.js
|
|
73
|
+
npx tiged shopware/app-sdk-js/examples/node-hono demo-app
|
|
74
|
+
|
|
75
|
+
# Bun
|
|
76
|
+
npx tiged shopware/app-sdk-js/examples/bun-hono demo-app
|
|
77
|
+
|
|
78
|
+
# Deno
|
|
79
|
+
npx tiged shopware/app-sdk-js/examples/deno-hono demo-app
|
|
80
|
+
|
|
81
|
+
# Cloudflare Worker
|
|
82
|
+
npx tiged shopware/app-sdk-js/examples/cloudflare-hono demo-app
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
and then `cd demo-app` and `npm install` to install the dependencies.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-api.d.ts","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,qBAAa,UAAU;IACtB,OAAO,CAAC,UAAU,CAAgB;IAClC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGhC,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,WAAW,GAAE,OAAO,GAAG,IAAW,EAClC,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,gBAAgB,GAAE,OAAO,GAAG,IAAW,EACvC,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,iBAAiB,GAAE,MAAM,GAAG,IAAW;IAUxC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAqBnC;AAED,qBAAa,gBAAgB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM;IAE1D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;gBADV,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM;IAMrB,MAAM,CAAC,YAAY,GAAG,MAAM,EACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,UAA6B,GACpC,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-api.d.ts","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,25 +48,32 @@ class EntityRepository {
|
|
|
48
48
|
this.entityName = entityName;
|
|
49
49
|
}
|
|
50
50
|
async search(criteria, context = new ApiContext()) {
|
|
51
|
-
const response = await this.client.post(`/search/${this.entityName}`, criteria.toPayload(), context.toHeaders());
|
|
51
|
+
const response = await this.client.post(`/search/${this.entityName.replaceAll("_", "-")}`, criteria.toPayload(), context.toHeaders());
|
|
52
52
|
return new EntitySearchResult(response.body.total, response.body.aggregations, response.body.data);
|
|
53
53
|
}
|
|
54
54
|
async searchIds(criteria, context = new ApiContext()) {
|
|
55
|
-
const response = await this.client.post(`/search-ids/${this.entityName}`, criteria.toPayload(), context.toHeaders());
|
|
55
|
+
const response = await this.client.post(`/search-ids/${this.entityName.replaceAll("_", "-")}`, criteria.toPayload(), context.toHeaders());
|
|
56
56
|
return response.body.data;
|
|
57
57
|
}
|
|
58
58
|
async aggregate(criteria, context = new ApiContext()) {
|
|
59
|
-
|
|
59
|
+
criteria.setLimit(1);
|
|
60
|
+
const response = await this.client.post(`/search/${this.entityName.replaceAll("_", "-")}`, criteria.toPayload(), context.toHeaders());
|
|
60
61
|
return new EntitySearchResult(response.body.total, response.body.aggregations, response.body.data);
|
|
61
62
|
}
|
|
62
63
|
async upsert(payload, context = new ApiContext()) {
|
|
63
|
-
await new SyncService(this.client).sync([
|
|
64
|
+
await new SyncService(this.client).sync([
|
|
65
|
+
new SyncOperation("upsert", this.entityName.replaceAll("-", "_"), "upsert", payload),
|
|
66
|
+
], context);
|
|
64
67
|
}
|
|
65
68
|
async delete(payload, context = new ApiContext()) {
|
|
66
|
-
await new SyncService(this.client).sync([
|
|
69
|
+
await new SyncService(this.client).sync([
|
|
70
|
+
new SyncOperation("delete", this.entityName.replaceAll("-", "_"), "delete", payload),
|
|
71
|
+
], context);
|
|
67
72
|
}
|
|
68
73
|
async deleteByFilters(filters, context = new ApiContext()) {
|
|
69
|
-
await new SyncService(this.client).sync([
|
|
74
|
+
await new SyncService(this.client).sync([
|
|
75
|
+
new SyncOperation("delete", this.entityName.replaceAll("-", "_"), "delete", [], filters),
|
|
76
|
+
], context);
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
exports.EntityRepository = EntityRepository;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-api.js","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HttpClient } from \"../http-client.js\";\nimport type { Criteria } from \"./criteria.js\";\nimport type { SingleFilter } from \"./criteria.js\";\n\nexport class ApiContext {\n\tprivate languageId: string | null;\n\tinheritance: boolean | null;\n\tversionId: string | null;\n\tskipTriggerFlows: boolean | null;\n\tindexingSkip: string | null;\n\tindexingBehaviour: string | null;\n\n\tconstructor(\n\t\tlanguageId: string | null = null,\n\t\tinheritance: boolean | null = null,\n\t\tversionId: string | null = null,\n\t\tskipTriggerFlows: boolean | null = null,\n\t\tindexingSkip: string | null = null,\n\t\tindexingBehaviour: string | null = null,\n\t) {\n\t\tthis.languageId = languageId;\n\t\tthis.inheritance = inheritance;\n\t\tthis.versionId = versionId;\n\t\tthis.skipTriggerFlows = skipTriggerFlows;\n\t\tthis.indexingSkip = indexingSkip;\n\t\tthis.indexingBehaviour = indexingBehaviour;\n\t}\n\n\ttoHeaders(): Record<string, string> {\n\t\tconst headers = {\n\t\t\t\"sw-language-id\": this.languageId,\n\t\t\t\"sw-inheritance\": this.inheritance === true ? \"1\" : \"0\",\n\t\t\t\"sw-version-id\": this.versionId,\n\t\t\t\"sw-skip-trigger-flow\": this.skipTriggerFlows === true ? \"1\" : \"0\",\n\t\t\t\"indexing-skip\": this.indexingSkip,\n\t\t\t\"indexing-behavior\": this.indexingBehaviour,\n\t\t};\n\n\t\tfor (const key of Object.keys(headers)) {\n\t\t\t// @ts-expect-error\n\t\t\tif (headers[key] === null) {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tdelete headers[key];\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\treturn headers;\n\t}\n}\n\nexport class EntityRepository<Entity extends object = object> {\n\tconstructor(\n\t\tprivate client: HttpClient,\n\t\tprivate entityName: string,\n\t) {\n\t\tthis.client = client;\n\t\tthis.entityName = entityName;\n\t}\n\n\tasync search<Aggregations = object>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<Entity, Aggregations>> {\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<Entity, Aggregations>\n\t\t>(`/search/${this.entityName}`, criteria.toPayload(), context.toHeaders());\n\n\t\treturn new EntitySearchResult<Entity, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync searchIds(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<string[]> {\n\t\tconst response = await this.client.post<{ data: string[] }>(\n\t\t\t`/search-ids/${this.entityName}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn response.body.data;\n\t}\n\n\tasync aggregate<Aggregations>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<object, Aggregations>> {\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<object, Aggregations>\n\t\t>(\n\t\t\t`/aggregate/${this.entityName}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn new EntitySearchResult<object, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync upsert(\n\t\tpayload: Entity[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[new SyncOperation(\"upsert\", this.entityName, \"upsert\", payload)],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync delete<DeleteType extends object = { id: string }>(\n\t\tpayload: DeleteType[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[new SyncOperation(\"delete\", this.entityName, \"delete\", payload)],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync deleteByFilters(\n\t\tfilters: SingleFilter[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[new SyncOperation(\"delete\", this.entityName, \"delete\", [], filters)],\n\t\t\tcontext,\n\t\t);\n\t}\n}\n\nexport class SyncService {\n\tconstructor(private client: HttpClient) {}\n\n\tasync sync(\n\t\toperations: SyncOperation[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait this.client.post<{ notFound: string[]; deleted: string[] }>(\n\t\t\t\"/_action/sync\",\n\t\t\toperations,\n\t\t\tcontext.toHeaders(),\n\t\t);\n\t}\n}\n\nexport class SyncOperation {\n\tconstructor(\n\t\tpublic key: string,\n\t\tpublic entity: string,\n\t\tpublic action: \"upsert\" | \"delete\",\n\t\tpublic payload: object[],\n\t\tpublic criteria: SingleFilter[] | null = null,\n\t) {}\n}\n\ntype EntitySearchResponse<Entity = unknown, Aggregations = object> = {\n\ttotal: number;\n\taggregations: Aggregations;\n\tdata: Entity[];\n};\n\nexport class EntitySearchResult<Entity = unknown, Aggregations = object> {\n\tconstructor(\n\t\tpublic total: number,\n\t\tpublic aggregations: Aggregations,\n\t\tpublic data: Entity[],\n\t) {\n\t\tthis.total = total;\n\t\tthis.aggregations = aggregations;\n\t\tthis.data = data;\n\t}\n\n\tfirst(): Entity | null {\n\t\treturn this.data[0] || null;\n\t}\n}\n\nexport const Defaults = {\n\tsystemLanguageId: \"2fbb5fe2e29a4d70aa5854ce7ce3e20b\",\n\tliveVersion: \"0fa91ce3e96a4bc2be4bd9ce752c3425\",\n\tsystemCurrencyId: \"b7d2554b0ce847cd82f3ac9bd1c0dfca\",\n\tsalesChannelTypeApi: \"f183ee5650cf4bdb8a774337575067a6\",\n\tsalesChannelTypeSalesChannel: \"8a243080f92e4c719546314b577cf82b\",\n\tsalesChannelTypeProductComparision: \"ed535e5722134ac1aa6524f73e26881b\",\n};\n\nexport function uuid(): string {\n\treturn crypto.randomUUID().replaceAll(\"-\", \"\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"admin-api.js","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":";;;AA8NA,oBAEC;AA5ND,MAAa,UAAU;IACd,UAAU,CAAgB;IAClC,WAAW,CAAiB;IAC5B,SAAS,CAAgB;IACzB,gBAAgB,CAAiB;IACjC,YAAY,CAAgB;IAC5B,iBAAiB,CAAgB;IAEjC,YACC,aAA4B,IAAI,EAChC,cAA8B,IAAI,EAClC,YAA2B,IAAI,EAC/B,mBAAmC,IAAI,EACvC,eAA8B,IAAI,EAClC,oBAAmC,IAAI;QAEvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC5C,CAAC;IAED,SAAS;QACR,MAAM,OAAO,GAAG;YACf,gBAAgB,EAAE,IAAI,CAAC,UAAU;YACjC,gBAAgB,EAAE,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YACvD,eAAe,EAAE,IAAI,CAAC,SAAS;YAC/B,sBAAsB,EAAE,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YAClE,eAAe,EAAE,IAAI,CAAC,YAAY;YAClC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;SAC3C,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,mBAAmB;YACnB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3B,mBAAmB;gBACnB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACF,CAAC;QAED,mBAAmB;QACnB,OAAO,OAAO,CAAC;IAChB,CAAC;CACD;AA7CD,gCA6CC;AAED,MAAa,gBAAgB;IAEnB;IACA;IAFT,YACS,MAAkB,EAClB,UAAkB;QADlB,WAAM,GAAN,MAAM,CAAY;QAClB,eAAU,GAAV,UAAU,CAAQ;QAE1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CACX,QAAkB,EAClB,UAAsB,IAAI,UAAU,EAAE;QAEtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAGtC,WAAW,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACjD,QAAQ,CAAC,SAAS,EAAE,EACpB,OAAO,CAAC,SAAS,EAAE,CACnB,CAAC;QAEF,OAAO,IAAI,kBAAkB,CAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,EACnB,QAAQ,CAAC,IAAI,CAAC,YAAY,EAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CACd,QAAkB,EAClB,UAAsB,IAAI,UAAU,EAAE;QAEtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACtC,eAAe,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACrD,QAAQ,CAAC,SAAS,EAAE,EACpB,OAAO,CAAC,SAAS,EAAE,CACnB,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CACd,QAAkB,EAClB,UAAsB,IAAI,UAAU,EAAE;QAEtC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAErB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAGtC,WAAW,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACjD,QAAQ,CAAC,SAAS,EAAE,EACpB,OAAO,CAAC,SAAS,EAAE,CACnB,CAAC;QAEF,OAAO,IAAI,kBAAkB,CAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,EACnB,QAAQ,CAAC,IAAI,CAAC,YAAY,EAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACX,OAAiB,EACjB,UAAsB,IAAI,UAAU,EAAE;QAEtC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtC;YACC,IAAI,aAAa,CAChB,QAAQ,EACR,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACpC,QAAQ,EACR,OAAO,CACP;SACD,EACD,OAAO,CACP,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACX,OAAqB,EACrB,UAAsB,IAAI,UAAU,EAAE;QAEtC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtC;YACC,IAAI,aAAa,CAChB,QAAQ,EACR,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACpC,QAAQ,EACR,OAAO,CACP;SACD,EACD,OAAO,CACP,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CACpB,OAAuB,EACvB,UAAsB,IAAI,UAAU,EAAE;QAEtC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtC;YACC,IAAI,aAAa,CAChB,QAAQ,EACR,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACpC,QAAQ,EACR,EAAE,EACF,OAAO,CACP;SACD,EACD,OAAO,CACP,CAAC;IACH,CAAC;CACD;AAjHD,4CAiHC;AAED,MAAa,WAAW;IACH;IAApB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAE1C,KAAK,CAAC,IAAI,CACT,UAA2B,EAC3B,UAAsB,IAAI,UAAU,EAAE;QAEtC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,eAAe,EACf,UAAU,EACV,OAAO,CAAC,SAAS,EAAE,CACnB,CAAC;IACH,CAAC;CACD;AAbD,kCAaC;AAED,MAAa,aAAa;IAEjB;IACA;IACA;IACA;IACA;IALR,YACQ,GAAW,EACX,MAAc,EACd,MAA2B,EAC3B,OAAiB,EACjB,WAAkC,IAAI;QAJtC,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAqB;QAC3B,YAAO,GAAP,OAAO,CAAU;QACjB,aAAQ,GAAR,QAAQ,CAA8B;IAC3C,CAAC;CACJ;AARD,sCAQC;AAQD,MAAa,kBAAkB;IAEtB;IACA;IACA;IAHR,YACQ,KAAa,EACb,YAA0B,EAC1B,IAAc;QAFd,UAAK,GAAL,KAAK,CAAQ;QACb,iBAAY,GAAZ,YAAY,CAAc;QAC1B,SAAI,GAAJ,IAAI,CAAU;QAErB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7B,CAAC;CACD;AAdD,gDAcC;AAEY,QAAA,QAAQ,GAAG;IACvB,gBAAgB,EAAE,kCAAkC;IACpD,WAAW,EAAE,kCAAkC;IAC/C,gBAAgB,EAAE,kCAAkC;IACpD,mBAAmB,EAAE,kCAAkC;IACvD,4BAA4B,EAAE,kCAAkC;IAChE,kCAAkC,EAAE,kCAAkC;CACtE,CAAC;AAEF,SAAgB,IAAI;IACnB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import type { HttpClient } from \"../http-client.js\";\nimport type { Criteria } from \"./criteria.js\";\nimport type { SingleFilter } from \"./criteria.js\";\n\nexport class ApiContext {\n\tprivate languageId: string | null;\n\tinheritance: boolean | null;\n\tversionId: string | null;\n\tskipTriggerFlows: boolean | null;\n\tindexingSkip: string | null;\n\tindexingBehaviour: string | null;\n\n\tconstructor(\n\t\tlanguageId: string | null = null,\n\t\tinheritance: boolean | null = null,\n\t\tversionId: string | null = null,\n\t\tskipTriggerFlows: boolean | null = null,\n\t\tindexingSkip: string | null = null,\n\t\tindexingBehaviour: string | null = null,\n\t) {\n\t\tthis.languageId = languageId;\n\t\tthis.inheritance = inheritance;\n\t\tthis.versionId = versionId;\n\t\tthis.skipTriggerFlows = skipTriggerFlows;\n\t\tthis.indexingSkip = indexingSkip;\n\t\tthis.indexingBehaviour = indexingBehaviour;\n\t}\n\n\ttoHeaders(): Record<string, string> {\n\t\tconst headers = {\n\t\t\t\"sw-language-id\": this.languageId,\n\t\t\t\"sw-inheritance\": this.inheritance === true ? \"1\" : \"0\",\n\t\t\t\"sw-version-id\": this.versionId,\n\t\t\t\"sw-skip-trigger-flow\": this.skipTriggerFlows === true ? \"1\" : \"0\",\n\t\t\t\"indexing-skip\": this.indexingSkip,\n\t\t\t\"indexing-behavior\": this.indexingBehaviour,\n\t\t};\n\n\t\tfor (const key of Object.keys(headers)) {\n\t\t\t// @ts-expect-error\n\t\t\tif (headers[key] === null) {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tdelete headers[key];\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\treturn headers;\n\t}\n}\n\nexport class EntityRepository<Entity extends object = object> {\n\tconstructor(\n\t\tprivate client: HttpClient,\n\t\tprivate entityName: string,\n\t) {\n\t\tthis.client = client;\n\t\tthis.entityName = entityName;\n\t}\n\n\tasync search<Aggregations = object>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<Entity, Aggregations>> {\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<Entity, Aggregations>\n\t\t>(\n\t\t\t`/search/${this.entityName.replaceAll(\"_\", \"-\")}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn new EntitySearchResult<Entity, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync searchIds(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<string[]> {\n\t\tconst response = await this.client.post<{ data: string[] }>(\n\t\t\t`/search-ids/${this.entityName.replaceAll(\"_\", \"-\")}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn response.body.data;\n\t}\n\n\tasync aggregate<Aggregations>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<object, Aggregations>> {\n\t\tcriteria.setLimit(1);\n\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<object, Aggregations>\n\t\t>(\n\t\t\t`/search/${this.entityName.replaceAll(\"_\", \"-\")}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn new EntitySearchResult<object, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync upsert(\n\t\tpayload: Entity[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[\n\t\t\t\tnew SyncOperation(\n\t\t\t\t\t\"upsert\",\n\t\t\t\t\tthis.entityName.replaceAll(\"-\", \"_\"),\n\t\t\t\t\t\"upsert\",\n\t\t\t\t\tpayload,\n\t\t\t\t),\n\t\t\t],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync delete<DeleteType extends object = { id: string }>(\n\t\tpayload: DeleteType[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[\n\t\t\t\tnew SyncOperation(\n\t\t\t\t\t\"delete\",\n\t\t\t\t\tthis.entityName.replaceAll(\"-\", \"_\"),\n\t\t\t\t\t\"delete\",\n\t\t\t\t\tpayload,\n\t\t\t\t),\n\t\t\t],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync deleteByFilters(\n\t\tfilters: SingleFilter[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[\n\t\t\t\tnew SyncOperation(\n\t\t\t\t\t\"delete\",\n\t\t\t\t\tthis.entityName.replaceAll(\"-\", \"_\"),\n\t\t\t\t\t\"delete\",\n\t\t\t\t\t[],\n\t\t\t\t\tfilters,\n\t\t\t\t),\n\t\t\t],\n\t\t\tcontext,\n\t\t);\n\t}\n}\n\nexport class SyncService {\n\tconstructor(private client: HttpClient) {}\n\n\tasync sync(\n\t\toperations: SyncOperation[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait this.client.post<{ notFound: string[]; deleted: string[] }>(\n\t\t\t\"/_action/sync\",\n\t\t\toperations,\n\t\t\tcontext.toHeaders(),\n\t\t);\n\t}\n}\n\nexport class SyncOperation {\n\tconstructor(\n\t\tpublic key: string,\n\t\tpublic entity: string,\n\t\tpublic action: \"upsert\" | \"delete\",\n\t\tpublic payload: object[],\n\t\tpublic criteria: SingleFilter[] | null = null,\n\t) {}\n}\n\ntype EntitySearchResponse<Entity = unknown, Aggregations = object> = {\n\ttotal: number;\n\taggregations: Aggregations;\n\tdata: Entity[];\n};\n\nexport class EntitySearchResult<Entity = unknown, Aggregations = object> {\n\tconstructor(\n\t\tpublic total: number,\n\t\tpublic aggregations: Aggregations,\n\t\tpublic data: Entity[],\n\t) {\n\t\tthis.total = total;\n\t\tthis.aggregations = aggregations;\n\t\tthis.data = data;\n\t}\n\n\tfirst(): Entity | null {\n\t\treturn this.data[0] || null;\n\t}\n}\n\nexport const Defaults = {\n\tsystemLanguageId: \"2fbb5fe2e29a4d70aa5854ce7ce3e20b\",\n\tliveVersion: \"0fa91ce3e96a4bc2be4bd9ce752c3425\",\n\tsystemCurrencyId: \"b7d2554b0ce847cd82f3ac9bd1c0dfca\",\n\tsalesChannelTypeApi: \"f183ee5650cf4bdb8a774337575067a6\",\n\tsalesChannelTypeSalesChannel: \"8a243080f92e4c719546314b577cf82b\",\n\tsalesChannelTypeProductComparision: \"ed535e5722134ac1aa6524f73e26881b\",\n};\n\nexport function uuid(): string {\n\treturn crypto.randomUUID().replaceAll(\"-\", \"\");\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { HttpClient } from "../http-client.js";
|
|
2
|
+
/**
|
|
3
|
+
* Uploads a media file to the Shopware instance.
|
|
4
|
+
*
|
|
5
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
6
|
+
* @param {Object} options - The options for uploading the media file.
|
|
7
|
+
* @param {boolean} [options.private] - Whether the media file should be private.
|
|
8
|
+
* @param {string} [options.mediaFolderId] - The ID of the media folder to upload the file to.
|
|
9
|
+
* @param {string} options.fileName - The name of the file to upload.
|
|
10
|
+
* @param {Blob|Promise<Blob>} options.file - The file to upload.
|
|
11
|
+
*/
|
|
12
|
+
export declare function uploadMediaFile(httpClient: HttpClient, { private: isPrivate, mediaFolderId, fileName, file, }: {
|
|
13
|
+
private?: boolean;
|
|
14
|
+
mediaFolderId?: string | null;
|
|
15
|
+
fileName: string;
|
|
16
|
+
file: Blob | Promise<Blob>;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Retrieves the default media folder ID for a given entity.
|
|
20
|
+
*
|
|
21
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
22
|
+
* @param {string} entity - The entity name to get the default folder ID for.
|
|
23
|
+
* @returns {Promise<string|null>} - The ID of the default media folder or null if not found.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getMediaDefaultFolderByEntity(httpClient: HttpClient, entity: string): Promise<string | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves the media folder ID by its name.
|
|
28
|
+
*
|
|
29
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
30
|
+
* @param {string} name - The name of the media folder.
|
|
31
|
+
* @returns {Promise<string|null>} - The ID of the media folder or null if not found.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getMediaFolderByName(httpClient: HttpClient, name: string): Promise<string | null>;
|
|
34
|
+
interface CreateMediaFolderOptions {
|
|
35
|
+
parentId?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new media folder.
|
|
39
|
+
*
|
|
40
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
41
|
+
* @param {string} name - The name of the media folder.
|
|
42
|
+
* @param {Object} options - Additional options for creating the media folder.
|
|
43
|
+
* @param {string} [options.parentId] - The ID of the parent folder, if any.
|
|
44
|
+
* @returns {Promise<string>} - The ID of the newly created media folder.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createMediaFolder(httpClient: HttpClient, name: string, options: CreateMediaFolderOptions): Promise<string>;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/helper/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACpC,UAAU,EAAE,UAAU,EACtB,EACC,OAAO,EAAE,SAAiB,EAC1B,aAAoB,EACpB,QAAQ,EACR,IAAI,GACJ,EAAE;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,iBA0CD;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CAClD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB;AAED,UAAU,wBAAwB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,wBAAwB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uploadMediaFile = uploadMediaFile;
|
|
4
|
+
exports.getMediaDefaultFolderByEntity = getMediaDefaultFolderByEntity;
|
|
5
|
+
exports.getMediaFolderByName = getMediaFolderByName;
|
|
6
|
+
exports.createMediaFolder = createMediaFolder;
|
|
7
|
+
const admin_api_js_1 = require("./admin-api.js");
|
|
8
|
+
const criteria_js_1 = require("./criteria.js");
|
|
9
|
+
/**
|
|
10
|
+
* Uploads a media file to the Shopware instance.
|
|
11
|
+
*
|
|
12
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
13
|
+
* @param {Object} options - The options for uploading the media file.
|
|
14
|
+
* @param {boolean} [options.private] - Whether the media file should be private.
|
|
15
|
+
* @param {string} [options.mediaFolderId] - The ID of the media folder to upload the file to.
|
|
16
|
+
* @param {string} options.fileName - The name of the file to upload.
|
|
17
|
+
* @param {Blob|Promise<Blob>} options.file - The file to upload.
|
|
18
|
+
*/
|
|
19
|
+
async function uploadMediaFile(httpClient, { private: isPrivate = false, mediaFolderId = null, fileName, file, }) {
|
|
20
|
+
const repository = new admin_api_js_1.EntityRepository(httpClient, "media");
|
|
21
|
+
const mediaId = (0, admin_api_js_1.uuid)();
|
|
22
|
+
await repository.upsert([
|
|
23
|
+
{
|
|
24
|
+
id: mediaId,
|
|
25
|
+
private: isPrivate,
|
|
26
|
+
mediaFolderId,
|
|
27
|
+
},
|
|
28
|
+
]);
|
|
29
|
+
const splitFileName = fileName.split(".");
|
|
30
|
+
if (splitFileName.length < 2) {
|
|
31
|
+
throw new Error("Invalid file name, should have an extension");
|
|
32
|
+
}
|
|
33
|
+
const extension = (splitFileName.slice(-1)[0] || "").toLowerCase();
|
|
34
|
+
const baseFileName = splitFileName.slice(0, -1).join(".");
|
|
35
|
+
const params = new URLSearchParams();
|
|
36
|
+
params.append("extension", extension);
|
|
37
|
+
params.append("fileName", baseFileName);
|
|
38
|
+
const resolved = await file;
|
|
39
|
+
try {
|
|
40
|
+
await httpClient.post(`/_action/media/${mediaId}/upload?${params.toString()}`, resolved, {
|
|
41
|
+
"Content-Type": resolved.type,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
await repository.delete([{ id: mediaId }]);
|
|
46
|
+
throw e;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Retrieves the default media folder ID for a given entity.
|
|
51
|
+
*
|
|
52
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
53
|
+
* @param {string} entity - The entity name to get the default folder ID for.
|
|
54
|
+
* @returns {Promise<string|null>} - The ID of the default media folder or null if not found.
|
|
55
|
+
*/
|
|
56
|
+
async function getMediaDefaultFolderByEntity(httpClient, entity) {
|
|
57
|
+
const mediaDefaultFolder = new admin_api_js_1.EntityRepository(httpClient, "media_default_folder");
|
|
58
|
+
const criteria = new criteria_js_1.Criteria();
|
|
59
|
+
criteria.addFilter(criteria_js_1.Criteria.equals("entity", entity));
|
|
60
|
+
const folders = await mediaDefaultFolder.search(criteria);
|
|
61
|
+
const firstFolder = folders.first();
|
|
62
|
+
return firstFolder?.folder?.id || null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Retrieves the media folder ID by its name.
|
|
66
|
+
*
|
|
67
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
68
|
+
* @param {string} name - The name of the media folder.
|
|
69
|
+
* @returns {Promise<string|null>} - The ID of the media folder or null if not found.
|
|
70
|
+
*/
|
|
71
|
+
async function getMediaFolderByName(httpClient, name) {
|
|
72
|
+
const mediaFolder = new admin_api_js_1.EntityRepository(httpClient, "media_folder");
|
|
73
|
+
const criteria = new criteria_js_1.Criteria();
|
|
74
|
+
criteria.addFilter(criteria_js_1.Criteria.equals("name", name));
|
|
75
|
+
const folders = await mediaFolder.search(criteria);
|
|
76
|
+
return folders.first()?.id || null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Creates a new media folder.
|
|
80
|
+
*
|
|
81
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
82
|
+
* @param {string} name - The name of the media folder.
|
|
83
|
+
* @param {Object} options - Additional options for creating the media folder.
|
|
84
|
+
* @param {string} [options.parentId] - The ID of the parent folder, if any.
|
|
85
|
+
* @returns {Promise<string>} - The ID of the newly created media folder.
|
|
86
|
+
*/
|
|
87
|
+
async function createMediaFolder(httpClient, name, options) {
|
|
88
|
+
const repository = new admin_api_js_1.EntityRepository(httpClient, "media_folder");
|
|
89
|
+
const mediaFolderId = (0, admin_api_js_1.uuid)();
|
|
90
|
+
await repository.upsert([
|
|
91
|
+
{
|
|
92
|
+
id: mediaFolderId,
|
|
93
|
+
name,
|
|
94
|
+
parentId: options.parentId || null,
|
|
95
|
+
configuration: {},
|
|
96
|
+
},
|
|
97
|
+
]);
|
|
98
|
+
return mediaFolderId;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/helper/media.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HttpClient } from \"../http-client.js\";\nimport { EntityRepository, uuid } from \"./admin-api.js\";\nimport { Criteria } from \"./criteria.js\";\n\n/**\n * Uploads a media file to the Shopware instance.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {Object} options - The options for uploading the media file.\n * @param {boolean} [options.private] - Whether the media file should be private.\n * @param {string} [options.mediaFolderId] - The ID of the media folder to upload the file to.\n * @param {string} options.fileName - The name of the file to upload.\n * @param {Blob|Promise<Blob>} options.file - The file to upload.\n */\nexport async function uploadMediaFile(\n\thttpClient: HttpClient,\n\t{\n\t\tprivate: isPrivate = false,\n\t\tmediaFolderId = null,\n\t\tfileName,\n\t\tfile,\n\t}: {\n\t\tprivate?: boolean;\n\t\tmediaFolderId?: string | null;\n\t\tfileName: string;\n\t\tfile: Blob | Promise<Blob>;\n\t},\n) {\n\tconst repository = new EntityRepository(httpClient, \"media\");\n\n\tconst mediaId = uuid();\n\n\tawait repository.upsert([\n\t\t{\n\t\t\tid: mediaId,\n\t\t\tprivate: isPrivate,\n\t\t\tmediaFolderId,\n\t\t},\n\t]);\n\n\tconst splitFileName = fileName.split(\".\");\n\n\tif (splitFileName.length < 2) {\n\t\tthrow new Error(\"Invalid file name, should have an extension\");\n\t}\n\n\tconst extension = (splitFileName.slice(-1)[0] || \"\").toLowerCase();\n\tconst baseFileName = splitFileName.slice(0, -1).join(\".\");\n\n\tconst params = new URLSearchParams();\n\n\tparams.append(\"extension\", extension);\n\tparams.append(\"fileName\", baseFileName);\n\n\tconst resolved = await file;\n\n\ttry {\n\t\tawait httpClient.post(\n\t\t\t`/_action/media/${mediaId}/upload?${params.toString()}`,\n\t\t\tresolved,\n\t\t\t{\n\t\t\t\t\"Content-Type\": resolved.type,\n\t\t\t},\n\t\t);\n\t} catch (e) {\n\t\tawait repository.delete([{ id: mediaId }]);\n\t\tthrow e;\n\t}\n}\n\n/**\n * Retrieves the default media folder ID for a given entity.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {string} entity - The entity name to get the default folder ID for.\n * @returns {Promise<string|null>} - The ID of the default media folder or null if not found.\n */\nexport async function getMediaDefaultFolderByEntity(\n\thttpClient: HttpClient,\n\tentity: string,\n): Promise<string | null> {\n\tconst mediaDefaultFolder = new EntityRepository<{ folder: { id: string } }>(\n\t\thttpClient,\n\t\t\"media_default_folder\",\n\t);\n\n\tconst criteria = new Criteria();\n\tcriteria.addFilter(Criteria.equals(\"entity\", entity));\n\n\tconst folders = await mediaDefaultFolder.search(criteria);\n\n\tconst firstFolder = folders.first();\n\treturn firstFolder?.folder?.id || null;\n}\n\n/**\n * Retrieves the media folder ID by its name.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {string} name - The name of the media folder.\n * @returns {Promise<string|null>} - The ID of the media folder or null if not found.\n */\nexport async function getMediaFolderByName(\n\thttpClient: HttpClient,\n\tname: string,\n): Promise<string | null> {\n\tconst mediaFolder = new EntityRepository<{ id: string }>(\n\t\thttpClient,\n\t\t\"media_folder\",\n\t);\n\n\tconst criteria = new Criteria();\n\tcriteria.addFilter(Criteria.equals(\"name\", name));\n\n\tconst folders = await mediaFolder.search(criteria);\n\n\treturn folders.first()?.id || null;\n}\n\ninterface CreateMediaFolderOptions {\n\tparentId?: string;\n}\n\n/**\n * Creates a new media folder.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {string} name - The name of the media folder.\n * @param {Object} options - Additional options for creating the media folder.\n * @param {string} [options.parentId] - The ID of the parent folder, if any.\n * @returns {Promise<string>} - The ID of the newly created media folder.\n */\nexport async function createMediaFolder(\n\thttpClient: HttpClient,\n\tname: string,\n\toptions: CreateMediaFolderOptions,\n): Promise<string> {\n\tconst repository = new EntityRepository(httpClient, \"media_folder\");\n\n\tconst mediaFolderId = uuid();\n\n\tawait repository.upsert([\n\t\t{\n\t\t\tid: mediaFolderId,\n\t\t\tname,\n\t\t\tparentId: options.parentId || null,\n\t\t\tconfiguration: {},\n\t\t},\n\t]);\n\n\treturn mediaFolderId;\n}\n"]}
|
|
@@ -25,7 +25,7 @@ class BetterSqlite3Repository {
|
|
|
25
25
|
async createShop(id, url, secret) {
|
|
26
26
|
const shop = await this.getShopById(id);
|
|
27
27
|
if (shop) {
|
|
28
|
-
|
|
28
|
+
await this.deleteShop(id);
|
|
29
29
|
}
|
|
30
30
|
this.db
|
|
31
31
|
.prepare("INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-sqlite3.js","sourceRoot":"","sources":["../../../src/integration/better-sqlite3.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4E;AAE5E,oEAAsC;AAEtC,MAAa,uBAAuB;IAGnC,EAAE,CAAoB;IACtB,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,
|
|
1
|
+
{"version":3,"file":"better-sqlite3.js","sourceRoot":"","sources":["../../../src/integration/better-sqlite3.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4E;AAE5E,oEAAsC;AAEtC,MAAa,uBAAuB;IAGnC,EAAE,CAAoB;IACtB,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,EAAE;aACL,OAAO,CAAC,qDAAqD,CAAC;aAC9D,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACpB,OAAO,CAAC,iCAAiC,CAAC;aAC1C,GAAG,CAAC,EAAE,CAOP,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,0BAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,IAAgB;QAChC,IAAI,CAAC,EAAE;aACL,OAAO,CACP,gGAAgG,CAChG;aACA,GAAG,CACH,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,aAAa,EAAE,EACpB,IAAI,CAAC,eAAe,EAAE,EACtB,IAAI,CAAC,mBAAmB,EAAE,EAC1B,CAAC,IAAI,CAAC,aAAa,EAAE,EACrB,IAAI,CAAC,SAAS,EAAE,CAChB,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;CACD;AA1ED,0DA0EC","sourcesContent":["import { type ShopRepositoryInterface, SimpleShop } from \"../repository.js\";\n\nimport Database from \"better-sqlite3\";\n\nexport class BetterSqlite3Repository\n\timplements ShopRepositoryInterface<SimpleShop>\n{\n\tdb: Database.Database;\n\tconstructor(fileName: string) {\n\t\tthis.db = new Database(fileName);\n\t\tthis.db.pragma(\"journal_mode = WAL\");\n\t\tthis.db.exec(`\n CREATE TABLE IF NOT EXISTS shop (\n id TEXT PRIMARY KEY,\n active BOOLEAN DEFAULT 1,\n url TEXT NOT NULL,\n secret TEXT NOT NULL,\n client_id TEXT NULL,\n client_secret TEXT NULL\n );\n `);\n\t}\n\n\tasync createShop(id: string, url: string, secret: string): Promise<void> {\n\t\tconst shop = await this.getShopById(id);\n\n\t\tif (shop) {\n\t\t\tawait this.deleteShop(id);\n\t\t}\n\n\t\tthis.db\n\t\t\t.prepare(\"INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)\")\n\t\t\t.run(id, url, secret);\n\t}\n\n\tasync getShopById(id: string): Promise<SimpleShop | null> {\n\t\tconst result = this.db\n\t\t\t.prepare(\"SELECT * FROM shop WHERE id = ?\")\n\t\t\t.get(id) as null | {\n\t\t\tid: string;\n\t\t\tactive: number;\n\t\t\turl: string;\n\t\t\tsecret: string;\n\t\t\tclient_id?: string;\n\t\t\tclient_secret?: string;\n\t\t};\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst shop = new SimpleShop(result.id, result.url, result.secret);\n\n\t\tif (result.client_id && result.client_secret) {\n\t\t\tshop.setShopCredentials(result.client_id, result.client_secret);\n\t\t}\n\n\t\tshop.setShopActive(result.active === 1);\n\n\t\treturn shop;\n\t}\n\tasync updateShop(shop: SimpleShop): Promise<void> {\n\t\tthis.db\n\t\t\t.prepare(\n\t\t\t\t\"UPDATE shop SET url = ?, secret = ?, client_id = ?, client_secret = ?, active = ? WHERE id = ?\",\n\t\t\t)\n\t\t\t.run(\n\t\t\t\tshop.getShopUrl(),\n\t\t\t\tshop.getShopSecret(),\n\t\t\t\tshop.getShopClientId(),\n\t\t\t\tshop.getShopClientSecret(),\n\t\t\t\t+shop.getShopActive(),\n\t\t\t\tshop.getShopId(),\n\t\t\t);\n\t}\n\tasync deleteShop(id: string): Promise<void> {\n\t\tthis.db.prepare(\"DELETE FROM shop where id = ?\").run(id);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sqlite.d.ts","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,mBACZ,YAAW,uBAAuB,CAAC,UAAU,CAAC;IAE9C,EAAE,EAAE,QAAQ,CAAC;gBACD,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"bun-sqlite.d.ts","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,mBACZ,YAAW,uBAAuB,CAAC,UAAU,CAAC;IAE9C,EAAE,EAAE,QAAQ,CAAC;gBACD,QAAQ,EAAE,MAAM;IAetB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA4BnD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C"}
|
|
@@ -7,6 +7,7 @@ class BunSqliteRepository {
|
|
|
7
7
|
db;
|
|
8
8
|
constructor(fileName) {
|
|
9
9
|
this.db = new bun_sqlite_1.Database(fileName);
|
|
10
|
+
this.db.exec(`PRAGMA journal_mode = WAL;`);
|
|
10
11
|
this.db.exec(`
|
|
11
12
|
CREATE TABLE IF NOT EXISTS shop (
|
|
12
13
|
id TEXT PRIMARY KEY,
|
|
@@ -21,7 +22,7 @@ class BunSqliteRepository {
|
|
|
21
22
|
async createShop(id, url, secret) {
|
|
22
23
|
const shop = await this.getShopById(id);
|
|
23
24
|
if (shop) {
|
|
24
|
-
|
|
25
|
+
await this.deleteShop(id);
|
|
25
26
|
}
|
|
26
27
|
this.db.exec("INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)", [
|
|
27
28
|
id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sqlite.js","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":";;;AAAA,oDAA4E;AAE5E,2CAAsC;AAEtC,MAAa,mBAAmB;IAG/B,EAAE,CAAW;IACb,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,qBAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,
|
|
1
|
+
{"version":3,"file":"bun-sqlite.js","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":";;;AAAA,oDAA4E;AAE5E,2CAAsC;AAEtC,MAAa,mBAAmB;IAG/B,EAAE,CAAW;IACb,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,qBAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,qDAAqD,EAAE;YACnE,EAAE;YACF,GAAG;YACH,MAAM;SACN,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAUzB,iCAAiC,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,0BAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,IAAgB;QAChC,IAAI,CAAC,EAAE,CAAC,IAAI,CACX,gGAAgG,EAChG;YACC,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,SAAS,EAAE;SAChB,CACD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;CACD;AA7ED,kDA6EC","sourcesContent":["import { type ShopRepositoryInterface, SimpleShop } from \"../repository.js\";\n\nimport { Database } from \"bun:sqlite\";\n\nexport class BunSqliteRepository\n\timplements ShopRepositoryInterface<SimpleShop>\n{\n\tdb: Database;\n\tconstructor(fileName: string) {\n\t\tthis.db = new Database(fileName);\n\t\tthis.db.exec(`PRAGMA journal_mode = WAL;`);\n\t\tthis.db.exec(`\n CREATE TABLE IF NOT EXISTS shop (\n id TEXT PRIMARY KEY,\n active BOOLEAN DEFAULT 1,\n url TEXT NOT NULL,\n secret TEXT NOT NULL,\n client_id TEXT NULL,\n client_secret TEXT NULL\n );\n `);\n\t}\n\n\tasync createShop(id: string, url: string, secret: string): Promise<void> {\n\t\tconst shop = await this.getShopById(id);\n\n\t\tif (shop) {\n\t\t\tawait this.deleteShop(id);\n\t\t}\n\n\t\tthis.db.exec(\"INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)\", [\n\t\t\tid,\n\t\t\turl,\n\t\t\tsecret,\n\t\t]);\n\t}\n\n\tasync getShopById(id: string): Promise<SimpleShop | null> {\n\t\tconst query = this.db.query<\n\t\t\t{\n\t\t\t\tid: string;\n\t\t\t\tactive: boolean;\n\t\t\t\turl: string;\n\t\t\t\tsecret: string;\n\t\t\t\tclient_id?: string;\n\t\t\t\tclient_secret?: string;\n\t\t\t},\n\t\t\tstring\n\t\t>(\"SELECT * FROM shop WHERE id = ?\");\n\t\tconst result = query.get(id);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst shop = new SimpleShop(result.id, result.url, result.secret);\n\n\t\tif (result.client_id && result.client_secret) {\n\t\t\tshop.setShopCredentials(result.client_id, result.client_secret);\n\t\t}\n\n\t\tshop.setShopActive(result.active);\n\n\t\treturn shop;\n\t}\n\tasync updateShop(shop: SimpleShop): Promise<void> {\n\t\tthis.db.exec(\n\t\t\t\"UPDATE shop SET url = ?, secret = ?, client_id = ?, client_secret = ?, active = ? WHERE id = ?\",\n\t\t\t[\n\t\t\t\tshop.getShopUrl(),\n\t\t\t\tshop.getShopSecret(),\n\t\t\t\tshop.getShopClientId(),\n\t\t\t\tshop.getShopClientSecret(),\n\t\t\t\tshop.getShopActive(),\n\t\t\t\tshop.getShopId(),\n\t\t\t],\n\t\t);\n\t}\n\tasync deleteShop(id: string): Promise<void> {\n\t\tthis.db.exec(\"DELETE FROM shop where id = ?\", [id]);\n\t}\n}\n"]}
|
package/dist/commonjs/types.d.ts
CHANGED
|
@@ -25,4 +25,16 @@ export type ActionButtonRequest = {
|
|
|
25
25
|
};
|
|
26
26
|
meta: Meta;
|
|
27
27
|
};
|
|
28
|
+
export type EntityWrittenRequest<PrimaryKey = string> = {
|
|
29
|
+
data: {
|
|
30
|
+
event: string;
|
|
31
|
+
payload: {
|
|
32
|
+
entity: string;
|
|
33
|
+
operation: string;
|
|
34
|
+
primaryKey: PrimaryKey;
|
|
35
|
+
updatedFields: string[];
|
|
36
|
+
versionId: string;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
};
|
|
28
40
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACL,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,IAAI,EAAE,IAAI,CAAC;CACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACL,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,IAAI,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,UAAU,GAAG,MAAM,IAAI;IACvD,IAAI,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE;YACR,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,UAAU,EAAE,UAAU,CAAC;YACvB,aAAa,EAAE,MAAM,EAAE,CAAC;YACxB,SAAS,EAAE,MAAM,CAAC;SAClB,EAAE,CAAC;KACJ,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type BrowserAppModuleRequest = {\n\t\"shop-id\": string;\n\t\"shop-url\": string;\n\ttimestamp: string;\n\t\"sw-version\": string;\n\t\"sw-context-language\": string;\n\t\"sw-user-language\": string;\n};\n\nexport type Source = {\n\turl: string;\n\tshopId: string;\n\tappVersion: string;\n};\n\nexport type Meta = {\n\ttimestamp: number;\n\treference: string;\n\tlanguage: string;\n};\n\nexport type ActionButtonRequest = {\n\tsource: Source;\n\tdata: {\n\t\tids: string[];\n\t\tentity: string;\n\t\taction: string;\n\t};\n\tmeta: Meta;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type BrowserAppModuleRequest = {\n\t\"shop-id\": string;\n\t\"shop-url\": string;\n\ttimestamp: string;\n\t\"sw-version\": string;\n\t\"sw-context-language\": string;\n\t\"sw-user-language\": string;\n};\n\nexport type Source = {\n\turl: string;\n\tshopId: string;\n\tappVersion: string;\n};\n\nexport type Meta = {\n\ttimestamp: number;\n\treference: string;\n\tlanguage: string;\n};\n\nexport type ActionButtonRequest = {\n\tsource: Source;\n\tdata: {\n\t\tids: string[];\n\t\tentity: string;\n\t\taction: string;\n\t};\n\tmeta: Meta;\n};\n\nexport type EntityWrittenRequest<PrimaryKey = string> = {\n\tdata: {\n\t\tevent: string;\n\t\tpayload: {\n\t\t\tentity: string;\n\t\t\toperation: string;\n\t\t\tprimaryKey: PrimaryKey;\n\t\t\tupdatedFields: string[];\n\t\t\tversionId: string;\n\t\t}[];\n\t};\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-api.d.ts","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,qBAAa,UAAU;IACtB,OAAO,CAAC,UAAU,CAAgB;IAClC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGhC,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,WAAW,GAAE,OAAO,GAAG,IAAW,EAClC,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,gBAAgB,GAAE,OAAO,GAAG,IAAW,EACvC,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,iBAAiB,GAAE,MAAM,GAAG,IAAW;IAUxC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAqBnC;AAED,qBAAa,gBAAgB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM;IAE1D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;gBADV,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM;IAMrB,MAAM,CAAC,YAAY,GAAG,MAAM,EACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,UAA6B,GACpC,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-api.d.ts","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,25 +43,32 @@ export class EntityRepository {
|
|
|
43
43
|
this.entityName = entityName;
|
|
44
44
|
}
|
|
45
45
|
async search(criteria, context = new ApiContext()) {
|
|
46
|
-
const response = await this.client.post(`/search/${this.entityName}`, criteria.toPayload(), context.toHeaders());
|
|
46
|
+
const response = await this.client.post(`/search/${this.entityName.replaceAll("_", "-")}`, criteria.toPayload(), context.toHeaders());
|
|
47
47
|
return new EntitySearchResult(response.body.total, response.body.aggregations, response.body.data);
|
|
48
48
|
}
|
|
49
49
|
async searchIds(criteria, context = new ApiContext()) {
|
|
50
|
-
const response = await this.client.post(`/search-ids/${this.entityName}`, criteria.toPayload(), context.toHeaders());
|
|
50
|
+
const response = await this.client.post(`/search-ids/${this.entityName.replaceAll("_", "-")}`, criteria.toPayload(), context.toHeaders());
|
|
51
51
|
return response.body.data;
|
|
52
52
|
}
|
|
53
53
|
async aggregate(criteria, context = new ApiContext()) {
|
|
54
|
-
|
|
54
|
+
criteria.setLimit(1);
|
|
55
|
+
const response = await this.client.post(`/search/${this.entityName.replaceAll("_", "-")}`, criteria.toPayload(), context.toHeaders());
|
|
55
56
|
return new EntitySearchResult(response.body.total, response.body.aggregations, response.body.data);
|
|
56
57
|
}
|
|
57
58
|
async upsert(payload, context = new ApiContext()) {
|
|
58
|
-
await new SyncService(this.client).sync([
|
|
59
|
+
await new SyncService(this.client).sync([
|
|
60
|
+
new SyncOperation("upsert", this.entityName.replaceAll("-", "_"), "upsert", payload),
|
|
61
|
+
], context);
|
|
59
62
|
}
|
|
60
63
|
async delete(payload, context = new ApiContext()) {
|
|
61
|
-
await new SyncService(this.client).sync([
|
|
64
|
+
await new SyncService(this.client).sync([
|
|
65
|
+
new SyncOperation("delete", this.entityName.replaceAll("-", "_"), "delete", payload),
|
|
66
|
+
], context);
|
|
62
67
|
}
|
|
63
68
|
async deleteByFilters(filters, context = new ApiContext()) {
|
|
64
|
-
await new SyncService(this.client).sync([
|
|
69
|
+
await new SyncService(this.client).sync([
|
|
70
|
+
new SyncOperation("delete", this.entityName.replaceAll("-", "_"), "delete", [], filters),
|
|
71
|
+
], context);
|
|
65
72
|
}
|
|
66
73
|
}
|
|
67
74
|
export class SyncService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-api.js","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HttpClient } from \"../http-client.js\";\nimport type { Criteria } from \"./criteria.js\";\nimport type { SingleFilter } from \"./criteria.js\";\n\nexport class ApiContext {\n\tprivate languageId: string | null;\n\tinheritance: boolean | null;\n\tversionId: string | null;\n\tskipTriggerFlows: boolean | null;\n\tindexingSkip: string | null;\n\tindexingBehaviour: string | null;\n\n\tconstructor(\n\t\tlanguageId: string | null = null,\n\t\tinheritance: boolean | null = null,\n\t\tversionId: string | null = null,\n\t\tskipTriggerFlows: boolean | null = null,\n\t\tindexingSkip: string | null = null,\n\t\tindexingBehaviour: string | null = null,\n\t) {\n\t\tthis.languageId = languageId;\n\t\tthis.inheritance = inheritance;\n\t\tthis.versionId = versionId;\n\t\tthis.skipTriggerFlows = skipTriggerFlows;\n\t\tthis.indexingSkip = indexingSkip;\n\t\tthis.indexingBehaviour = indexingBehaviour;\n\t}\n\n\ttoHeaders(): Record<string, string> {\n\t\tconst headers = {\n\t\t\t\"sw-language-id\": this.languageId,\n\t\t\t\"sw-inheritance\": this.inheritance === true ? \"1\" : \"0\",\n\t\t\t\"sw-version-id\": this.versionId,\n\t\t\t\"sw-skip-trigger-flow\": this.skipTriggerFlows === true ? \"1\" : \"0\",\n\t\t\t\"indexing-skip\": this.indexingSkip,\n\t\t\t\"indexing-behavior\": this.indexingBehaviour,\n\t\t};\n\n\t\tfor (const key of Object.keys(headers)) {\n\t\t\t// @ts-expect-error\n\t\t\tif (headers[key] === null) {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tdelete headers[key];\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\treturn headers;\n\t}\n}\n\nexport class EntityRepository<Entity extends object = object> {\n\tconstructor(\n\t\tprivate client: HttpClient,\n\t\tprivate entityName: string,\n\t) {\n\t\tthis.client = client;\n\t\tthis.entityName = entityName;\n\t}\n\n\tasync search<Aggregations = object>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<Entity, Aggregations>> {\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<Entity, Aggregations>\n\t\t>(`/search/${this.entityName}`, criteria.toPayload(), context.toHeaders());\n\n\t\treturn new EntitySearchResult<Entity, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync searchIds(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<string[]> {\n\t\tconst response = await this.client.post<{ data: string[] }>(\n\t\t\t`/search-ids/${this.entityName}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn response.body.data;\n\t}\n\n\tasync aggregate<Aggregations>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<object, Aggregations>> {\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<object, Aggregations>\n\t\t>(\n\t\t\t`/aggregate/${this.entityName}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn new EntitySearchResult<object, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync upsert(\n\t\tpayload: Entity[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[new SyncOperation(\"upsert\", this.entityName, \"upsert\", payload)],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync delete<DeleteType extends object = { id: string }>(\n\t\tpayload: DeleteType[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[new SyncOperation(\"delete\", this.entityName, \"delete\", payload)],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync deleteByFilters(\n\t\tfilters: SingleFilter[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[new SyncOperation(\"delete\", this.entityName, \"delete\", [], filters)],\n\t\t\tcontext,\n\t\t);\n\t}\n}\n\nexport class SyncService {\n\tconstructor(private client: HttpClient) {}\n\n\tasync sync(\n\t\toperations: SyncOperation[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait this.client.post<{ notFound: string[]; deleted: string[] }>(\n\t\t\t\"/_action/sync\",\n\t\t\toperations,\n\t\t\tcontext.toHeaders(),\n\t\t);\n\t}\n}\n\nexport class SyncOperation {\n\tconstructor(\n\t\tpublic key: string,\n\t\tpublic entity: string,\n\t\tpublic action: \"upsert\" | \"delete\",\n\t\tpublic payload: object[],\n\t\tpublic criteria: SingleFilter[] | null = null,\n\t) {}\n}\n\ntype EntitySearchResponse<Entity = unknown, Aggregations = object> = {\n\ttotal: number;\n\taggregations: Aggregations;\n\tdata: Entity[];\n};\n\nexport class EntitySearchResult<Entity = unknown, Aggregations = object> {\n\tconstructor(\n\t\tpublic total: number,\n\t\tpublic aggregations: Aggregations,\n\t\tpublic data: Entity[],\n\t) {\n\t\tthis.total = total;\n\t\tthis.aggregations = aggregations;\n\t\tthis.data = data;\n\t}\n\n\tfirst(): Entity | null {\n\t\treturn this.data[0] || null;\n\t}\n}\n\nexport const Defaults = {\n\tsystemLanguageId: \"2fbb5fe2e29a4d70aa5854ce7ce3e20b\",\n\tliveVersion: \"0fa91ce3e96a4bc2be4bd9ce752c3425\",\n\tsystemCurrencyId: \"b7d2554b0ce847cd82f3ac9bd1c0dfca\",\n\tsalesChannelTypeApi: \"f183ee5650cf4bdb8a774337575067a6\",\n\tsalesChannelTypeSalesChannel: \"8a243080f92e4c719546314b577cf82b\",\n\tsalesChannelTypeProductComparision: \"ed535e5722134ac1aa6524f73e26881b\",\n};\n\nexport function uuid(): string {\n\treturn crypto.randomUUID().replaceAll(\"-\", \"\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"admin-api.js","sourceRoot":"","sources":["../../../src/helper/admin-api.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HttpClient } from \"../http-client.js\";\nimport type { Criteria } from \"./criteria.js\";\nimport type { SingleFilter } from \"./criteria.js\";\n\nexport class ApiContext {\n\tprivate languageId: string | null;\n\tinheritance: boolean | null;\n\tversionId: string | null;\n\tskipTriggerFlows: boolean | null;\n\tindexingSkip: string | null;\n\tindexingBehaviour: string | null;\n\n\tconstructor(\n\t\tlanguageId: string | null = null,\n\t\tinheritance: boolean | null = null,\n\t\tversionId: string | null = null,\n\t\tskipTriggerFlows: boolean | null = null,\n\t\tindexingSkip: string | null = null,\n\t\tindexingBehaviour: string | null = null,\n\t) {\n\t\tthis.languageId = languageId;\n\t\tthis.inheritance = inheritance;\n\t\tthis.versionId = versionId;\n\t\tthis.skipTriggerFlows = skipTriggerFlows;\n\t\tthis.indexingSkip = indexingSkip;\n\t\tthis.indexingBehaviour = indexingBehaviour;\n\t}\n\n\ttoHeaders(): Record<string, string> {\n\t\tconst headers = {\n\t\t\t\"sw-language-id\": this.languageId,\n\t\t\t\"sw-inheritance\": this.inheritance === true ? \"1\" : \"0\",\n\t\t\t\"sw-version-id\": this.versionId,\n\t\t\t\"sw-skip-trigger-flow\": this.skipTriggerFlows === true ? \"1\" : \"0\",\n\t\t\t\"indexing-skip\": this.indexingSkip,\n\t\t\t\"indexing-behavior\": this.indexingBehaviour,\n\t\t};\n\n\t\tfor (const key of Object.keys(headers)) {\n\t\t\t// @ts-expect-error\n\t\t\tif (headers[key] === null) {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tdelete headers[key];\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\treturn headers;\n\t}\n}\n\nexport class EntityRepository<Entity extends object = object> {\n\tconstructor(\n\t\tprivate client: HttpClient,\n\t\tprivate entityName: string,\n\t) {\n\t\tthis.client = client;\n\t\tthis.entityName = entityName;\n\t}\n\n\tasync search<Aggregations = object>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<Entity, Aggregations>> {\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<Entity, Aggregations>\n\t\t>(\n\t\t\t`/search/${this.entityName.replaceAll(\"_\", \"-\")}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn new EntitySearchResult<Entity, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync searchIds(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<string[]> {\n\t\tconst response = await this.client.post<{ data: string[] }>(\n\t\t\t`/search-ids/${this.entityName.replaceAll(\"_\", \"-\")}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn response.body.data;\n\t}\n\n\tasync aggregate<Aggregations>(\n\t\tcriteria: Criteria,\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<EntitySearchResult<object, Aggregations>> {\n\t\tcriteria.setLimit(1);\n\n\t\tconst response = await this.client.post<\n\t\t\tEntitySearchResponse<object, Aggregations>\n\t\t>(\n\t\t\t`/search/${this.entityName.replaceAll(\"_\", \"-\")}`,\n\t\t\tcriteria.toPayload(),\n\t\t\tcontext.toHeaders(),\n\t\t);\n\n\t\treturn new EntitySearchResult<object, Aggregations>(\n\t\t\tresponse.body.total,\n\t\t\tresponse.body.aggregations,\n\t\t\tresponse.body.data,\n\t\t);\n\t}\n\n\tasync upsert(\n\t\tpayload: Entity[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[\n\t\t\t\tnew SyncOperation(\n\t\t\t\t\t\"upsert\",\n\t\t\t\t\tthis.entityName.replaceAll(\"-\", \"_\"),\n\t\t\t\t\t\"upsert\",\n\t\t\t\t\tpayload,\n\t\t\t\t),\n\t\t\t],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync delete<DeleteType extends object = { id: string }>(\n\t\tpayload: DeleteType[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[\n\t\t\t\tnew SyncOperation(\n\t\t\t\t\t\"delete\",\n\t\t\t\t\tthis.entityName.replaceAll(\"-\", \"_\"),\n\t\t\t\t\t\"delete\",\n\t\t\t\t\tpayload,\n\t\t\t\t),\n\t\t\t],\n\t\t\tcontext,\n\t\t);\n\t}\n\n\tasync deleteByFilters(\n\t\tfilters: SingleFilter[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait new SyncService(this.client).sync(\n\t\t\t[\n\t\t\t\tnew SyncOperation(\n\t\t\t\t\t\"delete\",\n\t\t\t\t\tthis.entityName.replaceAll(\"-\", \"_\"),\n\t\t\t\t\t\"delete\",\n\t\t\t\t\t[],\n\t\t\t\t\tfilters,\n\t\t\t\t),\n\t\t\t],\n\t\t\tcontext,\n\t\t);\n\t}\n}\n\nexport class SyncService {\n\tconstructor(private client: HttpClient) {}\n\n\tasync sync(\n\t\toperations: SyncOperation[],\n\t\tcontext: ApiContext = new ApiContext(),\n\t): Promise<void> {\n\t\tawait this.client.post<{ notFound: string[]; deleted: string[] }>(\n\t\t\t\"/_action/sync\",\n\t\t\toperations,\n\t\t\tcontext.toHeaders(),\n\t\t);\n\t}\n}\n\nexport class SyncOperation {\n\tconstructor(\n\t\tpublic key: string,\n\t\tpublic entity: string,\n\t\tpublic action: \"upsert\" | \"delete\",\n\t\tpublic payload: object[],\n\t\tpublic criteria: SingleFilter[] | null = null,\n\t) {}\n}\n\ntype EntitySearchResponse<Entity = unknown, Aggregations = object> = {\n\ttotal: number;\n\taggregations: Aggregations;\n\tdata: Entity[];\n};\n\nexport class EntitySearchResult<Entity = unknown, Aggregations = object> {\n\tconstructor(\n\t\tpublic total: number,\n\t\tpublic aggregations: Aggregations,\n\t\tpublic data: Entity[],\n\t) {\n\t\tthis.total = total;\n\t\tthis.aggregations = aggregations;\n\t\tthis.data = data;\n\t}\n\n\tfirst(): Entity | null {\n\t\treturn this.data[0] || null;\n\t}\n}\n\nexport const Defaults = {\n\tsystemLanguageId: \"2fbb5fe2e29a4d70aa5854ce7ce3e20b\",\n\tliveVersion: \"0fa91ce3e96a4bc2be4bd9ce752c3425\",\n\tsystemCurrencyId: \"b7d2554b0ce847cd82f3ac9bd1c0dfca\",\n\tsalesChannelTypeApi: \"f183ee5650cf4bdb8a774337575067a6\",\n\tsalesChannelTypeSalesChannel: \"8a243080f92e4c719546314b577cf82b\",\n\tsalesChannelTypeProductComparision: \"ed535e5722134ac1aa6524f73e26881b\",\n};\n\nexport function uuid(): string {\n\treturn crypto.randomUUID().replaceAll(\"-\", \"\");\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { HttpClient } from "../http-client.js";
|
|
2
|
+
/**
|
|
3
|
+
* Uploads a media file to the Shopware instance.
|
|
4
|
+
*
|
|
5
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
6
|
+
* @param {Object} options - The options for uploading the media file.
|
|
7
|
+
* @param {boolean} [options.private] - Whether the media file should be private.
|
|
8
|
+
* @param {string} [options.mediaFolderId] - The ID of the media folder to upload the file to.
|
|
9
|
+
* @param {string} options.fileName - The name of the file to upload.
|
|
10
|
+
* @param {Blob|Promise<Blob>} options.file - The file to upload.
|
|
11
|
+
*/
|
|
12
|
+
export declare function uploadMediaFile(httpClient: HttpClient, { private: isPrivate, mediaFolderId, fileName, file, }: {
|
|
13
|
+
private?: boolean;
|
|
14
|
+
mediaFolderId?: string | null;
|
|
15
|
+
fileName: string;
|
|
16
|
+
file: Blob | Promise<Blob>;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Retrieves the default media folder ID for a given entity.
|
|
20
|
+
*
|
|
21
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
22
|
+
* @param {string} entity - The entity name to get the default folder ID for.
|
|
23
|
+
* @returns {Promise<string|null>} - The ID of the default media folder or null if not found.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getMediaDefaultFolderByEntity(httpClient: HttpClient, entity: string): Promise<string | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves the media folder ID by its name.
|
|
28
|
+
*
|
|
29
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
30
|
+
* @param {string} name - The name of the media folder.
|
|
31
|
+
* @returns {Promise<string|null>} - The ID of the media folder or null if not found.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getMediaFolderByName(httpClient: HttpClient, name: string): Promise<string | null>;
|
|
34
|
+
interface CreateMediaFolderOptions {
|
|
35
|
+
parentId?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new media folder.
|
|
39
|
+
*
|
|
40
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
41
|
+
* @param {string} name - The name of the media folder.
|
|
42
|
+
* @param {Object} options - Additional options for creating the media folder.
|
|
43
|
+
* @param {string} [options.parentId] - The ID of the parent folder, if any.
|
|
44
|
+
* @returns {Promise<string>} - The ID of the newly created media folder.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createMediaFolder(httpClient: HttpClient, name: string, options: CreateMediaFolderOptions): Promise<string>;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/helper/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACpC,UAAU,EAAE,UAAU,EACtB,EACC,OAAO,EAAE,SAAiB,EAC1B,aAAoB,EACpB,QAAQ,EACR,IAAI,GACJ,EAAE;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,iBA0CD;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CAClD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB;AAED,UAAU,wBAAwB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,wBAAwB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { EntityRepository, uuid } from "./admin-api.js";
|
|
2
|
+
import { Criteria } from "./criteria.js";
|
|
3
|
+
/**
|
|
4
|
+
* Uploads a media file to the Shopware instance.
|
|
5
|
+
*
|
|
6
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
7
|
+
* @param {Object} options - The options for uploading the media file.
|
|
8
|
+
* @param {boolean} [options.private] - Whether the media file should be private.
|
|
9
|
+
* @param {string} [options.mediaFolderId] - The ID of the media folder to upload the file to.
|
|
10
|
+
* @param {string} options.fileName - The name of the file to upload.
|
|
11
|
+
* @param {Blob|Promise<Blob>} options.file - The file to upload.
|
|
12
|
+
*/
|
|
13
|
+
export async function uploadMediaFile(httpClient, { private: isPrivate = false, mediaFolderId = null, fileName, file, }) {
|
|
14
|
+
const repository = new EntityRepository(httpClient, "media");
|
|
15
|
+
const mediaId = uuid();
|
|
16
|
+
await repository.upsert([
|
|
17
|
+
{
|
|
18
|
+
id: mediaId,
|
|
19
|
+
private: isPrivate,
|
|
20
|
+
mediaFolderId,
|
|
21
|
+
},
|
|
22
|
+
]);
|
|
23
|
+
const splitFileName = fileName.split(".");
|
|
24
|
+
if (splitFileName.length < 2) {
|
|
25
|
+
throw new Error("Invalid file name, should have an extension");
|
|
26
|
+
}
|
|
27
|
+
const extension = (splitFileName.slice(-1)[0] || "").toLowerCase();
|
|
28
|
+
const baseFileName = splitFileName.slice(0, -1).join(".");
|
|
29
|
+
const params = new URLSearchParams();
|
|
30
|
+
params.append("extension", extension);
|
|
31
|
+
params.append("fileName", baseFileName);
|
|
32
|
+
const resolved = await file;
|
|
33
|
+
try {
|
|
34
|
+
await httpClient.post(`/_action/media/${mediaId}/upload?${params.toString()}`, resolved, {
|
|
35
|
+
"Content-Type": resolved.type,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
await repository.delete([{ id: mediaId }]);
|
|
40
|
+
throw e;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Retrieves the default media folder ID for a given entity.
|
|
45
|
+
*
|
|
46
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
47
|
+
* @param {string} entity - The entity name to get the default folder ID for.
|
|
48
|
+
* @returns {Promise<string|null>} - The ID of the default media folder or null if not found.
|
|
49
|
+
*/
|
|
50
|
+
export async function getMediaDefaultFolderByEntity(httpClient, entity) {
|
|
51
|
+
const mediaDefaultFolder = new EntityRepository(httpClient, "media_default_folder");
|
|
52
|
+
const criteria = new Criteria();
|
|
53
|
+
criteria.addFilter(Criteria.equals("entity", entity));
|
|
54
|
+
const folders = await mediaDefaultFolder.search(criteria);
|
|
55
|
+
const firstFolder = folders.first();
|
|
56
|
+
return firstFolder?.folder?.id || null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Retrieves the media folder ID by its name.
|
|
60
|
+
*
|
|
61
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
62
|
+
* @param {string} name - The name of the media folder.
|
|
63
|
+
* @returns {Promise<string|null>} - The ID of the media folder or null if not found.
|
|
64
|
+
*/
|
|
65
|
+
export async function getMediaFolderByName(httpClient, name) {
|
|
66
|
+
const mediaFolder = new EntityRepository(httpClient, "media_folder");
|
|
67
|
+
const criteria = new Criteria();
|
|
68
|
+
criteria.addFilter(Criteria.equals("name", name));
|
|
69
|
+
const folders = await mediaFolder.search(criteria);
|
|
70
|
+
return folders.first()?.id || null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Creates a new media folder.
|
|
74
|
+
*
|
|
75
|
+
* @param {HttpClient} httpClient - The HTTP client instance.
|
|
76
|
+
* @param {string} name - The name of the media folder.
|
|
77
|
+
* @param {Object} options - Additional options for creating the media folder.
|
|
78
|
+
* @param {string} [options.parentId] - The ID of the parent folder, if any.
|
|
79
|
+
* @returns {Promise<string>} - The ID of the newly created media folder.
|
|
80
|
+
*/
|
|
81
|
+
export async function createMediaFolder(httpClient, name, options) {
|
|
82
|
+
const repository = new EntityRepository(httpClient, "media_folder");
|
|
83
|
+
const mediaFolderId = uuid();
|
|
84
|
+
await repository.upsert([
|
|
85
|
+
{
|
|
86
|
+
id: mediaFolderId,
|
|
87
|
+
name,
|
|
88
|
+
parentId: options.parentId || null,
|
|
89
|
+
configuration: {},
|
|
90
|
+
},
|
|
91
|
+
]);
|
|
92
|
+
return mediaFolderId;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/helper/media.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HttpClient } from \"../http-client.js\";\nimport { EntityRepository, uuid } from \"./admin-api.js\";\nimport { Criteria } from \"./criteria.js\";\n\n/**\n * Uploads a media file to the Shopware instance.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {Object} options - The options for uploading the media file.\n * @param {boolean} [options.private] - Whether the media file should be private.\n * @param {string} [options.mediaFolderId] - The ID of the media folder to upload the file to.\n * @param {string} options.fileName - The name of the file to upload.\n * @param {Blob|Promise<Blob>} options.file - The file to upload.\n */\nexport async function uploadMediaFile(\n\thttpClient: HttpClient,\n\t{\n\t\tprivate: isPrivate = false,\n\t\tmediaFolderId = null,\n\t\tfileName,\n\t\tfile,\n\t}: {\n\t\tprivate?: boolean;\n\t\tmediaFolderId?: string | null;\n\t\tfileName: string;\n\t\tfile: Blob | Promise<Blob>;\n\t},\n) {\n\tconst repository = new EntityRepository(httpClient, \"media\");\n\n\tconst mediaId = uuid();\n\n\tawait repository.upsert([\n\t\t{\n\t\t\tid: mediaId,\n\t\t\tprivate: isPrivate,\n\t\t\tmediaFolderId,\n\t\t},\n\t]);\n\n\tconst splitFileName = fileName.split(\".\");\n\n\tif (splitFileName.length < 2) {\n\t\tthrow new Error(\"Invalid file name, should have an extension\");\n\t}\n\n\tconst extension = (splitFileName.slice(-1)[0] || \"\").toLowerCase();\n\tconst baseFileName = splitFileName.slice(0, -1).join(\".\");\n\n\tconst params = new URLSearchParams();\n\n\tparams.append(\"extension\", extension);\n\tparams.append(\"fileName\", baseFileName);\n\n\tconst resolved = await file;\n\n\ttry {\n\t\tawait httpClient.post(\n\t\t\t`/_action/media/${mediaId}/upload?${params.toString()}`,\n\t\t\tresolved,\n\t\t\t{\n\t\t\t\t\"Content-Type\": resolved.type,\n\t\t\t},\n\t\t);\n\t} catch (e) {\n\t\tawait repository.delete([{ id: mediaId }]);\n\t\tthrow e;\n\t}\n}\n\n/**\n * Retrieves the default media folder ID for a given entity.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {string} entity - The entity name to get the default folder ID for.\n * @returns {Promise<string|null>} - The ID of the default media folder or null if not found.\n */\nexport async function getMediaDefaultFolderByEntity(\n\thttpClient: HttpClient,\n\tentity: string,\n): Promise<string | null> {\n\tconst mediaDefaultFolder = new EntityRepository<{ folder: { id: string } }>(\n\t\thttpClient,\n\t\t\"media_default_folder\",\n\t);\n\n\tconst criteria = new Criteria();\n\tcriteria.addFilter(Criteria.equals(\"entity\", entity));\n\n\tconst folders = await mediaDefaultFolder.search(criteria);\n\n\tconst firstFolder = folders.first();\n\treturn firstFolder?.folder?.id || null;\n}\n\n/**\n * Retrieves the media folder ID by its name.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {string} name - The name of the media folder.\n * @returns {Promise<string|null>} - The ID of the media folder or null if not found.\n */\nexport async function getMediaFolderByName(\n\thttpClient: HttpClient,\n\tname: string,\n): Promise<string | null> {\n\tconst mediaFolder = new EntityRepository<{ id: string }>(\n\t\thttpClient,\n\t\t\"media_folder\",\n\t);\n\n\tconst criteria = new Criteria();\n\tcriteria.addFilter(Criteria.equals(\"name\", name));\n\n\tconst folders = await mediaFolder.search(criteria);\n\n\treturn folders.first()?.id || null;\n}\n\ninterface CreateMediaFolderOptions {\n\tparentId?: string;\n}\n\n/**\n * Creates a new media folder.\n *\n * @param {HttpClient} httpClient - The HTTP client instance.\n * @param {string} name - The name of the media folder.\n * @param {Object} options - Additional options for creating the media folder.\n * @param {string} [options.parentId] - The ID of the parent folder, if any.\n * @returns {Promise<string>} - The ID of the newly created media folder.\n */\nexport async function createMediaFolder(\n\thttpClient: HttpClient,\n\tname: string,\n\toptions: CreateMediaFolderOptions,\n): Promise<string> {\n\tconst repository = new EntityRepository(httpClient, \"media_folder\");\n\n\tconst mediaFolderId = uuid();\n\n\tawait repository.upsert([\n\t\t{\n\t\t\tid: mediaFolderId,\n\t\t\tname,\n\t\t\tparentId: options.parentId || null,\n\t\t\tconfiguration: {},\n\t\t},\n\t]);\n\n\treturn mediaFolderId;\n}\n"]}
|
|
@@ -19,7 +19,7 @@ export class BetterSqlite3Repository {
|
|
|
19
19
|
async createShop(id, url, secret) {
|
|
20
20
|
const shop = await this.getShopById(id);
|
|
21
21
|
if (shop) {
|
|
22
|
-
|
|
22
|
+
await this.deleteShop(id);
|
|
23
23
|
}
|
|
24
24
|
this.db
|
|
25
25
|
.prepare("INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-sqlite3.js","sourceRoot":"","sources":["../../../src/integration/better-sqlite3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,OAAO,uBAAuB;IAGnC,EAAE,CAAoB;IACtB,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,
|
|
1
|
+
{"version":3,"file":"better-sqlite3.js","sourceRoot":"","sources":["../../../src/integration/better-sqlite3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,OAAO,uBAAuB;IAGnC,EAAE,CAAoB;IACtB,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,EAAE;aACL,OAAO,CAAC,qDAAqD,CAAC;aAC9D,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACpB,OAAO,CAAC,iCAAiC,CAAC;aAC1C,GAAG,CAAC,EAAE,CAOP,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,IAAgB;QAChC,IAAI,CAAC,EAAE;aACL,OAAO,CACP,gGAAgG,CAChG;aACA,GAAG,CACH,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,aAAa,EAAE,EACpB,IAAI,CAAC,eAAe,EAAE,EACtB,IAAI,CAAC,mBAAmB,EAAE,EAC1B,CAAC,IAAI,CAAC,aAAa,EAAE,EACrB,IAAI,CAAC,SAAS,EAAE,CAChB,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;CACD","sourcesContent":["import { type ShopRepositoryInterface, SimpleShop } from \"../repository.js\";\n\nimport Database from \"better-sqlite3\";\n\nexport class BetterSqlite3Repository\n\timplements ShopRepositoryInterface<SimpleShop>\n{\n\tdb: Database.Database;\n\tconstructor(fileName: string) {\n\t\tthis.db = new Database(fileName);\n\t\tthis.db.pragma(\"journal_mode = WAL\");\n\t\tthis.db.exec(`\n CREATE TABLE IF NOT EXISTS shop (\n id TEXT PRIMARY KEY,\n active BOOLEAN DEFAULT 1,\n url TEXT NOT NULL,\n secret TEXT NOT NULL,\n client_id TEXT NULL,\n client_secret TEXT NULL\n );\n `);\n\t}\n\n\tasync createShop(id: string, url: string, secret: string): Promise<void> {\n\t\tconst shop = await this.getShopById(id);\n\n\t\tif (shop) {\n\t\t\tawait this.deleteShop(id);\n\t\t}\n\n\t\tthis.db\n\t\t\t.prepare(\"INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)\")\n\t\t\t.run(id, url, secret);\n\t}\n\n\tasync getShopById(id: string): Promise<SimpleShop | null> {\n\t\tconst result = this.db\n\t\t\t.prepare(\"SELECT * FROM shop WHERE id = ?\")\n\t\t\t.get(id) as null | {\n\t\t\tid: string;\n\t\t\tactive: number;\n\t\t\turl: string;\n\t\t\tsecret: string;\n\t\t\tclient_id?: string;\n\t\t\tclient_secret?: string;\n\t\t};\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst shop = new SimpleShop(result.id, result.url, result.secret);\n\n\t\tif (result.client_id && result.client_secret) {\n\t\t\tshop.setShopCredentials(result.client_id, result.client_secret);\n\t\t}\n\n\t\tshop.setShopActive(result.active === 1);\n\n\t\treturn shop;\n\t}\n\tasync updateShop(shop: SimpleShop): Promise<void> {\n\t\tthis.db\n\t\t\t.prepare(\n\t\t\t\t\"UPDATE shop SET url = ?, secret = ?, client_id = ?, client_secret = ?, active = ? WHERE id = ?\",\n\t\t\t)\n\t\t\t.run(\n\t\t\t\tshop.getShopUrl(),\n\t\t\t\tshop.getShopSecret(),\n\t\t\t\tshop.getShopClientId(),\n\t\t\t\tshop.getShopClientSecret(),\n\t\t\t\t+shop.getShopActive(),\n\t\t\t\tshop.getShopId(),\n\t\t\t);\n\t}\n\tasync deleteShop(id: string): Promise<void> {\n\t\tthis.db.prepare(\"DELETE FROM shop where id = ?\").run(id);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sqlite.d.ts","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,mBACZ,YAAW,uBAAuB,CAAC,UAAU,CAAC;IAE9C,EAAE,EAAE,QAAQ,CAAC;gBACD,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"bun-sqlite.d.ts","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,mBACZ,YAAW,uBAAuB,CAAC,UAAU,CAAC;IAE9C,EAAE,EAAE,QAAQ,CAAC;gBACD,QAAQ,EAAE,MAAM;IAetB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA4BnD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C"}
|
|
@@ -4,6 +4,7 @@ export class BunSqliteRepository {
|
|
|
4
4
|
db;
|
|
5
5
|
constructor(fileName) {
|
|
6
6
|
this.db = new Database(fileName);
|
|
7
|
+
this.db.exec(`PRAGMA journal_mode = WAL;`);
|
|
7
8
|
this.db.exec(`
|
|
8
9
|
CREATE TABLE IF NOT EXISTS shop (
|
|
9
10
|
id TEXT PRIMARY KEY,
|
|
@@ -18,7 +19,7 @@ export class BunSqliteRepository {
|
|
|
18
19
|
async createShop(id, url, secret) {
|
|
19
20
|
const shop = await this.getShopById(id);
|
|
20
21
|
if (shop) {
|
|
21
|
-
|
|
22
|
+
await this.deleteShop(id);
|
|
22
23
|
}
|
|
23
24
|
this.db.exec("INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)", [
|
|
24
25
|
id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sqlite.js","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,OAAO,mBAAmB;IAG/B,EAAE,CAAW;IACb,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,
|
|
1
|
+
{"version":3,"file":"bun-sqlite.js","sourceRoot":"","sources":["../../../src/integration/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,OAAO,mBAAmB;IAG/B,EAAE,CAAW;IACb,YAAY,QAAgB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASR,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,MAAc;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,qDAAqD,EAAE;YACnE,EAAE;YACF,GAAG;YACH,MAAM;SACN,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAUzB,iCAAiC,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,IAAgB;QAChC,IAAI,CAAC,EAAE,CAAC,IAAI,CACX,gGAAgG,EAChG;YACC,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,SAAS,EAAE;SAChB,CACD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;CACD","sourcesContent":["import { type ShopRepositoryInterface, SimpleShop } from \"../repository.js\";\n\nimport { Database } from \"bun:sqlite\";\n\nexport class BunSqliteRepository\n\timplements ShopRepositoryInterface<SimpleShop>\n{\n\tdb: Database;\n\tconstructor(fileName: string) {\n\t\tthis.db = new Database(fileName);\n\t\tthis.db.exec(`PRAGMA journal_mode = WAL;`);\n\t\tthis.db.exec(`\n CREATE TABLE IF NOT EXISTS shop (\n id TEXT PRIMARY KEY,\n active BOOLEAN DEFAULT 1,\n url TEXT NOT NULL,\n secret TEXT NOT NULL,\n client_id TEXT NULL,\n client_secret TEXT NULL\n );\n `);\n\t}\n\n\tasync createShop(id: string, url: string, secret: string): Promise<void> {\n\t\tconst shop = await this.getShopById(id);\n\n\t\tif (shop) {\n\t\t\tawait this.deleteShop(id);\n\t\t}\n\n\t\tthis.db.exec(\"INSERT INTO shop (id, url, secret) VALUES (?, ?, ?)\", [\n\t\t\tid,\n\t\t\turl,\n\t\t\tsecret,\n\t\t]);\n\t}\n\n\tasync getShopById(id: string): Promise<SimpleShop | null> {\n\t\tconst query = this.db.query<\n\t\t\t{\n\t\t\t\tid: string;\n\t\t\t\tactive: boolean;\n\t\t\t\turl: string;\n\t\t\t\tsecret: string;\n\t\t\t\tclient_id?: string;\n\t\t\t\tclient_secret?: string;\n\t\t\t},\n\t\t\tstring\n\t\t>(\"SELECT * FROM shop WHERE id = ?\");\n\t\tconst result = query.get(id);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst shop = new SimpleShop(result.id, result.url, result.secret);\n\n\t\tif (result.client_id && result.client_secret) {\n\t\t\tshop.setShopCredentials(result.client_id, result.client_secret);\n\t\t}\n\n\t\tshop.setShopActive(result.active);\n\n\t\treturn shop;\n\t}\n\tasync updateShop(shop: SimpleShop): Promise<void> {\n\t\tthis.db.exec(\n\t\t\t\"UPDATE shop SET url = ?, secret = ?, client_id = ?, client_secret = ?, active = ? WHERE id = ?\",\n\t\t\t[\n\t\t\t\tshop.getShopUrl(),\n\t\t\t\tshop.getShopSecret(),\n\t\t\t\tshop.getShopClientId(),\n\t\t\t\tshop.getShopClientSecret(),\n\t\t\t\tshop.getShopActive(),\n\t\t\t\tshop.getShopId(),\n\t\t\t],\n\t\t);\n\t}\n\tasync deleteShop(id: string): Promise<void> {\n\t\tthis.db.exec(\"DELETE FROM shop where id = ?\", [id]);\n\t}\n}\n"]}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -25,4 +25,16 @@ export type ActionButtonRequest = {
|
|
|
25
25
|
};
|
|
26
26
|
meta: Meta;
|
|
27
27
|
};
|
|
28
|
+
export type EntityWrittenRequest<PrimaryKey = string> = {
|
|
29
|
+
data: {
|
|
30
|
+
event: string;
|
|
31
|
+
payload: {
|
|
32
|
+
entity: string;
|
|
33
|
+
operation: string;
|
|
34
|
+
primaryKey: PrimaryKey;
|
|
35
|
+
updatedFields: string[];
|
|
36
|
+
versionId: string;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
};
|
|
28
40
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACL,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,IAAI,EAAE,IAAI,CAAC;CACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACL,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,IAAI,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,UAAU,GAAG,MAAM,IAAI;IACvD,IAAI,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE;YACR,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,UAAU,EAAE,UAAU,CAAC;YACvB,aAAa,EAAE,MAAM,EAAE,CAAC;YACxB,SAAS,EAAE,MAAM,CAAC;SAClB,EAAE,CAAC;KACJ,CAAC;CACF,CAAC"}
|
package/dist/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type BrowserAppModuleRequest = {\n\t\"shop-id\": string;\n\t\"shop-url\": string;\n\ttimestamp: string;\n\t\"sw-version\": string;\n\t\"sw-context-language\": string;\n\t\"sw-user-language\": string;\n};\n\nexport type Source = {\n\turl: string;\n\tshopId: string;\n\tappVersion: string;\n};\n\nexport type Meta = {\n\ttimestamp: number;\n\treference: string;\n\tlanguage: string;\n};\n\nexport type ActionButtonRequest = {\n\tsource: Source;\n\tdata: {\n\t\tids: string[];\n\t\tentity: string;\n\t\taction: string;\n\t};\n\tmeta: Meta;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type BrowserAppModuleRequest = {\n\t\"shop-id\": string;\n\t\"shop-url\": string;\n\ttimestamp: string;\n\t\"sw-version\": string;\n\t\"sw-context-language\": string;\n\t\"sw-user-language\": string;\n};\n\nexport type Source = {\n\turl: string;\n\tshopId: string;\n\tappVersion: string;\n};\n\nexport type Meta = {\n\ttimestamp: number;\n\treference: string;\n\tlanguage: string;\n};\n\nexport type ActionButtonRequest = {\n\tsource: Source;\n\tdata: {\n\t\tids: string[];\n\t\tentity: string;\n\t\taction: string;\n\t};\n\tmeta: Meta;\n};\n\nexport type EntityWrittenRequest<PrimaryKey = string> = {\n\tdata: {\n\t\tevent: string;\n\t\tpayload: {\n\t\t\tentity: string;\n\t\t\toperation: string;\n\t\t\tprimaryKey: PrimaryKey;\n\t\t\tupdatedFields: string[];\n\t\t\tversionId: string;\n\t\t}[];\n\t};\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shopware-ag/app-server-sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "App Server SDK for JavaScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -60,6 +60,16 @@
|
|
|
60
60
|
"default": "./dist/commonjs/helper/uuid.js"
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
|
+
"./helper/media": {
|
|
64
|
+
"import": {
|
|
65
|
+
"types": "./dist/esm/helper/media.d.ts",
|
|
66
|
+
"default": "./dist/esm/helper/media.js"
|
|
67
|
+
},
|
|
68
|
+
"require": {
|
|
69
|
+
"types": "./dist/commonjs/helper/media.d.ts",
|
|
70
|
+
"default": "./dist/commonjs/helper/media.js"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
63
73
|
"./integration/hono": {
|
|
64
74
|
"import": {
|
|
65
75
|
"types": "./dist/esm/integration/hono.d.ts",
|
|
@@ -183,6 +193,7 @@
|
|
|
183
193
|
"./helper/criteria": "./src/helper/criteria.ts",
|
|
184
194
|
"./helper/admin-api": "./src/helper/admin-api.ts",
|
|
185
195
|
"./helper/uuid": "./src/helper/uuid.ts",
|
|
196
|
+
"./helper/media": "./src/helper/media.ts",
|
|
186
197
|
"./integration/hono": "./src/integration/hono.ts",
|
|
187
198
|
"./integration/cloudflare-kv": "./src/integration/cloudflare-kv.ts",
|
|
188
199
|
"./integration/deno-kv": "./src/integration/deno-kv.ts",
|