@shopware-ag/app-server-sdk 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -4
  3. package/dist/commonjs/context-resolver.test.d.ts +2 -0
  4. package/dist/commonjs/context-resolver.test.d.ts.map +1 -0
  5. package/dist/commonjs/context-resolver.test.js +81 -0
  6. package/dist/commonjs/context-resolver.test.js.map +1 -0
  7. package/dist/commonjs/helper/app-actions.test.d.ts +2 -0
  8. package/dist/commonjs/helper/app-actions.test.d.ts.map +1 -0
  9. package/dist/commonjs/helper/app-actions.test.js +31 -0
  10. package/dist/commonjs/helper/app-actions.test.js.map +1 -0
  11. package/dist/commonjs/http-client.test.d.ts +2 -0
  12. package/dist/commonjs/http-client.test.d.ts.map +1 -0
  13. package/dist/commonjs/http-client.test.js +71 -0
  14. package/dist/commonjs/http-client.test.js.map +1 -0
  15. package/dist/commonjs/integration/bun-sqlite.d.ts +11 -0
  16. package/dist/commonjs/integration/bun-sqlite.d.ts.map +1 -0
  17. package/dist/commonjs/integration/bun-sqlite.js +60 -0
  18. package/dist/commonjs/integration/bun-sqlite.js.map +1 -0
  19. package/dist/commonjs/integration/bun-sqlite.test.d.ts +2 -0
  20. package/dist/commonjs/integration/bun-sqlite.test.d.ts.map +1 -0
  21. package/dist/commonjs/integration/bun-sqlite.test.js +24 -0
  22. package/dist/commonjs/integration/bun-sqlite.test.js.map +1 -0
  23. package/dist/{deno/service/cloudflare.d.ts → commonjs/integration/cloudflare-kv.d.ts} +1 -24
  24. package/dist/commonjs/integration/cloudflare-kv.d.ts.map +1 -0
  25. package/dist/commonjs/{service/cloudflare.js → integration/cloudflare-kv.js} +5 -1
  26. package/dist/commonjs/integration/cloudflare-kv.js.map +1 -0
  27. package/dist/commonjs/integration/cloudflare.test.d.ts +2 -0
  28. package/dist/commonjs/integration/cloudflare.test.d.ts.map +1 -0
  29. package/dist/commonjs/integration/cloudflare.test.js +39 -0
  30. package/dist/commonjs/integration/cloudflare.test.js.map +1 -0
  31. package/dist/{esm/service/deno.d.ts → commonjs/integration/deno-kv.d.ts} +1 -1
  32. package/dist/commonjs/integration/deno-kv.d.ts.map +1 -0
  33. package/dist/commonjs/{service/deno.js → integration/deno-kv.js} +5 -1
  34. package/dist/commonjs/integration/deno-kv.js.map +1 -0
  35. package/dist/commonjs/integration/deno.test.d.ts +2 -0
  36. package/dist/commonjs/integration/deno.test.d.ts.map +1 -0
  37. package/dist/commonjs/integration/deno.test.js +48 -0
  38. package/dist/commonjs/integration/deno.test.js.map +1 -0
  39. package/dist/commonjs/integration/dynamodb.d.ts +13 -0
  40. package/dist/commonjs/integration/dynamodb.d.ts.map +1 -0
  41. package/dist/commonjs/integration/dynamodb.js +73 -0
  42. package/dist/commonjs/integration/dynamodb.js.map +1 -0
  43. package/dist/commonjs/integration/dynamodb.test.d.ts +2 -0
  44. package/dist/commonjs/integration/dynamodb.test.d.ts.map +1 -0
  45. package/dist/commonjs/integration/dynamodb.test.js +132 -0
  46. package/dist/commonjs/integration/dynamodb.test.js.map +1 -0
  47. package/dist/commonjs/integration/hono.d.ts +29 -0
  48. package/dist/commonjs/integration/hono.d.ts.map +1 -0
  49. package/dist/commonjs/{framework → integration}/hono.js +25 -4
  50. package/dist/commonjs/integration/hono.js.map +1 -0
  51. package/dist/commonjs/integration/hono.test.d.ts +2 -0
  52. package/dist/commonjs/integration/hono.test.d.ts.map +1 -0
  53. package/dist/commonjs/integration/hono.test.js +86 -0
  54. package/dist/commonjs/integration/hono.test.js.map +1 -0
  55. package/dist/commonjs/registration.d.ts +24 -0
  56. package/dist/commonjs/registration.d.ts.map +1 -1
  57. package/dist/commonjs/registration.js +42 -3
  58. package/dist/commonjs/registration.js.map +1 -1
  59. package/dist/commonjs/registration.test.d.ts +2 -0
  60. package/dist/commonjs/registration.test.d.ts.map +1 -0
  61. package/dist/commonjs/registration.test.js +59 -0
  62. package/dist/commonjs/registration.test.js.map +1 -0
  63. package/dist/commonjs/repository.d.ts +5 -1
  64. package/dist/commonjs/repository.d.ts.map +1 -1
  65. package/dist/commonjs/repository.js +7 -1
  66. package/dist/commonjs/repository.js.map +1 -1
  67. package/dist/commonjs/repository.test.d.ts +2 -0
  68. package/dist/commonjs/repository.test.d.ts.map +1 -0
  69. package/dist/commonjs/repository.test.js +32 -0
  70. package/dist/commonjs/repository.test.js.map +1 -0
  71. package/dist/commonjs/signer.test.d.ts +2 -0
  72. package/dist/commonjs/signer.test.d.ts.map +1 -0
  73. package/dist/commonjs/signer.test.js +25 -0
  74. package/dist/commonjs/signer.test.js.map +1 -0
  75. package/dist/esm/context-resolver.test.d.ts +2 -0
  76. package/dist/esm/context-resolver.test.d.ts.map +1 -0
  77. package/dist/esm/context-resolver.test.js +79 -0
  78. package/dist/esm/context-resolver.test.js.map +1 -0
  79. package/dist/esm/helper/app-actions.test.d.ts +2 -0
  80. package/dist/esm/helper/app-actions.test.d.ts.map +1 -0
  81. package/dist/esm/helper/app-actions.test.js +29 -0
  82. package/dist/esm/helper/app-actions.test.js.map +1 -0
  83. package/dist/esm/http-client.test.d.ts +2 -0
  84. package/dist/esm/http-client.test.d.ts.map +1 -0
  85. package/dist/esm/http-client.test.js +69 -0
  86. package/dist/esm/http-client.test.js.map +1 -0
  87. package/dist/esm/integration/bun-sqlite.d.ts +11 -0
  88. package/dist/esm/integration/bun-sqlite.d.ts.map +1 -0
  89. package/dist/esm/integration/bun-sqlite.js +56 -0
  90. package/dist/esm/integration/bun-sqlite.js.map +1 -0
  91. package/dist/esm/integration/bun-sqlite.test.d.ts +2 -0
  92. package/dist/esm/integration/bun-sqlite.test.d.ts.map +1 -0
  93. package/dist/esm/integration/bun-sqlite.test.js +22 -0
  94. package/dist/esm/integration/bun-sqlite.test.js.map +1 -0
  95. package/dist/{commonjs/service/cloudflare.d.ts → esm/integration/cloudflare-kv.d.ts} +1 -24
  96. package/dist/esm/integration/cloudflare-kv.d.ts.map +1 -0
  97. package/dist/esm/{service/cloudflare.js → integration/cloudflare-kv.js} +5 -1
  98. package/dist/esm/integration/cloudflare-kv.js.map +1 -0
  99. package/dist/esm/integration/cloudflare.test.d.ts +2 -0
  100. package/dist/esm/integration/cloudflare.test.d.ts.map +1 -0
  101. package/dist/esm/integration/cloudflare.test.js +37 -0
  102. package/dist/esm/integration/cloudflare.test.js.map +1 -0
  103. package/dist/{commonjs/service/deno.d.ts → esm/integration/deno-kv.d.ts} +1 -1
  104. package/dist/esm/integration/deno-kv.d.ts.map +1 -0
  105. package/dist/{deno/service/deno.js → esm/integration/deno-kv.js} +5 -1
  106. package/dist/esm/integration/deno-kv.js.map +1 -0
  107. package/dist/esm/integration/deno.test.d.ts +2 -0
  108. package/dist/esm/integration/deno.test.d.ts.map +1 -0
  109. package/dist/esm/integration/deno.test.js +46 -0
  110. package/dist/esm/integration/deno.test.js.map +1 -0
  111. package/dist/esm/integration/dynamodb.d.ts +13 -0
  112. package/dist/esm/integration/dynamodb.d.ts.map +1 -0
  113. package/dist/esm/integration/dynamodb.js +69 -0
  114. package/dist/esm/integration/dynamodb.js.map +1 -0
  115. package/dist/esm/integration/dynamodb.test.d.ts +2 -0
  116. package/dist/esm/integration/dynamodb.test.d.ts.map +1 -0
  117. package/dist/esm/integration/dynamodb.test.js +130 -0
  118. package/dist/esm/integration/dynamodb.test.js.map +1 -0
  119. package/dist/esm/integration/hono.d.ts +29 -0
  120. package/dist/esm/integration/hono.d.ts.map +1 -0
  121. package/dist/{deno/framework → esm/integration}/hono.js +25 -4
  122. package/dist/esm/integration/hono.js.map +1 -0
  123. package/dist/esm/integration/hono.test.d.ts +2 -0
  124. package/dist/esm/integration/hono.test.d.ts.map +1 -0
  125. package/dist/esm/integration/hono.test.js +84 -0
  126. package/dist/esm/integration/hono.test.js.map +1 -0
  127. package/dist/esm/registration.d.ts +24 -0
  128. package/dist/esm/registration.d.ts.map +1 -1
  129. package/dist/esm/registration.js +42 -3
  130. package/dist/esm/registration.js.map +1 -1
  131. package/dist/esm/registration.test.d.ts +2 -0
  132. package/dist/esm/registration.test.d.ts.map +1 -0
  133. package/dist/esm/registration.test.js +57 -0
  134. package/dist/esm/registration.test.js.map +1 -0
  135. package/dist/esm/repository.d.ts +5 -1
  136. package/dist/esm/repository.d.ts.map +1 -1
  137. package/dist/esm/repository.js +7 -1
  138. package/dist/esm/repository.js.map +1 -1
  139. package/dist/esm/repository.test.d.ts +2 -0
  140. package/dist/esm/repository.test.d.ts.map +1 -0
  141. package/dist/esm/repository.test.js +30 -0
  142. package/dist/esm/repository.test.js.map +1 -0
  143. package/dist/esm/signer.test.d.ts +2 -0
  144. package/dist/esm/signer.test.d.ts.map +1 -0
  145. package/dist/esm/signer.test.js +23 -0
  146. package/dist/esm/signer.test.js.map +1 -0
  147. package/package.json +87 -16
  148. package/dist/commonjs/framework/hono.d.ts +0 -36
  149. package/dist/commonjs/framework/hono.d.ts.map +0 -1
  150. package/dist/commonjs/framework/hono.js.map +0 -1
  151. package/dist/commonjs/service/cloudflare.d.ts.map +0 -1
  152. package/dist/commonjs/service/cloudflare.js.map +0 -1
  153. package/dist/commonjs/service/deno.d.ts.map +0 -1
  154. package/dist/commonjs/service/deno.js.map +0 -1
  155. package/dist/deno/app.d.ts +0 -31
  156. package/dist/deno/app.d.ts.map +0 -1
  157. package/dist/deno/app.js +0 -21
  158. package/dist/deno/app.js.map +0 -1
  159. package/dist/deno/context-resolver.d.ts +0 -30
  160. package/dist/deno/context-resolver.d.ts.map +0 -1
  161. package/dist/deno/context-resolver.js +0 -65
  162. package/dist/deno/context-resolver.js.map +0 -1
  163. package/dist/deno/framework/hono.d.ts +0 -36
  164. package/dist/deno/framework/hono.d.ts.map +0 -1
  165. package/dist/deno/framework/hono.js.map +0 -1
  166. package/dist/deno/helper/app-actions.d.ts +0 -13
  167. package/dist/deno/helper/app-actions.d.ts.map +0 -1
  168. package/dist/deno/helper/app-actions.js +0 -49
  169. package/dist/deno/helper/app-actions.js.map +0 -1
  170. package/dist/deno/http-client.d.ts +0 -67
  171. package/dist/deno/http-client.d.ts.map +0 -1
  172. package/dist/deno/http-client.js +0 -148
  173. package/dist/deno/http-client.js.map +0 -1
  174. package/dist/deno/mod.d.ts +0 -6
  175. package/dist/deno/mod.d.ts.map +0 -1
  176. package/dist/deno/mod.js +0 -5
  177. package/dist/deno/mod.js.map +0 -1
  178. package/dist/deno/package.json +0 -3
  179. package/dist/deno/registration.d.ts +0 -18
  180. package/dist/deno/registration.d.ts.map +0 -1
  181. package/dist/deno/registration.js +0 -84
  182. package/dist/deno/registration.js.map +0 -1
  183. package/dist/deno/repository.d.ts +0 -51
  184. package/dist/deno/repository.d.ts.map +0 -1
  185. package/dist/deno/repository.js +0 -63
  186. package/dist/deno/repository.js.map +0 -1
  187. package/dist/deno/service/cloudflare.d.ts.map +0 -1
  188. package/dist/deno/service/cloudflare.js +0 -41
  189. package/dist/deno/service/cloudflare.js.map +0 -1
  190. package/dist/deno/service/deno.d.ts +0 -18
  191. package/dist/deno/service/deno.d.ts.map +0 -1
  192. package/dist/deno/service/deno.js.map +0 -1
  193. package/dist/deno/signer.d.ts +0 -12
  194. package/dist/deno/signer.d.ts.map +0 -1
  195. package/dist/deno/signer.js +0 -54
  196. package/dist/deno/signer.js.map +0 -1
  197. package/dist/deno/types.d.ts +0 -28
  198. package/dist/deno/types.d.ts.map +0 -1
  199. package/dist/deno/types.js +0 -2
  200. package/dist/deno/types.js.map +0 -1
  201. package/dist/esm/framework/hono.d.ts +0 -36
  202. package/dist/esm/framework/hono.d.ts.map +0 -1
  203. package/dist/esm/framework/hono.js +0 -81
  204. package/dist/esm/framework/hono.js.map +0 -1
  205. package/dist/esm/service/cloudflare.d.ts +0 -43
  206. package/dist/esm/service/cloudflare.d.ts.map +0 -1
  207. package/dist/esm/service/cloudflare.js.map +0 -1
  208. package/dist/esm/service/deno.d.ts.map +0 -1
  209. package/dist/esm/service/deno.js +0 -44
  210. package/dist/esm/service/deno.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const repository_js_1 = require("../repository.js");
