alchemy 0.30.0 → 0.30.1

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 (53) hide show
  1. package/lib/cloudflare/bindings.d.ts +24 -4
  2. package/lib/cloudflare/bindings.d.ts.map +1 -1
  3. package/lib/cloudflare/bindings.js.map +1 -1
  4. package/lib/cloudflare/bound.d.ts +3 -2
  5. package/lib/cloudflare/bound.d.ts.map +1 -1
  6. package/lib/cloudflare/index.d.ts +1 -0
  7. package/lib/cloudflare/index.d.ts.map +1 -1
  8. package/lib/cloudflare/index.js +1 -0
  9. package/lib/cloudflare/index.js.map +1 -1
  10. package/lib/cloudflare/queue.d.ts +24 -0
  11. package/lib/cloudflare/queue.d.ts.map +1 -1
  12. package/lib/cloudflare/queue.js +24 -0
  13. package/lib/cloudflare/queue.js.map +1 -1
  14. package/lib/cloudflare/secret-key.d.ts +120 -0
  15. package/lib/cloudflare/secret-key.d.ts.map +1 -0
  16. package/lib/cloudflare/secret-key.js +92 -0
  17. package/lib/cloudflare/secret-key.js.map +1 -0
  18. package/lib/cloudflare/secret.d.ts +9 -5
  19. package/lib/cloudflare/secret.d.ts.map +1 -1
  20. package/lib/cloudflare/secret.js +13 -5
  21. package/lib/cloudflare/secret.js.map +1 -1
  22. package/lib/cloudflare/secrets-store.d.ts +3 -0
  23. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  24. package/lib/cloudflare/secrets-store.js +3 -3
  25. package/lib/cloudflare/secrets-store.js.map +1 -1
  26. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  27. package/lib/cloudflare/worker-metadata.js +11 -0
  28. package/lib/cloudflare/worker-metadata.js.map +1 -1
  29. package/lib/cloudflare/worker.d.ts +30 -2
  30. package/lib/cloudflare/worker.d.ts.map +1 -1
  31. package/lib/cloudflare/worker.js.map +1 -1
  32. package/lib/cloudflare/wrangler.json.js +3 -0
  33. package/lib/cloudflare/wrangler.json.js.map +1 -1
  34. package/lib/secret.d.ts +5 -5
  35. package/lib/secret.d.ts.map +1 -1
  36. package/lib/secret.js.map +1 -1
  37. package/lib/serde.d.ts +5 -1
  38. package/lib/serde.d.ts.map +1 -1
  39. package/lib/serde.js +9 -2
  40. package/lib/serde.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/cloudflare/bindings.ts +34 -2
  43. package/src/cloudflare/bound.ts +36 -33
  44. package/src/cloudflare/index.ts +1 -0
  45. package/src/cloudflare/queue.ts +24 -0
  46. package/src/cloudflare/secret-key.ts +143 -0
  47. package/src/cloudflare/secret.ts +55 -41
  48. package/src/cloudflare/secrets-store.ts +4 -5
  49. package/src/cloudflare/worker-metadata.ts +10 -0
  50. package/src/cloudflare/worker.ts +30 -2
  51. package/src/cloudflare/wrangler.json.ts +2 -0
  52. package/src/secret.ts +7 -7
  53. package/src/serde.ts +40 -20
package/src/serde.ts CHANGED
@@ -31,33 +31,39 @@ export type Serialized<T> = T extends
31
31
  ? {
32
32
  "@schema": string;
33
33
  }
34
- : T extends Secret
34
+ : T extends Secret<string>
35
35
  ? {
36
36
  "@secret": string;
37
37
  }
38
- : T extends Date
38
+ : T extends Secret<any>
39
39
  ? {
40
- "@date": string;
40
+ "@secret": {
41
+ object: string;
42
+ };
41
43
  }
42
- : T extends Symbol
44
+ : T extends Date
43
45
  ? {
44
- "@symbol": string;
46
+ "@date": string;
45
47
  }
46
- : T extends Scope
48
+ : T extends Symbol
47
49
  ? {
48
- "@scope": null;
50
+ "@symbol": string;
49
51
  }
50
- : T extends Function
51
- ? undefined
52
- : T extends Array<infer U>
53
- ? Array<Serialized<U>>
54
- : T extends object
55
- ? {
56
- [K in keyof T as K extends symbol
57
- ? string
58
- : K]: Serialized<T[K]>;
59
- }
60
- : T;
52
+ : T extends Scope
53
+ ? {
54
+ "@scope": null;
55
+ }
56
+ : T extends Function
57
+ ? undefined
58
+ : T extends Array<infer U>
59
+ ? Array<Serialized<U>>
60
+ : T extends object
61
+ ? {
62
+ [K in keyof T as K extends symbol
63
+ ? string
64
+ : K]: Serialized<T[K]>;
65
+ }
66
+ : T;
61
67
 
62
68
  export type SerializedScope = {
63
69
  [fqn: ResourceFQN]: Serialized<Resource>;
@@ -121,7 +127,14 @@ export async function serialize(
121
127
  return {
122
128
  "@secret":
123
129
  options?.encrypt !== false
124
- ? await encrypt(value.unencrypted, scope.password)
130
+ ? typeof value.unencrypted === "string"
131
+ ? await encrypt(value.unencrypted, scope.password)
132
+ : {
133
+ data: await encrypt(
134
+ JSON.stringify(value.unencrypted),
135
+ scope.password,
136
+ ),
137
+ }
125
138
  : value.unencrypted,
126
139
  };
127
140
  } else if (isType(value)) {
@@ -203,13 +216,20 @@ export async function deserialize(
203
216
  );
204
217
  }
205
218
  if (value && typeof value === "object") {
206
- if (typeof value["@secret"] === "string") {
219
+ if (value["@secret"]) {
207
220
  if (!scope.password) {
208
221
  throw new Error(
209
222
  "Cannot deserialize secret without password, did you forget to set password when initializing your alchemy app?\n" +
210
223
  "See: https://alchemy.run/docs/concepts/secret.html#encryption-password",
211
224
  );
212
225
  }
226
+ if (typeof value["@secret"] === "object") {
227
+ return new Secret(
228
+ JSON.parse(
229
+ await decryptWithKey(value["@secret"].data, scope.password),
230
+ ),
231
+ );
232
+ }
213
233
  return new Secret(await decryptWithKey(value["@secret"], scope.password));
214
234
  } else if ("@schema" in value) {
215
235
  return value["@schema"];