5
+ const deno_kv_js_1 = require("./deno-kv.js");
6
+ (0, bun_test_1.describe)("Deno", async () => {
7
+ const kv = {
8
+ storage: new Map(),
9
+ set(key, value) {
10
+ this.storage.set(key.join(""), value);
11
+ },
12
+ get(key) {
13
+ if (!this.storage.has(key.join(""))) {
14
+ return {
15
+ key: null,
16
+ value: null,
17
+ };
18
+ }
19
+ return Promise.resolve({
20
+ key: key.join(""),
21
+ value: this.storage.get(key.join("")),
22
+ });
23
+ },
24
+ delete(key) {
25
+ this.storage.delete(key.join(""));
26
+ },
27
+ };
28
+ // @ts-ignore
29
+ globalThis.Deno = {
30
+ openKv() {
31
+ return Promise.resolve(kv);
32
+ },
33
+ };
34
+ (0, bun_test_1.test)("test repository", async () => {
35
+ const repo = new deno_kv_js_1.DenoKVRepository();
36
+ await repo.createShop("test", "test", "test");
37
+ const shop = await repo.getShopById("test");
38
+ (0, bun_test_1.expect)(shop).not.toBeNull();
39
+ (0, bun_test_1.expect)(shop?.getShopId()).toBe("test");
40
+ (0, bun_test_1.expect)(shop?.getShopUrl()).toBe("test");
41
+ (0, bun_test_1.expect)(shop?.getShopSecret()).toBe("test");
42
+ await repo.deleteShop("test");
43
+ (0, bun_test_1.expect)(repo.getShopById("test")).resolves.toBeNull();
44
+ await repo.updateShop(new repository_js_1.SimpleShop("test", "test", "test"));
45
+ (0, bun_test_1.expect)(repo.getShopById("test")).resolves.not.toBeNull();
46
+ });
47
+ });
48
+ //# sourceMappingURL=deno.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deno.test.js","sourceRoot":"","sources":["../../../src/integration/deno.test.ts"],"names":[],"mappings":";;AAAA,uCAAkD;AAClD,oDAA8C;AAC9C,6CAAgD;AAEhD,IAAA,mBAAQ,EAAC,MAAM,EAAE,KAAK,IAAI,EAAE;IAC3B,MAAM,EAAE,GAAG;QACV,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,GAAG,CAAC,GAAa,EAAE,KAAa;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,GAAG,CAAC,GAAa;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACN,GAAG,EAAE,IAAI;oBACT,KAAK,EAAE,IAAI;iBACX,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC,OAAO,CAAC;gBACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACrC,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,GAAa;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;KACD,CAAC;IAEF,aAAa;IACb,UAAU,CAAC,IAAI,GAAG;QACjB,MAAM;YACL,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;KACD,CAAC;IAEF,IAAA,eAAI,EAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,IAAI,GAAG,IAAI,6BAAgB,EAAE,CAAC;QAEpC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE5B,IAAA,iBAAM,EAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAA,iBAAM,EAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAA,iBAAM,EAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE9B,IAAA,iBAAM,EAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAErD,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,0BAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAE9D,IAAA,iBAAM,EAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, test } from \"bun:test\";\nimport { SimpleShop } from \"../repository.js\";\nimport { DenoKVRepository } from \"./deno-kv.js\";\n\ndescribe(\"Deno\", async () => {\n\tconst kv = {\n\t\tstorage: new Map(),\n\t\tset(key: string[], value: string) {\n\t\t\tthis.storage.set(key.join(\"\"), value);\n\t\t},\n\n\t\tget(key: string[]) {\n\t\t\tif (!this.storage.has(key.join(\"\"))) {\n\t\t\t\treturn {\n\t\t\t\t\tkey: null,\n\t\t\t\t\tvalue: null,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn Promise.resolve({\n\t\t\t\tkey: key.join(\"\"),\n\t\t\t\tvalue: this.storage.get(key.join(\"\")),\n\t\t\t});\n\t\t},\n\n\t\tdelete(key: string[]) {\n\t\t\tthis.storage.delete(key.join(\"\"));\n\t\t},\n\t};\n\n\t// @ts-ignore\n\tglobalThis.Deno = {\n\t\topenKv() {\n\t\t\treturn Promise.resolve(kv);\n\t\t},\n\t};\n\n\ttest(\"test repository\", async () => {\n\t\tconst repo = new DenoKVRepository();\n\n\t\tawait repo.createShop(\"test\", \"test\", \"test\");\n\n\t\tconst shop = await repo.getShopById(\"test\");\n\n\t\texpect(shop).not.toBeNull();\n\n\t\texpect(shop?.getShopId()).toBe(\"test\");\n\t\texpect(shop?.getShopUrl()).toBe(\"test\");\n\t\texpect(shop?.getShopSecret()).toBe(\"test\");\n\n\t\tawait repo.deleteShop(\"test\");\n\n\t\texpect(repo.getShopById(\"test\")).resolves.toBeNull();\n\n\t\tawait repo.updateShop(new SimpleShop(\"test\", \"test\", \"test\"));\n\n\t\texpect(repo.getShopById(\"test\")).resolves.not.toBeNull();\n\t});\n});\n"]}
@@ -0,0 +1,13 @@
1
+ import type { DynamoDBClient } from "@aws-sdk/client-dynamodb";
2
+ import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
3
+ import { type ShopRepositoryInterface, SimpleShop } from "../repository.js";
4
+ export declare class DynamoDBRepository implements ShopRepositoryInterface<SimpleShop> {
5
+ docClient: DynamoDBDocumentClient;
6
+ tableName: string;
7
+ constructor(client: DynamoDBClient, tableName: string);
8
+ createShop(id: string, url: string, secret: string): Promise<void>;
9
+ getShopById(id: string): Promise<SimpleShop | null>;
10
+ updateShop(shop: SimpleShop): Promise<void>;
11
+ deleteShop(id: string): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=dynamodb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamodb.d.ts","sourceRoot":"","sources":["../../../src/integration/dynamodb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAEN,sBAAsB,EAGtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,uBAAuB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5E,qBAAa,kBAAmB,YAAW,uBAAuB,CAAC,UAAU,CAAC;IAC7E,SAAS,EAAE,sBAAsB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;gBAEN,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;IAK/C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAoCnD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAU3C"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamoDBRepository = void 0;
4
+ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
+ const repository_js_1 = require("../repository.js");
6
+ class DynamoDBRepository {
7
+ docClient;
8
+ tableName;
9
+ constructor(client, tableName) {
10
+ this.tableName = tableName;
11
+ this.docClient = lib_dynamodb_1.DynamoDBDocumentClient.from(client);
12
+ }
13
+ async createShop(id, url, secret) {
14
+ const cmd = new lib_dynamodb_1.PutCommand({
15
+ TableName: this.tableName,
16
+ Item: {
17
+ id: id,
18
+ active: true,
19
+ url: url,
20
+ secret: secret,
21
+ clientId: null,
22
+ clientSecret: null,
23
+ },
24
+ });
25
+ await this.docClient.send(cmd);
26
+ }
27
+ async getShopById(id) {
28
+ const cmd = new lib_dynamodb_1.GetCommand({
29
+ TableName: this.tableName,
30
+ Key: {
31
+ id: id,
32
+ },
33
+ });
34
+ const response = await this.docClient.send(cmd);
35
+ if (!response.Item) {
36
+ return null;
37
+ }
38
+ const shop = new repository_js_1.SimpleShop(response.Item.id, response.Item.url, response.Item.secret);
39
+ if (response.Item.active === undefined) {
40
+ response.Item.active = true;
41
+ }
42
+ shop.setShopActive(response.Item.active);
43
+ if (response.Item.clientId) {
44
+ shop.setShopCredentials(response.Item.clientId, response.Item.clientSecret);
45
+ }
46
+ return shop;
47
+ }
48
+ async updateShop(shop) {
49
+ const cmd = new lib_dynamodb_1.PutCommand({
50
+ TableName: this.tableName,
51
+ Item: {
52
+ id: shop.getShopId(),
53
+ active: shop.getShopActive(),
54
+ url: shop.getShopUrl(),
55
+ secret: shop.getShopSecret(),
56
+ clientId: shop.getShopClientId(),
57
+ clientSecret: shop.getShopClientSecret(),
58
+ },
59
+ });
60
+ await this.docClient.send(cmd);
61
+ }
62
+ async deleteShop(id) {
63
+ const cmd = new lib_dynamodb_1.DeleteCommand({
64
+ TableName: this.tableName,
65
+ Key: {
66
+ id: id,
67
+ },
68
+ });
69
+ await this.docClient.send(cmd);
70
+ }
71
+ }
72
+ exports.DynamoDBRepository = DynamoDBRepository;
73
+ //# sourceMappingURL=dynamodb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamodb.js","sourceRoot":"","sources":["../../../src/integration/dynamodb.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DynamoDBClient } from \"@aws-sdk/client-dynamodb\";\nimport {\n\tDeleteCommand,\n\tDynamoDBDocumentClient,\n\tGetCommand,\n\tPutCommand,\n} from \"@aws-sdk/lib-dynamodb\";\nimport { type ShopRepositoryInterface, SimpleShop } from \"../repository.js\";\n\nexport class DynamoDBRepository implements ShopRepositoryInterface<SimpleShop> {\n\tdocClient: DynamoDBDocumentClient;\n\ttableName: string;\n\n\tconstructor(client: DynamoDBClient, tableName: string) {\n\t\tthis.tableName = tableName;\n\t\tthis.docClient = DynamoDBDocumentClient.from(client);\n\t}\n\n\tasync createShop(id: string, url: string, secret: string): Promise<void> {\n\t\tconst cmd = new PutCommand({\n\t\t\tTableName: this.tableName,\n\t\t\tItem: {\n\t\t\t\tid: id,\n\t\t\t\tactive: true,\n\t\t\t\turl: url,\n\t\t\t\tsecret: secret,\n\t\t\t\tclientId: null,\n\t\t\t\tclientSecret: null,\n\t\t\t},\n\t\t});\n\n\t\tawait this.docClient.send(cmd);\n\t}\n\n\tasync getShopById(id: string): Promise<SimpleShop | null> {\n\t\tconst cmd = new GetCommand({\n\t\t\tTableName: this.tableName,\n\t\t\tKey: {\n\t\t\t\tid: id,\n\t\t\t},\n\t\t});\n\n\t\tconst response = await this.docClient.send(cmd);\n\n\t\tif (!response.Item) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst shop = new SimpleShop(\n\t\t\tresponse.Item.id,\n\t\t\tresponse.Item.url,\n\t\t\tresponse.Item.secret,\n\t\t);\n\n\t\tif (response.Item.active === undefined) {\n\t\t\tresponse.Item.active = true;\n\t\t}\n\n\t\tshop.setShopActive(response.Item.active);\n\n\t\tif (response.Item.clientId) {\n\t\t\tshop.setShopCredentials(\n\t\t\t\tresponse.Item.clientId,\n\t\t\t\tresponse.Item.clientSecret,\n\t\t\t);\n\t\t}\n\n\t\treturn shop;\n\t}\n\n\tasync updateShop(shop: SimpleShop): Promise<void> {\n\t\tconst cmd = new PutCommand({\n\t\t\tTableName: this.tableName,\n\t\t\tItem: {\n\t\t\t\tid: shop.getShopId(),\n\t\t\t\tactive: shop.getShopActive(),\n\t\t\t\turl: shop.getShopUrl(),\n\t\t\t\tsecret: shop.getShopSecret(),\n\t\t\t\tclientId: shop.getShopClientId(),\n\t\t\t\tclientSecret: shop.getShopClientSecret(),\n\t\t\t},\n\t\t});\n\n\t\tawait this.docClient.send(cmd);\n\t}\n\n\tasync deleteShop(id: string): Promise<void> {\n\t\tconst cmd = new DeleteCommand({\n\t\t\tTableName: this.tableName,\n\t\t\tKey: {\n\t\t\t\tid: id,\n\t\t\t},\n\t\t});\n\n\t\tawait this.docClient.send(cmd);\n\t}\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dynamodb.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamodb.test.d.ts","sourceRoot":"","sources":["../../../src/integration/dynamodb.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const dynamodb_js_1 = require("./dynamodb.js");
5
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
6
+ const repository_js_1 = require("../repository.js");
7
+ (0, bun_test_1.describe)("DynamoDB", async () => {
8
+ (0, bun_test_1.test)("getShopById does not exists", async () => {
9
+ bun_test_1.mock.module("@aws-sdk/lib-dynamodb", () => {
10
+ return {
11
+ DynamoDBDocumentClient: {
12
+ from() {
13
+ return {
14
+ async send() {
15
+ return {};
16
+ },
17
+ };
18
+ },
19
+ },
20
+ };
21
+ });
22
+ const repo = new dynamodb_js_1.DynamoDBRepository(new client_dynamodb_1.DynamoDBClient(), "foo");
23
+ (0, bun_test_1.expect)(repo.getShopById("test")).resolves.toBeNull();
24
+ });
25
+ (0, bun_test_1.test)("getShopById exists", async () => {
26
+ bun_test_1.mock.module("@aws-sdk/lib-dynamodb", () => {
27
+ return {
28
+ DynamoDBDocumentClient: {
29
+ from() {
30
+ return {
31
+ async send() {
32
+ return {
33
+ Item: {
34
+ id: "a",
35
+ url: "b",
36
+ secret: "c",
37
+ },
38
+ };
39
+ },
40
+ };
41
+ },
42
+ },
43
+ };
44
+ });
45
+ const repo = new dynamodb_js_1.DynamoDBRepository(new client_dynamodb_1.DynamoDBClient(), "foo");
46
+ (0, bun_test_1.expect)(repo.getShopById("test")).resolves.not.toBeNull();
47
+ });
48
+ (0, bun_test_1.test)("createShop", async () => {
49
+ let cmd;
50
+ bun_test_1.mock.module("@aws-sdk/lib-dynamodb", () => {
51
+ return {
52
+ DynamoDBDocumentClient: {
53
+ from() {
54
+ return {
55
+ async send(inner) {
56
+ cmd = inner;
57
+ return {};
58
+ },
59
+ };
60
+ },
61
+ },
62
+ };
63
+ });
64
+ const repo = new dynamodb_js_1.DynamoDBRepository(new client_dynamodb_1.DynamoDBClient(), "foo");
65
+ await repo.createShop("a", "b", "c");
66
+ // @ts-expect-error
67
+ (0, bun_test_1.expect)(cmd).toBeDefined();
68
+ // @ts-expect-error
69
+ (0, bun_test_1.expect)(cmd.input.Item).toEqual({
70
+ id: "a",
71
+ active: true,
72
+ url: "b",
73
+ secret: "c",
74
+ clientId: null,
75
+ clientSecret: null,
76
+ });
77
+ });
78
+ (0, bun_test_1.test)("updateShop", async () => {
79
+ let cmd;
80
+ bun_test_1.mock.module("@aws-sdk/lib-dynamodb", () => {
81
+ return {
82
+ DynamoDBDocumentClient: {
83
+ from() {
84
+ return {
85
+ async send(inner) {
86
+ cmd = inner;
87
+ return {};
88
+ },
89
+ };
90
+ },
91
+ },
92
+ };
93
+ });
94
+ const repo = new dynamodb_js_1.DynamoDBRepository(new client_dynamodb_1.DynamoDBClient(), "foo");
95
+ await repo.updateShop(new repository_js_1.SimpleShop("a", "b", "c"));
96
+ // @ts-expect-error
97
+ (0, bun_test_1.expect)(cmd).toBeDefined();
98
+ // @ts-expect-error
99
+ (0, bun_test_1.expect)(cmd.input.Item).toEqual({
100
+ id: "a",
101
+ active: true,
102
+ url: "b",
103
+ secret: "c",
104
+ clientId: null,
105
+ clientSecret: null,
106
+ });
107
+ });
108
+ (0, bun_test_1.test)("deleteShop", async () => {
109
+ let cmd;
110
+ bun_test_1.mock.module("@aws-sdk/lib-dynamodb", () => {
111
+ return {
112
+ DynamoDBDocumentClient: {
113
+ from() {
114
+ return {
115
+ async send(inner) {
116
+ cmd = inner;
117
+ return {};
118
+ },
119
+ };
120
+ },
121
+ },
122
+ };
123
+ });
124
+ const repo = new dynamodb_js_1.DynamoDBRepository(new client_dynamodb_1.DynamoDBClient(), "foo");
125
+ await repo.deleteShop("a");
126
+ // @ts-expect-error
127
+ (0, bun_test_1.expect)(cmd).toBeDefined();
128
+ // @ts-expect-error
129
+ (0, bun_test_1.expect)(cmd.input.Key).toEqual({ id: "a" });
130
+ });
131
+ });
132
+ //# sourceMappingURL=dynamodb.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamodb.test.js","sourceRoot":"","sources":["../../../src/integration/dynamodb.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, mock, test } from \"bun:test\";\nimport { DynamoDBRepository } from \"./dynamodb.js\";\n\nimport { DynamoDBClient } from \"@aws-sdk/client-dynamodb\";\nimport type { DeleteCommand, PutCommand } from \"@aws-sdk/lib-dynamodb\";\nimport { SimpleShop } from \"../repository.js\";\n\ndescribe(\"DynamoDB\", async () => {\n\ttest(\"getShopById does not exists\", async () => {\n\t\tmock.module(\"@aws-sdk/lib-dynamodb\", () => {\n\t\t\treturn {\n\t\t\t\tDynamoDBDocumentClient: {\n\t\t\t\t\tfrom() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync send() {\n\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\tconst repo = new DynamoDBRepository(new DynamoDBClient(), \"foo\");\n\n\t\texpect(repo.getShopById(\"test\")).resolves.toBeNull();\n\t});\n\n\ttest(\"getShopById exists\", async () => {\n\t\tmock.module(\"@aws-sdk/lib-dynamodb\", () => {\n\t\t\treturn {\n\t\t\t\tDynamoDBDocumentClient: {\n\t\t\t\t\tfrom() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync send() {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tItem: {\n\t\t\t\t\t\t\t\t\t\tid: \"a\",\n\t\t\t\t\t\t\t\t\t\turl: \"b\",\n\t\t\t\t\t\t\t\t\t\tsecret: \"c\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\tconst repo = new DynamoDBRepository(new DynamoDBClient(), \"foo\");\n\n\t\texpect(repo.getShopById(\"test\")).resolves.not.toBeNull();\n\t});\n\n\ttest(\"createShop\", async () => {\n\t\tlet cmd: PutCommand;\n\n\t\tmock.module(\"@aws-sdk/lib-dynamodb\", () => {\n\t\t\treturn {\n\t\t\t\tDynamoDBDocumentClient: {\n\t\t\t\t\tfrom() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync send(inner: PutCommand) {\n\t\t\t\t\t\t\t\tcmd = inner;\n\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\tconst repo = new DynamoDBRepository(new DynamoDBClient(), \"foo\");\n\n\t\tawait repo.createShop(\"a\", \"b\", \"c\");\n\n\t\t// @ts-expect-error\n\t\texpect(cmd).toBeDefined();\n\t\t// @ts-expect-error\n\t\texpect(cmd.input.Item).toEqual({\n\t\t\tid: \"a\",\n\t\t\tactive: true,\n\t\t\turl: \"b\",\n\t\t\tsecret: \"c\",\n\t\t\tclientId: null,\n\t\t\tclientSecret: null,\n\t\t});\n\t});\n\n\ttest(\"updateShop\", async () => {\n\t\tlet cmd: PutCommand;\n\n\t\tmock.module(\"@aws-sdk/lib-dynamodb\", () => {\n\t\t\treturn {\n\t\t\t\tDynamoDBDocumentClient: {\n\t\t\t\t\tfrom() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync send(inner: PutCommand) {\n\t\t\t\t\t\t\t\tcmd = inner;\n\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\tconst repo = new DynamoDBRepository(new DynamoDBClient(), \"foo\");\n\n\t\tawait repo.updateShop(new SimpleShop(\"a\", \"b\", \"c\"));\n\n\t\t// @ts-expect-error\n\t\texpect(cmd).toBeDefined();\n\t\t// @ts-expect-error\n\t\texpect(cmd.input.Item).toEqual({\n\t\t\tid: \"a\",\n\t\t\tactive: true,\n\t\t\turl: \"b\",\n\t\t\tsecret: \"c\",\n\t\t\tclientId: null,\n\t\t\tclientSecret: null,\n\t\t});\n\t});\n\n\ttest(\"deleteShop\", async () => {\n\t\tlet cmd: DeleteCommand;\n\n\t\tmock.module(\"@aws-sdk/lib-dynamodb\", () => {\n\t\t\treturn {\n\t\t\t\tDynamoDBDocumentClient: {\n\t\t\t\t\tfrom() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync send(inner: DeleteCommand) {\n\t\t\t\t\t\t\t\tcmd = inner;\n\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\tconst repo = new DynamoDBRepository(new DynamoDBClient(), \"foo\");\n\n\t\tawait repo.deleteShop(\"a\");\n\n\t\t// @ts-expect-error\n\t\texpect(cmd).toBeDefined();\n\t\t// @ts-expect-error\n\t\texpect(cmd.input.Key).toEqual({ id: \"a\" });\n\t});\n});\n"]}
@@ -0,0 +1,29 @@
1
+ import { AppServer } from "../app.js";
2
+ import type { Context } from "../context-resolver.js";
3
+ import type { ShopInterface, ShopRepositoryInterface } from "../repository.js";
4
+ import type { Hono, Context as HonoContext } from "hono";
5
+ declare module "hono" {
6
+ interface ContextVariableMap {
7
+ app: AppServer<ShopInterface>;
8
+ shop: ShopInterface;
9
+ context: Context<ShopInterface, unknown>;
10
+ }
11
+ }
12
+ interface MiddlewareConfig {
13
+ appName: string | ((c: HonoContext) => string);
14
+ appSecret: string | ((c: HonoContext) => string);
15
+ appUrl?: string | null;
16
+ registrationUrl?: string | null;
17
+ registerConfirmationUrl?: string | null;
18
+ appActivateUrl?: string | null;
19
+ appDeactivateUrl?: string | null;
20
+ appDeleteUrl?: string | null;
21
+ appPath?: string | null;
22
+ shopRepository: ShopRepositoryInterface | ((c: HonoContext) => ShopRepositoryInterface);
23
+ }
24
+ /**
25
+ * Configure the Hono server to handle the app registration and context resolution
26
+ */
27
+ export declare function configureAppServer(hono: Hono, cfg: MiddlewareConfig): void;
28
+ export {};
29
+ //# sourceMappingURL=hono.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../../src/integration/hono.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AAEzD,OAAO,QAAQ,MAAM,CAAC;IACrB,UAAU,kBAAkB;QAE3B,GAAG,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAC9B,IAAI,EAAE,aAAa,CAAC;QAEpB,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;KACzC;CACD;AAED,UAAU,gBAAgB;IACzB,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC;IAC/C,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EACX,uBAAuB,GACvB,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,uBAAuB,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,QAqHnE"}
@@ -2,15 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.configureAppServer = configureAppServer;
4
4
  const app_js_1 = require("../app.js");
5
- let app = null;
6
5
  /**
7
6
  * Configure the Hono server to handle the app registration and context resolution
8
7
  */
9
- function configureAppServer(honoExternal, cfg) {
10
- const hono = honoExternal;
8
+ function configureAppServer(hono, cfg) {
9
+ let app = null;
11
10
  cfg.registrationUrl = cfg.registrationUrl || "/app/register";
12
11
  cfg.registerConfirmationUrl =
13
12
  cfg.registerConfirmationUrl || "/app/register/confirm";
13
+ cfg.appActivateUrl = cfg.appActivateUrl || "/app/activate";
14
+ cfg.appDeactivateUrl = cfg.appDeactivateUrl || "/app/deactivate";
15
+ cfg.appDeleteUrl = cfg.appDeleteUrl || "/app/delete";
14
16
  cfg.appPath = cfg.appPath || "/app/*";
15
17
  hono.use("*", async (ctx, next) => {
16
18
  if (app === null) {
@@ -30,14 +32,19 @@ function configureAppServer(honoExternal, cfg) {
30
32
  authorizeCallbackUrl: appUrl + cfg.registerConfirmationUrl,
31
33
  }, cfg.shopRepository);
32
34
  }
35
+ // @ts-ignore
33
36
  ctx.set("app", app);
34
37
  await next();
35
38
  });
36
39
  hono.use(cfg.appPath, async (ctx, next) => {
40
+ // @ts-ignore
37
41
  const app = ctx.get("app");
38
42
  // Don't validate signature for registration
39
43
  if (ctx.req.path === cfg.registrationUrl ||
40
- ctx.req.path === cfg.registerConfirmationUrl) {
44
+ ctx.req.path === cfg.registerConfirmationUrl ||
45
+ ctx.req.path === cfg.appActivateUrl ||
46
+ ctx.req.path === cfg.appDeactivateUrl ||
47
+ ctx.req.path === cfg.appDeleteUrl) {
41
48
  await next();
42
49
  return;
43
50
  }
@@ -51,7 +58,9 @@ function configureAppServer(honoExternal, cfg) {
51
58
  catch (_e) {
52
59
  return jsonResponse({ message: "Invalid request" }, 400);
53
60
  }
61
+ // @ts-ignore
54
62
  ctx.set("shop", context.shop);
63
+ // @ts-ignore
55
64
  ctx.set("context", context);
56
65
  await next();
57
66
  const cloned = ctx.res.clone();
@@ -68,6 +77,18 @@ function configureAppServer(honoExternal, cfg) {
68
77
  const app = ctx.get("app");
69
78
  return await app.registration.authorizeCallback(ctx.req.raw);
70
79
  });
80
+ hono.post(cfg.appActivateUrl, async (ctx) => {
81
+ const app = ctx.get("app");
82
+ return await app.registration.activate(ctx.req.raw);
83
+ });
84
+ hono.post(cfg.appDeactivateUrl, async (ctx) => {
85
+ const app = ctx.get("app");
86
+ return await app.registration.deactivate(ctx.req.raw);
87
+ });
88
+ hono.post(cfg.appDeleteUrl, async (ctx) => {
89
+ const app = ctx.get("app");
90
+ return await app.registration.delete(ctx.req.raw);
91
+ });
71
92
  }
72
93
  function jsonResponse(body, status = 200) {
73
94
  return new Response(JSON.stringify(body), {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.js","sourceRoot":"","sources":["../../../src/integration/hono.ts"],"names":[],"mappings":";;AAkCA,gDAqHC;AAvJD,sCAAsC;AA+BtC;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAU,EAAE,GAAqB;IACnE,IAAI,GAAG,GAAqB,IAAI,CAAC;IAEjC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC;IAC7D,GAAG,CAAC,uBAAuB;QAC1B,GAAG,CAAC,uBAAuB,IAAI,uBAAuB,CAAC;IACxD,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,IAAI,eAAe,CAAC;IAC3D,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,IAAI,iBAAiB,CAAC;IACjE,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC;IACrD,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEvD,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;gBAC9C,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACvC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBACzC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;YAED,GAAG,GAAG,IAAI,kBAAS,CAClB;gBACC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,oBAAoB,EAAE,MAAM,GAAG,GAAG,CAAC,uBAAuB;aAC1D,EACD,GAAG,CAAC,cAAc,CAClB,CAAC;QACH,CAAC;QAED,aAAa;QACb,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEpB,MAAM,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzC,aAAa;QACb,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAc,CAAC;QAExC,4CAA4C;QAC5C,IACC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,eAAe;YACpC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,uBAAuB;YAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,cAAc;YACnC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,gBAAgB;YACrC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,YAAY,EAChC,CAAC;YACF,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACR,CAAC;QAED,IAAI,OAAwC,CAAC;QAC7C,IAAI,CAAC;YACJ,OAAO;gBACN,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK;oBACvB,CAAC,CAAC,MAAM,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;oBACpD,CAAC,CAAC,MAAM,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACb,OAAO,YAAY,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,aAAa;QACb,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,aAAa;QACb,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE5B,MAAM,IAAI,EAAE,CAAC;QAEb,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAE/B,MAAM,GAAG;aACP,GAAG,CAAC,KAAK,CAAC;aACV,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAE/D,GAAG,CAAC,MAAM,CACT,wBAAwB,EACxB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAW,CACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,OAAO,MAAM,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACpD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,OAAO,MAAM,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,OAAO,MAAM,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,OAAO,MAAM,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,OAAO,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAAM,GAAG,GAAG;IAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACzC,MAAM;QACN,OAAO,EAAE;YACR,cAAc,EAAE,kBAAkB;SAClC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAChC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAEvB,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC","sourcesContent":["import { AppServer } from \"../app.js\";\nimport type { Context } from \"../context-resolver.js\";\nimport type { ShopInterface, ShopRepositoryInterface } from \"../repository.js\";\n\nimport type { Hono, Context as HonoContext } from \"hono\";\n\ndeclare module \"hono\" {\n\tinterface ContextVariableMap {\n\t\t// @ts-ignore\n\t\tapp: AppServer<ShopInterface>;\n\t\tshop: ShopInterface;\n\t\t// @ts-ignore\n\t\tcontext: Context<ShopInterface, unknown>;\n\t}\n}\n\ninterface MiddlewareConfig {\n\tappName: string | ((c: HonoContext) => string);\n\tappSecret: string | ((c: HonoContext) => string);\n\tappUrl?: string | null;\n\tregistrationUrl?: string | null;\n\tregisterConfirmationUrl?: string | null;\n\tappActivateUrl?: string | null;\n\tappDeactivateUrl?: string | null;\n\tappDeleteUrl?: string | null;\n\tappPath?: string | null;\n\tshopRepository:\n\t\t| ShopRepositoryInterface\n\t\t| ((c: HonoContext) => ShopRepositoryInterface);\n}\n\n/**\n * Configure the Hono server to handle the app registration and context resolution\n */\nexport function configureAppServer(hono: Hono, cfg: MiddlewareConfig) {\n\tlet app: AppServer | null = null;\n\n\tcfg.registrationUrl = cfg.registrationUrl || \"/app/register\";\n\tcfg.registerConfirmationUrl =\n\t\tcfg.registerConfirmationUrl || \"/app/register/confirm\";\n\tcfg.appActivateUrl = cfg.appActivateUrl || \"/app/activate\";\n\tcfg.appDeactivateUrl = cfg.appDeactivateUrl || \"/app/deactivate\";\n\tcfg.appDeleteUrl = cfg.appDeleteUrl || \"/app/delete\";\n\tcfg.appPath = cfg.appPath || \"/app/*\";\n\n\thono.use(\"*\", async (ctx, next) => {\n\t\tif (app === null) {\n\t\t\tconst appUrl = cfg.appUrl || buildBaseUrl(ctx.req.url);\n\n\t\t\tif (typeof cfg.shopRepository === \"function\") {\n\t\t\t\tcfg.shopRepository = cfg.shopRepository(ctx);\n\t\t\t}\n\n\t\t\tif (typeof cfg.appName === \"function\") {\n\t\t\t\tcfg.appName = cfg.appName(ctx);\n\t\t\t}\n\n\t\t\tif (typeof cfg.appSecret === \"function\") {\n\t\t\t\tcfg.appSecret = cfg.appSecret(ctx);\n\t\t\t}\n\n\t\t\tapp = new AppServer(\n\t\t\t\t{\n\t\t\t\t\tappName: cfg.appName,\n\t\t\t\t\tappSecret: cfg.appSecret,\n\t\t\t\t\tauthorizeCallbackUrl: appUrl + cfg.registerConfirmationUrl,\n\t\t\t\t},\n\t\t\t\tcfg.shopRepository,\n\t\t\t);\n\t\t}\n\n\t\t// @ts-ignore\n\t\tctx.set(\"app\", app);\n\n\t\tawait next();\n\t});\n\n\thono.use(cfg.appPath, async (ctx, next) => {\n\t\t// @ts-ignore\n\t\tconst app = ctx.get(\"app\") as AppServer;\n\n\t\t// Don't validate signature for registration\n\t\tif (\n\t\t\tctx.req.path === cfg.registrationUrl ||\n\t\t\tctx.req.path === cfg.registerConfirmationUrl ||\n\t\t\tctx.req.path === cfg.appActivateUrl ||\n\t\t\tctx.req.path === cfg.appDeactivateUrl ||\n\t\t\tctx.req.path === cfg.appDeleteUrl\n\t\t) {\n\t\t\tawait next();\n\t\t\treturn;\n\t\t}\n\n\t\tlet context: Context<ShopInterface, unknown>;\n\t\ttry {\n\t\t\tcontext =\n\t\t\t\tctx.req.method === \"GET\"\n\t\t\t\t\t? await app.contextResolver.fromBrowser(ctx.req.raw)\n\t\t\t\t\t: await app.contextResolver.fromAPI(ctx.req.raw);\n\t\t} catch (_e) {\n\t\t\treturn jsonResponse({ message: \"Invalid request\" }, 400);\n\t\t}\n\n\t\t// @ts-ignore\n\t\tctx.set(\"shop\", context.shop);\n\t\t// @ts-ignore\n\t\tctx.set(\"context\", context);\n\n\t\tawait next();\n\n\t\tconst cloned = ctx.res.clone();\n\n\t\tawait ctx\n\t\t\t.get(\"app\")\n\t\t\t.signer.signResponse(cloned, ctx.get(\"shop\").getShopSecret());\n\n\t\tctx.header(\n\t\t\t\"shopware-app-signature\",\n\t\t\tcloned.headers.get(\"shopware-app-signature\") as string,\n\t\t);\n\t});\n\n\thono.get(cfg.registrationUrl, async (ctx) => {\n\t\tconst app = ctx.get(\"app\");\n\n\t\treturn await app.registration.authorize(ctx.req.raw);\n\t});\n\n\thono.post(cfg.registerConfirmationUrl, async (ctx) => {\n\t\tconst app = ctx.get(\"app\");\n\n\t\treturn await app.registration.authorizeCallback(ctx.req.raw);\n\t});\n\n\thono.post(cfg.appActivateUrl, async (ctx) => {\n\t\tconst app = ctx.get(\"app\");\n\n\t\treturn await app.registration.activate(ctx.req.raw);\n\t});\n\n\thono.post(cfg.appDeactivateUrl, async (ctx) => {\n\t\tconst app = ctx.get(\"app\");\n\n\t\treturn await app.registration.deactivate(ctx.req.raw);\n\t});\n\n\thono.post(cfg.appDeleteUrl, async (ctx) => {\n\t\tconst app = ctx.get(\"app\");\n\n\t\treturn await app.registration.delete(ctx.req.raw);\n\t});\n}\n\nfunction jsonResponse(body: object, status = 200): Response {\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus,\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t},\n\t});\n}\n\nfunction buildBaseUrl(url: string): string {\n\tconst u = new URL(url);\n\n\treturn `${u.protocol}//${u.host}`;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hono.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.test.d.ts","sourceRoot":"","sources":["../../../src/integration/hono.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const hono_1 = require("hono");
5
+ const repository_js_1 = require("../repository.js");
6
+ const hono_js_1 = require("./hono.js");
7
+ (0, bun_test_1.describe)("Hono", async () => {
8
+ const repo = new repository_js_1.InMemoryShopRepository();
9
+ await repo.createShop("a", "a", "a");
10
+ (0, bun_test_1.test)("configre by functions", async () => {
11
+ const hono = new hono_1.Hono();
12
+ (0, hono_js_1.configureAppServer)(hono, {
13
+ appName: () => "test",
14
+ appSecret: () => "test",
15
+ shopRepository: () => repo,
16
+ });
17
+ const resp = await hono.fetch(new Request("http://localhost/app/register"));
18
+ (0, bun_test_1.expect)(resp.status).toBe(400);
19
+ });
20
+ (0, bun_test_1.test)("register", async () => {
21
+ const hono = new hono_1.Hono();
22
+ (0, hono_js_1.configureAppServer)(hono, {
23
+ appName: "test",
24
+ appSecret: "test",
25
+ shopRepository: repo,
26
+ });
27
+ const resp = await hono.fetch(new Request("http://localhost/app/register"));
28
+ (0, bun_test_1.expect)(resp.status).toBe(400);
29
+ });
30
+ (0, bun_test_1.test)("register: success", async () => {
31
+ const hono = new hono_1.Hono();
32
+ (0, hono_js_1.configureAppServer)(hono, {
33
+ appName: "My App",
34
+ appSecret: "my-secret",
35
+ shopRepository: repo,
36
+ });
37
+ const resp = await hono.fetch(new Request("http://localhost/app/register?shop-id=123&shop-url=https://my-shop.com&timestamp=1234567890", {
38
+ headers: new Headers({
39
+ "shopware-app-signature": "96c91f86c822e11444b7a57b54ef125ed86b1a639c5360d45c5397daa8c3f70b",
40
+ }),
41
+ }));
42
+ (0, bun_test_1.expect)(resp.status).toBe(200);
43
+ const body = (await resp.json());
44
+ (0, bun_test_1.expect)(body).toBeObject();
45
+ (0, bun_test_1.expect)(body.proof).not.toBeNull();
46
+ });
47
+ (0, bun_test_1.test)("registerConfirm", async () => {
48
+ const hono = new hono_1.Hono();
49
+ (0, hono_js_1.configureAppServer)(hono, {
50
+ appName: "test",
51
+ appSecret: "test",
52
+ shopRepository: repo,
53
+ });
54
+ const resp = await hono.fetch(new Request("http://localhost/app/register/confirm", {
55
+ method: "POST",
56
+ body: "{}",
57
+ }));
58
+ (0, bun_test_1.expect)(resp.status).toBe(400);
59
+ });
60
+ (0, bun_test_1.test)("signature failure", async () => {
61
+ const hono = new hono_1.Hono();
62
+ (0, hono_js_1.configureAppServer)(hono, {
63
+ appName: "test",
64
+ appSecret: "test",
65
+ shopRepository: repo,
66
+ });
67
+ hono.get("/app/test", (c) => c.text("ok"));
68
+ const resp = await hono.fetch(new Request("http://localhost/app/test?shopware-shop-signature=invalid&shop-id=a"));
69
+ (0, bun_test_1.expect)(resp.status).toBe(400);
70
+ (0, bun_test_1.expect)(await resp.text()).toBe('{"message":"Invalid request"}');
71
+ });
72
+ (0, bun_test_1.test)("signature success", async () => {
73
+ const hono = new hono_1.Hono();
74
+ (0, hono_js_1.configureAppServer)(hono, {
75
+ appName: "test",
76
+ appSecret: "test",
77
+ shopRepository: repo,
78
+ });
79
+ hono.get("/app/test", (c) => c.text("ok"));
80
+ const resp = await hono.fetch(new Request("http://localhost/app/test?shopware-shop-signature=8b523d99aeef5b456288fcec48236c3367a914c6b2c9fded63d81257ac019b25&shop-id=a"));
81
+ (0, bun_test_1.expect)(resp.status).toBe(200);
82
+ (0, bun_test_1.expect)(await resp.text()).toBe("ok");
83
+ (0, bun_test_1.expect)(resp.headers.get("shopware-app-signature")).toBe("4a43a105ccce57e8e38d4a1f7b3565d743b1e15fb1fec36f41fdf20164fa1c8b");
84
+ });
85
+ });
86
+ //# sourceMappingURL=hono.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.test.js","sourceRoot":"","sources":["../../../src/integration/hono.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, test } from \"bun:test\";\nimport { Hono } from \"hono\";\nimport { InMemoryShopRepository } from \"../repository.js\";\nimport { configureAppServer } from \"./hono.js\";\n\ndescribe(\"Hono\", async () => {\n\tconst repo = new InMemoryShopRepository();\n\n\tawait repo.createShop(\"a\", \"a\", \"a\");\n\n\ttest(\"configre by functions\", async () => {\n\t\tconst hono = new Hono();\n\n\t\tconfigureAppServer(hono, {\n\t\t\tappName: () => \"test\",\n\t\t\tappSecret: () => \"test\",\n\t\t\tshopRepository: () => repo,\n\t\t});\n\n\t\tconst resp = await hono.fetch(new Request(\"http://localhost/app/register\"));\n\n\t\texpect(resp.status).toBe(400);\n\t});\n\n\ttest(\"register\", async () => {\n\t\tconst hono = new Hono();\n\n\t\tconfigureAppServer(hono, {\n\t\t\tappName: \"test\",\n\t\t\tappSecret: \"test\",\n\t\t\tshopRepository: repo,\n\t\t});\n\n\t\tconst resp = await hono.fetch(new Request(\"http://localhost/app/register\"));\n\n\t\texpect(resp.status).toBe(400);\n\t});\n\n\ttest(\"register: success\", async () => {\n\t\tconst hono = new Hono();\n\n\t\tconfigureAppServer(hono, {\n\t\t\tappName: \"My App\",\n\t\t\tappSecret: \"my-secret\",\n\t\t\tshopRepository: repo,\n\t\t});\n\n\t\tconst resp = await hono.fetch(\n\t\t\tnew Request(\n\t\t\t\t\"http://localhost/app/register?shop-id=123&shop-url=https://my-shop.com&timestamp=1234567890\",\n\t\t\t\t{\n\t\t\t\t\theaders: new Headers({\n\t\t\t\t\t\t\"shopware-app-signature\":\n\t\t\t\t\t\t\t\"96c91f86c822e11444b7a57b54ef125ed86b1a639c5360d45c5397daa8c3f70b\",\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\n\t\texpect(resp.status).toBe(200);\n\n\t\tconst body = (await resp.json()) as { proof: string };\n\n\t\texpect(body).toBeObject();\n\n\t\texpect(body.proof).not.toBeNull();\n\t});\n\n\ttest(\"registerConfirm\", async () => {\n\t\tconst hono = new Hono();\n\n\t\tconfigureAppServer(hono, {\n\t\t\tappName: \"test\",\n\t\t\tappSecret: \"test\",\n\t\t\tshopRepository: repo,\n\t\t});\n\n\t\tconst resp = await hono.fetch(\n\t\t\tnew Request(\"http://localhost/app/register/confirm\", {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: \"{}\",\n\t\t\t}),\n\t\t);\n\n\t\texpect(resp.status).toBe(400);\n\t});\n\n\ttest(\"signature failure\", async () => {\n\t\tconst hono = new Hono();\n\n\t\tconfigureAppServer(hono, {\n\t\t\tappName: \"test\",\n\t\t\tappSecret: \"test\",\n\t\t\tshopRepository: repo,\n\t\t});\n\n\t\thono.get(\"/app/test\", (c) => c.text(\"ok\"));\n\n\t\tconst resp = await hono.fetch(\n\t\t\tnew Request(\n\t\t\t\t\"http://localhost/app/test?shopware-shop-signature=invalid&shop-id=a\",\n\t\t\t),\n\t\t);\n\n\t\texpect(resp.status).toBe(400);\n\t\texpect(await resp.text()).toBe('{\"message\":\"Invalid request\"}');\n\t});\n\n\ttest(\"signature success\", async () => {\n\t\tconst hono = new Hono();\n\n\t\tconfigureAppServer(hono, {\n\t\t\tappName: \"test\",\n\t\t\tappSecret: \"test\",\n\t\t\tshopRepository: repo,\n\t\t});\n\n\t\thono.get(\"/app/test\", (c) => c.text(\"ok\"));\n\n\t\tconst resp = await hono.fetch(\n\t\t\tnew Request(\n\t\t\t\t\"http://localhost/app/test?shopware-shop-signature=8b523d99aeef5b456288fcec48236c3367a914c6b2c9fded63d81257ac019b25&shop-id=a\",\n\t\t\t),\n\t\t);\n\n\t\texpect(resp.status).toBe(200);\n\t\texpect(await resp.text()).toBe(\"ok\");\n\t\texpect(resp.headers.get(\"shopware-app-signature\")).toBe(\n\t\t\t\"4a43a105ccce57e8e38d4a1f7b3565d743b1e15fb1fec36f41fdf20164fa1c8b\",\n\t\t);\n\t});\n});\n"]}
@@ -13,6 +13,30 @@ export declare class Registration {
13
13
  * It will update the shop with the given oauth2 credentials.
14
14
  */
15
15
  authorizeCallback(req: Request): Promise<Response>;
16
+ /**
17
+ * This method should be called by Shopware Shop to set the shop active.
18
+ *
19
+ * <webhooks>
20
+ * <webhook name="appActivate" url="http://localhost:3000/app/delete" event="app.activated"/>
21
+ * </webhooks>
22
+ */
23
+ activate(req: Request): Promise<Response>;
24
+ /**
25
+ * This method should be called by Shopware Shop to set the shop in-active.
26
+ *
27
+ * <webhooks>
28
+ * <webhook name="appDeactivated" url="http://localhost:3000/app/deactivated" event="app.deactivated"/>
29
+ * </webhooks>
30
+ */
31
+ deactivate(req: Request): Promise<Response>;
32
+ /**
33
+ * This method should be called by Shopware Shop to delete the app.
34
+ *
35
+ * <webhooks>
36
+ * <webhook name="appDelete" url="http://localhost:3000/app/delete" event="app.deleted"/>
37
+ * </webhooks>
38
+ */
39
+ delete(req: Request): Promise<Response>;
16
40
  }
17
41
  export declare function randomString(length?: number): string;
18
42
  //# sourceMappingURL=registration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../src/registration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,YAAY;IACZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAElC;;;;OAIG;IACU,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IA6CvD;;;OAGG;IACU,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAsC/D;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAM,UAUxC"}
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../src/registration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,YAAY;IACZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAElC;;;;OAIG;IACU,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IA+CvD;;;OAGG;IACU,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuC/D;;;;;;OAMG;IACU,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAUtD;;;;;;OAMG;IACU,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAUxD;;;;;;OAMG;IACU,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAOpD;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAM,UAUxC"}